Cóż, nie chodzi o to, czy możesz to zrobić, czy nie. Chodzi o to, czy musisz to zrobić, czy nie. W Twoim zapytaniu nie widzę żadnych kryteriów filtrowania. Chcesz zaktualizować wszystkie wiersze? Nie widzę potrzeby CTE w twoim przypadku.
Kiedy potrzebujesz CTE , tj. klauzula with jako metoda faktoringu podzapytania, gdy istnieje scenariusz, w którym podzapytanie jest wykonywane wiele razy. Używasz klauzuli WITH, aby upewnić się, że podzapytanie zostanie wykonane raz, a zestaw wyników jest przechowywany jako tabela tymczasowa.
Tak, możesz użyć Z klauzula AKTUALIZACJI oświadczenie.
Na przykład
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Możesz użyć MERGE oświadczenie UŻYWANIE Z klauzula.
Na przykład
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>