ORA-00933: 运行创建序列命令时 SQL 命令未正确结束

Posted

技术标签:

【中文标题】ORA-00933: 运行创建序列命令时 SQL 命令未正确结束【英文标题】:ORA-00933: SQL command not properly ended when running create sequence commands 【发布时间】:2012-10-30 20:54:14 【问题描述】:

我正在尝试使用以下 C# 代码执行一些 sql:

IDbCommand objOracleCommand = CreateCommand(commandPart, connection, transaction);
objOracleCommand.ExecuteNonQuery();

我收到“ORA-00933:SQL 命令未正确结束”错误。

commandPart 是一个字符串,如下所示:

CREATE SEQUENCE seq_1
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOMINVALUE
NOCACHE
NOCYCLE
NOORDER

CREATE SEQUENCE seq_2 START WITH 1 INCREMENT BY 1

commandPart 实际上是从文本文件中读取的。原来的 SQL 有这样的分号:

CREATE SEQUENCE seq_1
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOMINVALUE
NOCACHE
NOCYCLE
NOORDER;

CREATE SEQUENCE seq_2 START WITH 1 INCREMENT BY 1;

这个原始的 sn-p(带分号)可以在 SQL Developer 中正常运行。如果我通过 C# 运行原始的 sn-p,我会得到“ora-00911:无效字符”。有什么想法吗?

谢谢, 埃里克

【问题讨论】:

尝试在 NOORDER 后面加一个分号。如果这不能解决问题,请尝试将两条语句分开并一次执行一条。 【参考方案1】:

您的命令部分由两个命令组成。 Oracle 很困惑,因为它只需要一个命令。

您需要分别执行 (ExecuteNonQuery) 这两个命令。

【讨论】:

嗨,我放了一个;最后我得到一个 ORA-00933: SQL 命令没有正确结束。我放了一个;在两个查询之间,我得到一个 ora-00911: invalid character 错误。我正在解析一个超过 300,000 行的 sql 文件,该文件正在使用我公司的元数据创建一个空白数据库。如果我在分号处拆分它,它会一直工作,直到我得到有很多语句的函数创建语句,用分号分隔。如果我继续沿着这条路线走下去,我似乎最终会编写自己的 SQL 解析器。我很难相信 Oracle 不能在一个 sql 命令中处理多个 sql 语句。 -埃里克 为了您的目的,最好使用 SQLplus。它会正确拆分和执行命令,包括PL/SQL块、存储过程等。如果您自己进行拆分,则规则是在分号处拆分,除非遇到DECLARE或BEGIN;那么您必须在单独的行上的下一个斜杠 (/) 处拆分。 (Oracle 有三种语言:SQL、PL/SQL 和 SQLplus。斜线仅是 SQL*plus 的一部分。)

以上是关于ORA-00933: 运行创建序列命令时 SQL 命令未正确结束的主要内容,如果未能解决你的问题,请参考以下文章

SQL 错误:ORA-00933:SQL 命令未正确结束 00933。00000 -“SQL 命令未正确结束”

oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?

ora-00933: sql 命令未正确结束怎么解决

为啥会出现“ORA-00933:SQL 命令未正确结束”错误(立即执行)?

ORA 00933 sql 命令未正确结束

选择进入导致错误 ORA-00933:SQL 命令未正确结束