【发布时间】:2023-03-22 08:20:01
【问题描述】:
我需要创建一个 oracle 表,如果它在 Oracle 数据库中不存在,并且如果该表存在则不做任何事情,因此我编写了一个匿名块,如果我触发该查询,它可以在 SQL Developer 中工作两次或三次我在 sql developer 中没有任何异常。这是我写的以下查询-
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; ";
我在我的 java 代码中像这样执行上面的 sql 查询 - 第一次运行我的程序时,表被创建,但是当我第二次尝试运行同一个程序时,我总是得到以下异常。
// 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 代码中发生?
附注我不想放下桌子
更新代码:-
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 ))";
【问题讨论】:
标签: java sql oracle if-statement