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

Membuat pemicu yang melempar pengecualian pada sisipan

Apakah Anda ingin memunculkan pengecualian (yang akan mencegah penyisipan berhasil)? Atau apakah Anda ingin mengizinkan penyisipan berhasil dan menulis string ke dbms_output buffer yang mungkin atau mungkin tidak ada dan mungkin atau mungkin tidak ditampilkan kepada manusia yang menjalankan penyisipan?

Dalam kedua kasus, Anda ingin ini menjadi pemicu tingkat baris, bukan pemicu tingkat pernyataan, jadi Anda harus menambahkan for each row klausa.

CREATE OR REPLACE TRIGGER person_id_trigg
  AFTER INSERT
  ON person
  FOR EACH ROW

Jika Anda ingin mengajukan pengecualian

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    RAISE_APPLICATION_ERROR( -20001, 
                             'The new ID value must have a length of 11' );
  END IF;
END;

Jika Anda ingin mencetak keluaran tetapi izinkan insert untuk berhasil

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    dbms_output.put_line( 'The new ID value must have a length of 11' );
  END IF;
END;

Tentu saja, pada kenyataannya, Anda tidak akan pernah menggunakan pemicu untuk hal semacam ini. Di dunia nyata, Anda akan menggunakan kendala.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batalkan operasi penyisipan/perbarui di pemicu menggunakan PL/SQL

  2. Jalankan prosedur tersimpan async di pengembang sql

  3. Berikan kredensial ke UTL_MAIL.SEND untuk melewati ORA-29278

  4. Penanganan pengecualian di pl/sql

  5. Bagaimana cara memberikan preferensi ke nilai nol selama pemilihan