我正在使用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通常没有一致的右括号,但意味着“在这个地方附近有语法错误,所以我无法想象你想要什么,并猜测你应该在之前关闭左括号”。在你的情况下,正如Bikash Ranjan Bhoi所说,理由是ORDER BY
条款对这种子查询毫无意义。
您还应检查此子查询是否永远不会在其结果中生成NULL
。 IN
和NOT IN
语句都需要非空值集。