sha*_*rav 2 sql oracle common-table-expression
我可以使用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
Run Code Online (Sandbox Code Playgroud)
我可以在 oracle 数据库中做这样的事情吗?
嗯,这不是你能不能做到。这是关于你是否需要这样做。在您的查询中,我没有看到任何过滤条件。你想更新所有的行吗?在您的情况下,我认为不需要CTE。
何时需要CTE,即当您遇到多次执行子查询的场景时,将 with 子句作为子查询分解方法。您使用 WITH 子句确保子查询执行一次,并且结果集存储为临时表。
是的,您可以将WITH子句用于UPDATE语句。
例如,
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Run Code Online (Sandbox Code Playgroud)
你可以使用一个MERGE语句使用了WITH子句。
例如,
SQL> MERGE INTO emp e USING
2 (WITH average AS
3 (SELECT deptno, AVG(sal) avg_sal FROM emp group by deptno)
4 SELECT * FROM average
5 ) u
6 ON (e.deptno = u.deptno)
7 WHEN MATCHED THEN
8 UPDATE SET e.sal =
9 CASE
10 WHEN e.sal <= u.avg_sal
11 THEN e.sal * 1.05
12 ELSE e.sal * 1.03
13 END
14 /
14 rows merged.
SQL>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11137 次 |
| 最近记录: |