Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:Използване на CTE с клауза за актуализиране

Е, не става въпрос за това дали можете да го направите или не. Въпросът е дали трябва да го направите или не. Във вашето запитване не виждам критерии за филтриране. Искате ли да актуализирате всички редове? Не виждам нужда от CTE във вашия случай.

Кога имате нужда отCTE , т.е. клауза with като метод за факторизиране на подзаявка, когато имате сценарий, при който подзаявката се изпълнява многократно. Използвате клауза WITH, за да сте сигурни, че подзаявката се изпълнява веднъж и наборът от резултати се съхранява като временна таблица.

Да, можете да използвате С клауза за АКТУАЛИЗАЦИЯ изявление.

Например,

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

Можете да използвате ОБЕДИВАНЕ изявление USING наС клауза.

Например,

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>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Връщане на номер от оператора Oracle Select след датата на синтактичен анализ

  2. Инсталиране на Oracle Instant Client

  3. Четене на BLOB с помощта на JDBC Spring без набор от резултати

  4. Може ли управляваният от Oracle драйвер да използва правилно async/await?

  5. Реконструиране на Standby DB