不在语句 Oracle 中更新查询

Update query with not in statement Oracle

我是 运行 一个带有 NOT IN 的更新语句,其中包含另一个查询 return 我一些签证号码。

似乎还有一个我无法追踪的错误,我怀疑我是否可以在 NOT IN 中使用查询。.如果有人能指出我在这里做错了什么。

Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:





UPDATE HUDHAIFA.VISA_APP
    SET VISA_NO=(LPAD(TRIM(VISA_NO),8,'0'))
    WHERE LENGTH(VISA_NO) < 8
    AND VISA_NO IS NOT NULL
    AND VISA_NO NOT IN (  
      SELECT
      CASE
        WHEN LTRIM(VISA_NO, '0') IS NULL THEN VISA_NO
        WHEN LTRIM(VISA_NO, '0') IS NOT NULL THEN LTRIM(VISA_NO, '0') 
      END as VISA_NO
      FROM HUDHAIFA.VISA_APP
      WHERE LENGTH(VISA_NO) < 8
      GROUP BY CASE
        WHEN LTRIM(VISA_NO, '0') IS NULL THEN VISA_NO
        WHEN LTRIM(VISA_NO, '0') IS NOT NULL THEN LTRIM(VISA_NO, '0') 
      END
      HAVING COUNT(*) > 1
      ORDER BY VISA_NO asc
    );

请尝试删除 ORDER BY VISA_NO asc 和 运行。它在语法上不正确,在您的情况下不需要。

一般来说,ORA-907 通常不会与右括号一致,而是类似于 'there is syntax error near this place so I cannot imagine what you want and guess you should close left parenthesis opened somewhere before' 的意思。在您的情况下,正如 Bikash Ranjan Bhoi 所说,原因是 ORDER BY 子句对此类子查询毫无意义。

您还应该检查该子查询永远不会在其结果中产生 NULLINNOT IN 语句都需要非空值集。