Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle:Menggunakan CTE dengan klausa pembaruan

Yah, ini bukan tentang apakah Anda bisa melakukannya atau tidak. Ini tentang apakah Anda perlu melakukannya atau tidak. Dalam kueri Anda, saya tidak melihat kriteria filter apa pun. Anda ingin memperbarui semua baris? Saya tidak melihat perlunya CTE dalam kasus Anda.

Kapan Anda membutuhkan CTE , yaitu a dengan klausa sebagai metode pemfaktoran sub-kueri setiap kali Anda memiliki skenario di mana sub-kueri dijalankan beberapa kali. Anda menggunakan klausa WITH untuk memastikan subquery dieksekusi satu kali, dan resultset disimpan sebagai tabel temp.

Ya, Anda dapat menggunakan DENGAN klausa untuk UPDATE penyataan.

Misalnya,

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

Anda dapat menggunakan MERGE pernyataan GUNAKAN DENGAN klausa.

Misalnya,

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. Bersenang-senang Dengan Pesan

  2. Apakah ada cara untuk mengakses prosedur plsql pribadi untuk tujuan pengujian?

  3. Apakah SQLDeveloper mendukung eksekusi skrip?

  4. Bagaimana cara mengumpulkan zona waktu sistem operasi dari database Oracle dalam format string? (Migrasi/konversi tanggal ke ts dengan tz)

  5. Lewati objek tipe tabel sebagai parameter input ke Prosedur Tersimpan di Oracle dari C #