使用不在语句Oracle中更新查询



我正在使用NOT IN运行一个更新语句,其中包含另一个查询,该查询返回了我一些签证号。

似乎也有一个错误,我无法追踪它,我怀疑我是否可以在 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通常不是consent的括号,而是含义'之类的东西附近存在语法错误,所以我无法想象您想要什么,猜测您应该关闭左括号打开之前的某个地方。在您的情况下,正如Bikash Ranjan Bhoi所说的那样,原因是ORDER BY条款,对这种子查询毫无意义。

您还应该检查此子查询永远不会在其结果中产生NULLINNOT IN语句的工作都需要不为无效的值。

最新更新