sql >> Base de Datos >  >> RDS >> Oracle

Oracle:uso de CTE con cláusula de actualización

Bueno, no se trata de si podrías hacerlo o no. Se trata de si necesitas hacerlo o no. En su consulta no veo ningún criterio de filtro. ¿Quieres actualizar todas las filas? No veo la necesidad de CTE en tu caso.

¿Cuándo necesitas un CTE? , es decir, una cláusula with como método de factorización de subconsulta siempre que tenga un escenario en el que la subconsulta se ejecute varias veces. Utiliza una cláusula WITH para asegurarse de que la subconsulta se ejecute una vez y el conjunto de resultados se almacene como una tabla temporal.

Sí, podrías usar CON cláusula para una ACTUALIZACIÓN declaración.

Por ejemplo,

UPDATE TABLE t
SET t.column1, t.column2 = (SELECT column1, column2 FROM 
                                       (
                                        WITH cte AS(
                                   SELECT ... FROM another_table
                                                 )
                                         SELECT * FROM cte
                                        )

Podrías usar un MERGE declaración USO el CON cláusula.

Por ejemplo,

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>