In orakel zijn er twee niveaus van triggers:rijniveau en tafelniveau.
Triggers op rijniveau worden for each row
uitgevoerd . Triggers op tabelniveau die per instructie worden uitgevoerd, zelfs als een instructie meer dan één rij is gewijzigd.
In een trigger op rijniveau kunt u de tabel zelf die de trigger heeft niet selecteren/bijwerken:u krijgt een mutatiefout.
In dit geval is er geen UPDATE-statement nodig. Probeer dit eens:
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;
/
BEWERKEN Rajesh zei dat het mogelijk is dat OP alle andere records in de aso_quote_headers_all
wil bijwerken voordat een nieuwe rij wordt ingevoegd. tafel.
Nou, dit is haalbaar, maar het is een beetje lastig. Om dit goed te doen, heb je
. nodig- Een pl/sql-pakket en een variabele in de pakketkop die wordt gewijzigd door de triggers. Deze variabele kan een lijst zijn met de ID's van nieuw ingevoegde records. Rijniveau na invoegtrigger zou een nieuwe ID aan de lijst toevoegen. De inhoud van deze pakketvariabele zal voor elke verschillende sessie anders zijn, dus laten we deze variabele
session_variable
noemen . - Rijniveau na invoegtrigger, die een nieuwe ID zou toevoegen aan de
session_variable
. - Tabelniveau na invoegtrigger die ID's zou krijgen van de
session_variable
, verwerk de ID en verwijder deze uit desession_variable
. Deze trigger kan noodzakelijke selecties/updates uitvoeren op de aso_quote_headers_all. Nadat een nieuw ingevoegde ID is verwerkt, moet deze trigger ervoor zorgen dat deze wordt verwijderd uit desession_variable
.