Kamu hampir sampai; Anda memerlukan blok DECLARE di pemicu jika Anda ingin mendeklarasikan sesuatu; ini berarti klausa WHEN Anda berada di tempat yang salah.
create or replace trigger trig1
before update
of sal
on emp
for each row
when (new.sal < old.sal)
declare
user_xcep EXCEPTION;
PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
begin
raise user_xcep;
end;
SQL Fiddle
Beberapa poin:
- Tidak pernah menangkap pengecualian dan kemudian memanggil DBMS_OUTPUT.PUT_LINE; itu tidak ada gunanya. Seseorang harus berada di sana untuk melihat hasil untuk setiap rekaman. Jika Anda tidak ingin sesuatu terjadi, ajukan pengecualian lalu tangkap. Saya telah menambahkan kode kesalahan ke pengecualian Anda sehingga Anda dapat menangkap ini di luar pemicu dan menanganinya sesuai keinginan Anda (jangan cetak apa pun ke stdout).
- Ini poin kecil tapi saya telah menambahkan sedikit spasi; tidak banyak. Awalnya saya tidak bisa melihat di mana masalahnya dengan kode Anda karena Anda tidak memilikinya.
- Anda kehilangan titik koma setelah deklarasi pengecualian dan RAISE.
Baca selengkapnya tentang pengecualian yang ditentukan secara internal di dokumentasi