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

Masalah mengubah tanggal dengan pemicu di oracle

Anda menginginkan sesuatu seperti ini:

CREATE OR REPLACE TRIGGER TRIGGER_D
BEFORE
INSERT OR UPDATE ON CONTRACTS
FOR EACH ROW
DECLARE
BEGIN
  UPDATE CONTRACTS
  SET    ENDDATE   = :NEW.STARTDATE - INTERVAL '1' DAY
  WHERE  CLIENTID  = :NEW.CLIENTID
  AND    ENDDATE   > :NEW.STARTDATE
  AND    STARTDATE < :NEW.STARTDATE;
END;

Namun, ini memperbarui tabel yang dipantau oleh pemicu dan tampaknya pemicu akan menyebabkan pembaruan yang akan memanggil pemicu lagi dan mendapatkan kesalahan tabel mutasi.

Anda mungkin lebih baik untuk membungkus logika bisnis Anda dalam prosedur tersimpan di mana ia dapat melakukan pembaruan pada baris sebelumnya dan kemudian melakukan penyisipan/pembaruan. Kemudian, daripada menjalankan pernyataan DML secara langsung di atas meja, alih-alih memanggil prosedur tersimpan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menambahkan Indikator Meridiem (AM/PM) ke Nilai Waktu di Oracle

  2. Bagaimana menerapkan Memcached yang disinkronkan dengan database

  3. bagaimana mengganti huruf beraksen di kolom varchar2 di oracle

  4. SQLcl untuk mentransfer data dari Oracle ke PostgreSQL atau YugabyteDB

  5. Menghubungkan Oracle ke SQL Server dari Windows