Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:Korzystanie z CTE z klauzulą ​​aktualizacji

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>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migracja postaci Oracle opartej na formularzu

  2. Wartość danych w czasie

  3. aktualizacja klucza podstawowego a usunięcie klucza podstawowego + wstawienie

  4. błąd:ORA-65096:nieprawidłowa nazwa wspólnego użytkownika lub roli w oracle

  5. Oracle dynamic sql ocenia wyrażenie w klauzuli gdzie