Bem, não é sobre se você poderia fazer isso ou não. É sobre se você precisa fazer isso ou não. Na sua consulta, não vejo nenhum critério de filtro. Deseja atualizar todas as linhas? Não vejo necessidade de CTE no seu caso.
Quando você precisa de um CTE , ou seja, uma cláusula with como um método de fatoração de subconsulta sempre que você tiver um cenário em que a subconsulta seja executada várias vezes. Você usa uma cláusula WITH para garantir que a subconsulta seja executada uma vez e que o conjunto de resultados seja armazenado como uma tabela temporária.
Sim, você pode usar COM cláusula para um UPDATE declaração.
Por exemplo,
UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM
(
WITH cte AS(
SELECT ... FROM another_table
)
SELECT * FROM cte
)
Você pode usar um MERGE declaração USANDO o COM cláusula.
Por exemplo,
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>