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

Kesalahan mutasi aktif setelah pemicu penyisipan

Di oracle ada dua level pemicu:level baris dan level tabel.

Pemicu tingkat baris dijalankan for each row . Pemicu tingkat tabel dieksekusi per pernyataan, meskipun pernyataan berubah lebih dari satu baris.
Dalam pemicu tingkat baris, Anda tidak dapat memilih/memperbarui tabel itu sendiri yang memiliki pemicu:Anda akan mendapatkan kesalahan mutasi.

Dalam hal ini, tidak diperlukan pernyataan UPDATE. Coba saja ini:

CREATE OR REPLACE TRIGGER aso_quote_cuhk_trigger
BEFORE INSERT
ON aso.aso_quote_headers_all
FOR EACH ROW
BEGIN
 :new.quote_expiration_date=sysdate+90;     
END;
/

EDIT Rajesh menyebutkan mungkin, bahwa sebelum memasukkan baris baru, OP ingin memperbarui semua catatan lain di aso_quote_headers_all tabel.

Nah, ini layak, tapi itu sedikit rumit. Untuk melakukannya dengan benar, Anda memerlukan

  1. Paket pl/sql dan variabel di header paket yang dimodifikasi oleh pemicu. Variabel ini bisa berupa daftar yang menyimpan ID catatan yang baru dimasukkan. Tingkat baris setelah pemicu penyisipan akan menambahkan ID baru ke daftar. Isi variabel paket ini akan berbeda untuk setiap sesi yang berbeda, jadi sebut saja variabel ini session_variable .
  2. Tingkat baris setelah pemicu penyisipan, yang akan menambahkan ID baru ke session_variable .
  3. Tingkat tabel setelah pemicu penyisipan yang akan mendapatkan ID dari session_variable , proses ID lalu hapus dari session_variable . Pemicu ini dapat menjalankan pemilihan/pembaruan yang diperlukan pada aso_quote_headers_all. Setelah ID yang baru dimasukkan diproses, pemicu ini harus memastikannya dihapus dari session_variable .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hubungan satu-ke-banyak dengan batasan basis data dan invers=true

  2. Cara mengelompokkan dengan syarat khusus

  3. Oracle - Transpose baris menjadi kolom

  4. lihat semua data untuk baris duplikat di Oracle

  5. Kapan SQL yang benar akan menghasilkan hasil yang salah?