问题描述
根据官方的 Merge 语法,USING
子句中的子查询不需要括号。然而,这些示例总是有它们,如果您在没有尝试的情况下尝试,则会收到错误消息。这是规范中的错误吗?
MERGE INTO bonuses D
USING (SELECT employee_id,salary,department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000);
解决方法
在我看来,子查询本身意味着括号中的内容。你见过“独立”的子查询吗?我没有。
select whatever
from (select blabla from dual) --> subquery,in parentheses
或
select (select dummy from dual) --> parentheses again
from ...
等
为什么MERGE
会例外?
Oracle 文档本身没有明确提及括号,标量子查询除外。但是,“一般规则”(由 Google 搜索返回)说“子查询必须括在括号中”。如果我是你,我会按原样接受。