我需要的,如果在Oracle數據庫中,如果再表中存在沒有做任何事情不存在,它創建一個Oracle表,所以對於我寫了一個匿名塊,在SQL開發人員,如果我解僱該查詢兩次或三次我沒有得到在SQL Developer中任何異常的工作。這是下面的查詢我wrote-創建一個表,如果在Oracle(使用Java)不存在
public static final String DATABASE_TABLE = "LnPData";
public static final String CREATE_SQL = "DECLARE " +
"t_count INTEGER; " +
"v_sql VARCHAR2(1000) := 'create table " +DATABASE_TABLE +
"(ID number(10,0), " +
"CGUID VARCHAR(255), " +
"PGUID VARCHAR(255), " +
"SGUID VARCHAR(255), " +
"USERID VARCHAR(255), " +
"ULOC VARCHAR(255), " +
"SLOC VARCHAR(255), " +
"PLOC VARCHAR(255), " +
"ALOC VARCHAR(255), " +
"SITEID VARCHAR(255), " +
"PRIMARY KEY (ID))'; " +
"BEGIN " +
"SELECT COUNT(*) " +
"INTO t_count " +
"FROM user_tables " +
"WHERE table_name = '" +DATABASE_TABLE + "'; " +
"IF t_count = 0 THEN " +
"EXECUTE IMMEDIATE v_sql; " +
"END IF; " +
"END; ";
我執行上面的SQL查詢像這樣在我的Java代碼 - 當我運行我的程序第一次,表被創建,但第二次,當我嘗試運行同樣的程序,我總是得到下面的例外。
// get the connection
LnPDataConstants.DB_CONNECTION = getDBConnection();
LnPDataConstants.STATEMENT = LnPDataConstants.DB_CONNECTION.createStatement();
LnPDataConstants.STATEMENT.executeUpdate(LnPDataConstants.CREATE_SQL);
,我總是得到SQL異常原樣
SQL Error: ORA-00955: name is already used by an existing object
00955. 00000 - "name is already used by an existing object"
任何建議,爲什麼會發生在Java代碼?
P.S.我不想刪除表
更新的代碼: -
public static final String CREATE_SQL = "CREATE TABLE IF NOT EXISTS " +DATABASE_TABLE +
"(ID number(10,0), " +
" CGUID VARCHAR(255), " +
" PGUID VARCHAR(255), " +
" SGUID VARCHAR(255), " +
" USERID VARCHAR(255), " +
" ULOC VARCHAR(255), " +
" SLOC VARCHAR(255), " +
" PLOC VARCHAR(255), " +
" ALOC VARCHAR(255), " +
" SITEID VARCHAR(255), " +
" PRIMARY KEY (ID))";
請勿使用對象名稱......這不值得冒險。 – Ben
我只是想表現出這種可能性,但你說得對,依賴於案例的表/列是一個噩夢。他的陳述存在的問題是,他正在創建一個獨立案件對象,並且檢查不會忽略它。 – Eggi
@Eggi,感謝評論,我無法理解,你能否再次解釋我,我需要做出什麼樣的改變,以及我需要做出哪些改變,你只是說我應該只對表名進行更改。只要讓它成爲UpperCase? – ferhan