Chciałbym zrobić wyzwalacz, który po modyfikacji kolumny "ilosc_krwi" zmienia wartosc kolumny "data_wydania" gdzie pseudo jest nullem (czyli krew nie została jeszcze wydana) i donacja jest inna od donacji, która właśnie została zmienionia.(czyli id_donacji<>id_donacji edytowanej).
Mój problem polega na tym, że, po wywołaniu wyzwalacza wyskakuje mi błąd o tabelach mutujących.
Wiem jak to ominąć, należy zrobić pakiet oraz dwa wyzwalacze, zrobilem je w ten sposób:
CREATE OR REPLACE PACKAGE pakiet_rezerwacja
AS
donacja donacje1.id_donacji%TYPE;
CREATE OR REPLACE TRIGGER rezerwacja_part1
BEFORE UPDATE ON donacje1
FOR EACH ROW
WHEN (OLD.ilosc_krwi <> NEW.ilosc_krwi)
DECLARE
donacja donacje1.id_donacji%TYPE;
BEGIN
SELECT id_donacji INTO donacja FROM donacje1 WHERE :OLD.ilosc_krwi <> :NEW.ilosc_krwi;
END rezerwacja_part1;
/
CREATE OR REPLACE TRIGGER rezerwacja_part2
AFTER UPDATE ON donacje1
DECLARE
ident_donacji donacje1.id_donacji%TYPE;
rezerwacja donacje1.data_wydania%TYPE;
BEGIN
ident_donacji:=pakiet_rezerwacja.donacja;
rezerwacja:=SYSDATE+10;
UPDATE donacje1 SET data_wydania = rezerwacja WHERE pseudo IS NULL AND id_donacji <> ident_donacji;
END rezerwacja_part2;
END pakiet_rezerwacja;
/
Problem może polegać na tym że należy w drugim wyzwalaczu zmienić "flagę", jednak nie wiem jak rozwiązać problem z flagami, gdyż nie wiem jak się ich używa.
Co trzeba zrobić by podczas wykonywania drugiego wyzwalacza, nie wykonywał się już pierwszy?