ORA 00933:SQL 命令未正确以 Oracle 中的 IN 运算符结束
Posted
技术标签:
【中文标题】ORA 00933:SQL 命令未正确以 Oracle 中的 IN 运算符结束【英文标题】:ORA 00933 : SQL Command not properly ended with IN operator in oracle 【发布时间】:2020-12-01 07:45:02 【问题描述】:我正在尝试执行如下查询
更新 L2l_Lov_Master 集 QUERY_STRING = 'com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation 实体 WHERE entity.status IN ('NEW','REJECTED','REJECTED_BY_CUSTOMER')' 其中 LOV_ID = 'customerLov-leadcode';
我正在使用 oracle DB,我收到“ORA 00933:SQL 命令未正确结束”。需要知道哪里出错了
【问题讨论】:
【参考方案1】:据我所知,您的问题与引号有关 --> 更明确地说,当您的 IN
子句开始时您遇到问题,因为您关闭了查询字符串中的第一个引号
query_string = 'com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity WHERE entity.status IN ('
我认为您需要封装 IN
子句中的引号,以便它们被第一个查询忽略。
UPDATE l2l_lov_master
SET
query_string = 'com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity WHERE entity.status IN (''
new '','' rejected '','' rejected_by_customer '')'
WHERE
lov_id = 'customerLov-leadcode';
【讨论】:
很高兴为您提供帮助。正如信息一样,在创建语句时,文本中可能存在一些差异,因此请确保在您的实际项目中使用代码之前更正它们。 (在 IN 子句中我使用了小写并添加了一些空格)【参考方案2】:单引号过多很容易让人迷失方向。因此,请使用 q-quoting 机制,如下例所示:
SQL> CREATE TABLE l2l_lov_master
2 AS
3 SELECT 'customerLov-leadcode' lov_id, LPAD ('x', 500, 'x') query_string
4 FROM DUAL;
Table created.
参见第 3 行和第 4 行末尾,即q'[blabla]'
。
SQL> UPDATE L2l_Lov_Master
2 SET QUERY_STRING =
3 q'[com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity
4 WHERE entity.status IN ('NEW','REJECTED','REJECTED_BY_CUSTOMER')]'
5 WHERE LOV_ID = 'customerLov-leadcode';
1 row updated.
SQL> SELECT * FROM l2l_lov_master;
LOV_ID
--------------------
QUERY_STRING
--------------------------------------------------------------------------------
customerLov-leadcode
com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity
WHERE entity.status IN ('NEW','REJECTED','REJECTED_BY_CUSTOMER')
SQL>
【讨论】:
以上是关于ORA 00933:SQL 命令未正确以 Oracle 中的 IN 运算符结束的主要内容,如果未能解决你的问题,请参考以下文章
SQL 错误:ORA-00933:SQL 命令未正确结束 00933。00000 -“SQL 命令未正确结束”
为啥会出现“ORA-00933:SQL 命令未正确结束”错误(立即执行)?