【问题标题】:Avoiding ORA-00955: name is already used by an existing object避免 ORA-00955:名称已被现有对象使用
【发布时间】:2015-05-02 10:57:48
【问题描述】:

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

【问题讨论】:

  • 你是说drop和create成功了,但是报错了。错误是由脚本的不同部分引发的,或者 drop 和 create 正在引发错误,在这种情况下,其中一个或两个都失败了。
  • @DavidAldridge 问题是脚本末尾的斜线。 create 语句执行两次,因为它在缓冲区中。
  • @David 脚本中只有 drop 和 create,我成功删除了表并成功创建,之后我收到此错误。当我在后端检查表时,它已成功创建。
  • 如果是因为斜线,那么如何避免它。如果我删除斜线,它会起作用吗?
  • 按照我在答案中的建议,有一个有效的测试用例。

标签: sql oracle


【解决方案1】:

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 是无效的列名。您将收到Invalid identifier error

另一个问题:

COL 3 VARCHAR2(30 CHAR),

);

列列表末尾多了一个逗号

【讨论】:

  • 谢谢@lalit。不要担心列和逗号中的空间,它仅用于说明目的。我会尝试你的建议并让你知道。
  • 感谢@Lalit,删除斜线已经奏效。在 drop 之后添加它,在 drop 之后会出现错误,就像在创建时一样。所以现在 sql 中没有斜杠,也没有出现任何错误。谢谢:)
  • 感谢您的反馈。请将其标记为已回答,会对其他人有所帮助。
【解决方案2】:

只需修改您的脚本如下:

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;

【讨论】:

  • 在每个命令后添加斜杠,导致两个 stmt 都出错,因此将两者都删除并正常工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
相关资源
最近更新 更多