避免使用ORA-00955:名称已被现有对象使用

时间:2015-04-09 08:01:56

标签: sql oracle

我在sql文件中创建如下表,每次有新文件要处理时都会调用该表。因此每次有新文件出现时,我都会删除此表并再次创建并加载。当我从shell脚本调用它时,此表被删除并成功创建,但是随之而来的是我得到如下错误。知道如何避免这种情况。

ERROR at line 1:
ORA-00955: name is already used by an existing object

表删除并创建sql文件:

DROP TABLE SCHEMA.TEMP_SOURCE;
CREATE TABLE SCHEMA.TEMP_SOURCE(
COL 1 VARCHAR2(30 CHAR),
COL 2 VARCHAR2(30 CHAR),
COL 3 VARCHAR2(30 CHAR),
);
/
EXIT;

2 个答案:

答案 0 :(得分:5)

  

ORA-00955:现有对象已使用名称

那是因为,你在脚本的末尾放了一个斜杠/

  

);

     

/

由于这个原因,缓冲区中的前一个语句会再次执行。这意味着 CREATE TABLE语句执行两次

从末尾删除斜杠。对于单个查询,分号足以作为语句终止符。

我会这样做:

SQL> BEGIN
  2     EXECUTE IMMEDIATE 'DROP TABLE TEMP_SOURCE';
  3  EXCEPTION
  4     WHEN OTHERS THEN
  5        IF SQLCODE != -942 THEN
  6           RAISE;
  7        END IF;
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL>
SQL> CREATE TABLE TEMP_SOURCE
  2    (
  3      COL_1 VARCHAR2(30 CHAR),
  4      COL_2 VARCHAR2(30 CHAR),
  5      COL_3 VARCHAR2(30 CHAR)
  6    );

Table created.

SQL>

话虽如此,您在脚本中有多个问题。

  

COL 1 VARCHAR2(30 CHAR),

列名称中不能有空格。 COL 1是无效的列名。您将收到无效的标识符错误

另一个问题:

  

COL 3 VARCHAR2(30 CHAR),

     

);

列列表的末尾有一个额外的逗号

答案 1 :(得分:1)

只需修改您的脚本,如下所示:

DROP TABLE SCHEMA.TEMP_SOURCE
/
CREATE TABLE SCHEMA.TEMP_SOURCE(
COL 1 VARCHAR2(30 CHAR),
COL 2 VARCHAR2(30 CHAR),
COL 3 VARCHAR2(30 CHAR),
)
/
EXIT;