【问题标题】:Can use <> or != inside statement only只能在语句内部使用 <> 或 !=
【发布时间】:2012-05-07 03:02:34
【问题描述】:

我有一个过程,可以用游标遍历一个表中的记录,然后向另一个表发起插入语句。

我在 If 语句 != ALL 中收到此错误

 Begin

 If V_Item = V_Item_G 
    And V_New_Part Is Null   
    And (V_Delete_G Is Null or V_Delete_G != 'Y')
    And Status_G != ALL  ('KNOWN', 'NEW', 'UNKNOWN', 'SOLD') 
 THEN INSERT INTO PART     
    VALUES ( V_Item, V_New_Part);

  End IF;

  End;

注意NOT IN 不起作用。

使用not in 不会插入任何值。当我手动排除故障时,!= ALL!= Any 返回我需要从 select 语句中插入的正确值,但是当我在语句中使用 NOT IN 时,它不会插入正确的值。如果我注释掉该行并执行该过程,它会返回大部分正确的值。

Not In ('KNOWN', 'NEW', 'UNKNOWN', 'SOLD') 
--Does not work

【问题讨论】:

  • 我从未见过您使用的!=ALL 语法。当您扩展 and 语句时会发生什么,即 Status_G != 'KNOWN' AND Status_G != 'NEW' 等?你在做正确的END IF吗?您的INSERT 语句是否在程序之外起作用?
  • 这是什么意思?你能指点我的文档吗?
  • @Marc:!= ALL(或者&lt;&gt; ALL)是自 1986 年以来的标准 SQL 语法。你没有看到它表明它不经常使用,但它是有效的。但是,!= ALL 等价于 NOT ININ 等价于 = ANY
  • Status_G 是否包含任何 NULL 值??

标签: sql oracle stored-procedures if-statement plsql


【解决方案1】:

这样做...

And Status_G != ALL  ('KNOWN', 'NEW', 'UNKNOWN', 'SOLD')

...首先使用显式方法:

And 
(Status_G <> 'KNOWN' AND Status_G <> 'NEW' 
AND Status_G <> 'UNKNOWN' AND Status_G <> 'SOLD')

您也可以这样做:

And 
NOT (Status_G = 'KNOWN' OR Status_G = 'NEW' 
OR Status_G = 'UNKNOWN' OR Status_G = 'SOLD')

如果仍然(非常明确的条件)没有插入正确的值,则代码中的错误不在该行。查看 IF 语句的其他条件,或者您的数据

或许

变量 Status_G 有错字?请调试打印Status_G的值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多