Yah, ini bukan tentang apakah Anda bisa melakukannya atau tidak. Ini tentang apakah Anda perlu melakukannya atau tidak. Dalam kueri Anda, saya tidak melihat kriteria filter apa pun. Anda ingin memperbarui semua baris? Saya tidak melihat perlunya CTE dalam kasus Anda.
Kapan Anda membutuhkan CTE , yaitu a dengan klausa sebagai metode pemfaktoran sub-kueri setiap kali Anda memiliki skenario di mana sub-kueri dijalankan beberapa kali. Anda menggunakan klausa WITH untuk memastikan subquery dieksekusi satu kali, dan resultset disimpan sebagai tabel temp.
Ya, Anda dapat menggunakan DENGAN klausa untuk UPDATE penyataan.
Misalnya,
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Anda dapat menggunakan MERGE pernyataan GUNAKAN DENGAN klausa.
Misalnya,
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>