我在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;
答案 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;