【发布时间】:2015-03-04 07:37:20
【问题描述】:
我可以在 oracle 数据库中使用公用表表达式进行更新吗?
我在尝试此操作时收到错误 ORA-00928: missing SELECT keyword:
with average as (SELECT avg(salary) FROM instructor)
update instructor
set salary = case
when salary <= average then salary * 1.05
else salary * 1.03
end
【问题讨论】:
-
我对 Oracle 数据库没有太多经验,但我认为您遇到了错误,因为您想在更新中使用 CTE(以表的形式返回结果)。为什么不将
SELECT avg(salary) FROM instructor的结果存储到一个变量中并在UPDATE 中使用它呢?我认为这是做你想做的最简单的方法.. -
好的,我会这样做的。但是我有一个问题,我们可以同时使用 with 和 update 子句吗?
-
如我所说,CTE 以表格的形式返回结果,然后您可以通过与其他表格的 JOIN 来使用它,或者以其他方式使用(但不能以您的方式使用)重新使用它)以获得您想要的结果。所以,回答你的问题:不,你不能像你那样使用 CTE(它没有被命名为'with')。
-
语法不正确。是的,您可以在更新语句中使用 WITH 子句,请参阅我的答案。
标签: sql oracle common-table-expression