Nun, es geht nicht darum, ob Sie es tun könnten oder nicht. Es geht darum, ob Sie es tun müssen oder nicht. In Ihrer Abfrage sehe ich keine Filterkriterien. Sie möchten alle Zeilen aktualisieren? Ich sehe keine Notwendigkeit für CTE in Ihrem Fall.
Wann brauchen Sie einen CTE , d. h. eine with-Klausel als Faktorisierungsmethode für Unterabfragen, wenn Sie ein Szenario haben, in dem die Unterabfrage mehrmals ausgeführt wird. Sie verwenden eine WITH-Klausel, um sicherzustellen, dass die Unterabfrage einmal ausgeführt und die Ergebnismenge als temporäre Tabelle gespeichert wird.
Ja, Sie könnten WITH verwenden Klausel für ein UPDATE Aussage.
Zum Beispiel
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Sie könnten ein MERGE verwenden Anweisung USING das MIT Klausel.
Zum Beispiel
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>