Nå, det handler ikke om, hvorvidt du kunne gøre det eller ej. Det handler om, hvorvidt du skal gøre det eller ej. I din forespørgsel kan jeg ikke se nogen filterkriterier. Vil du opdatere alle rækkerne? Jeg ser ikke et behov for CTE i dit tilfælde.
Hvornår har du brug for en CTE , dvs. en med klausul som en underforespørgselsfaktoreringsmetode, når du har et scenarie, hvor underforespørgslen udføres flere gange. Du bruger en WITH-klausul for at sikre, at underforespørgslen udføres én gang, og at resultatsættet er gemt som en midlertidig tabel.
Ja, du kunne bruge WITH klausul for en OPDATERING udmelding.
For eksempel,
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Du kan bruge en FLETT erklæring BRUGER MED klausul.
For eksempel,
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>