【问题标题】:Oracle : ORA-00933: SQL command not properly endedOracle : ORA-00933: SQL 命令未正确结束
【发布时间】:2026-01-01 14:10:01
【问题描述】:

我遇到了 oracle 错误,

ORA-00933:SQL 命令未正确结束

如下。

insert into TableOne (name, description, scopeid, readonly)
Select 'access', 'Some Description', 0, 0 from dual
where not exists(SELECT * FROM Privilege WHERE name = 'access')
/
insert into TableTwo (name, uuid, description, scopeid) 
Select 'Role','ROLE_UUID','Another description.', 0 from dual
where not exists(SELECT * FROM Role WHERE uuid = 'ROLE_UUID')
/

我在每个语句末尾的“/”之前添加了分号。

有什么我可能错的建议吗?

【问题讨论】:

  • 您发布的代码不会引发该错误。相反,第二个insert 抛出一个不同的错误。您只为四列提供三个值。你会得到 ORA-00947,“没有足够的值”。那是您正在运行的确切代码和唯一代码吗? (你怎么知道错误不是来自其他东西?)
  • 当我去删除任何敏感名称/描述时,我在第二个查询(Good Catch)上弄错了第二个参数。它在那里,我收到的错误是描述中的错误。我知道错误来自第一个查询,因为我们有一个构建过程正在处理其他文件,直到它到达顶部带有此查询的那个。

标签: oracle ora-00933


【解决方案1】:

你没有发布 CREATE TABLE 声明,所以我自己做了。

SQL> create table privilege as
  2    select 'some name' name from dual;

Table created.

SQL> create table role as
  2    select 'some UUID' uuid from dual;

Table created.

SQL> create table tableone
  2    (name        varchar2(10),
  3     description varchar2(20),
  4     scopeid     number,
  5     readonly    number);

Table created.

SQL> create table tabletwo
  2    (name        varchar2(10),
  3     uuid        varchar2(10),
  4     description varchar2(20),
  5     scopeid     number);

Table created.

SQL>

让我们运行insert 您发布的完全复制/粘贴的语句(我没有更改任何内容):

SQL> insert into TableOne (name, description, scopeid, readonly)
  2  Select 'access', 'Some Description', 0, 0 from dual
  3  where not exists(SELECT * FROM Privilege WHERE name = 'access')
  4  /

1 row created.

SQL> insert into TableTwo (name, uuid, description, scopeid)
  2  Select 'Role','ROLE_UUID','Another description.', 0 from dual
  3  where not exists(SELECT * FROM Role WHERE uuid = 'ROLE_UUID')
  4  /

1 row created.

SQL>

显然,它们都可以工作,并且不会引发 ORA-00933SQL 命令未正确结束)。因此,要么您没有发布应有的所有内容,要么您误解了现实。

【讨论】:

  • 我想假设这些表不存在是公平的。但他们做到了。我们在自动构建中运行这些查询。您的解决方案是“正确的”,但在我的情况下,我必须删除第三条语句之间的额外空格,我认为这在很大程度上无关紧要并且让它发挥作用。感谢您的详细回复。
  • 不客气。至于删除“额外空间”:嗯,您发布的代码中没有任何内容,因此社区不可能猜测您做错了什么。因为,正如演示的那样,该代码有效。好吧,没关系,我很高兴你修好了。