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 命令未正确结束”

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

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

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

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