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

Buat pemicu yang memperbarui kolom di satu tabel saat kolom di tabel lain diperbarui

Bagaimana cara mendapatkan id tanggal dan baris?

Dengan asumsi ini adalah kolom pada tabel ORDER Anda yang disebut DELIVERY_DATE dan ID pemicu Anda akan terlihat seperti ini:

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE ON Order
    FOR EACH ROW 
BEGIN
   if :new.delivery_date != :old.delivery_date
   then
       UPDATE Delivery d
       set d.delivery_date = :new.delivery_date
       where d.order_id = :new.id;
    end if;
END;

Perhatikan klausa FOR EACH ROW:yang diperlukan untuk mereferensikan nilai dari masing-masing baris. Saya telah menggunakan konstruk IF untuk menguji apakah akan menjalankan UPDATE saat Pengiriman. Jika Anda tidak memiliki logika lain di pemicu Anda, Anda bisa menulisnya seperti ini...

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE OF delivery_date ON Order
    FOR EACH ROW 
BEGIN
   UPDATE Delivery d
   set d.delivery_date = :new.delivery_date
   where d.order_id = :new.id;
END;

Saya telah menjawab pertanyaan yang Anda ajukan, tetapi sebagai tambahan, saya akan menunjukkan bahwa model data Anda kurang optimal. Desain yang dinormalisasi dengan benar akan menahan DELIVERY_DATE hanya pada satu tabel:DELIVERY tampaknya merupakan tempat yang logis untuk itu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengubah kata sandi dengan Oracle SQL Developer

  2. Perlu mengatur ulang nilai urutan di Oracle

  3. Karakter escape Oracle SQL (untuk '&')

  4. Mengapa waktu eksekusi prosedur tersimpan Oracle sangat meningkat tergantung pada cara eksekusinya?

  5. Bagaimana mengatasi ORA-02014:tidak dapat memilih UNTUK PEMBARUAN dari tampilan dengan DISTINCT, GROUP BY