不在语句Oracle中更新查询

问题描述 投票:0回答:2

我正在使用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
    );
sql oracle notin
2个回答
0
投票

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


0
投票

一般来说,ORA-907通常没有一致的右括号,但意味着“在这个地方附近有语法错误,所以我无法想象你想要什么,并猜测你应该在之前关闭左括号”。在你的情况下,正如Bikash Ranjan Bhoi所说,理由是ORDER BY条款对这种子查询毫无意义。

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

© www.soinside.com 2019 - 2024. All rights reserved.