Jika Anda memiliki 11g atau 12c, Anda dapat menulis pemicu majemuk. Ini memiliki bagian yang dijalankan sebelum aktivitas pemicu yang sebenarnya dimulai. Artinya, Anda dapat membaca dari tabel di bagian tersebut karena ini sebelum tabel memasuki status bermutasi:
create or replace trigger Predmety_Ciu
For Insert Or Update On Predmety
Compound Trigger
MaxID int;
Before Statement Is Begin
-- Be prepared this might be the first record written to the table
select nvl( max( ID ), 0 ) into MaxID from Predmety;
End Before Statement;
Before Each Row Is Begin
IF :NEW.ID = :NEW.NAVAZUJE_NA THEN --There is an error (PLS-00405)
Raise_Application_Error(-20000, 'Predmet nemuze navazovat sam na sebe.', False);
Elsif :New.Navazuje_Na > Maxid Then
Raise_Application_Error(-20001, 'Predmet nemuze navazovat na neexistujici predmet. Další objekt ID: ' || to_char( Maxid ), False);
Elsif :New.Id < 0 Or :New.Navazuje_Na < 0 Then
Raise_Application_Error(-20002, 'Neplatny index predmetu nebo predmetu, na ktery ma dany predmet navazovat.', False);
End If;
End Before Each Row;
After Each Row Is Begin
-- Vložte nějaký kód, který chcete spustit po vložení řádku
If Inserting Then
Maxid := Maxid + 1;
end if;
End After Each Row;
After Statement Is Begin
Null; -- Vložte nejaký kód, který chcete spustit po zadání všech rádek.
End After Statement;
End Predmety_Ciu;
Saya menghapus penangan pengecualian karena saya menginginkan pengecualian.