Witam,
stworzyłem procedurę odpowiedzialną za generowanie pliku XML na podstawie zapytania SQL podanego jako parametr. Pojawił się natomiast problem, o którym wcześniej zupełnie nie pomyślałem, gdy procedurę tą próbuję wywołać z triggera.
Uproszczony kod:
CREATE OR REPLACE TRIGGER CH_INTEGRATE_EMP_AIU_TRG
AFTER INSERT OR UPDATE
ON ...
FOR EACH ROW
DECLARE
.............
BEGIN
IF inserting or updating THEN
l_query := 'select ........ from employees where employee_id = '|| :new.employee_id;
ch_integration_pck.populate_integration_tab(l_root,l_query,l_msg_family, o_status, o_message);
END IF;
.....
END;
Zamysł jest taki: po każdym update/insert na pewnej tabeli chcemy wygenerować XMLa i wrzucic go gdzies, uzywajac gotowej procedury. (nie chcę logiki za to odpowiedzialnej mieć w triggerze, ponieważ będzie to uzywane w wielu miejscach)
Wywolanie przy triggerze powoduje jednak blad:
SQL Error: ORA-19202: Error occurred in XML processing
ORA-04091: table ... is mutating, trigger/function may not see it
Czy można to jakoś obejść w taki sposób, aby po insercie/updacie procedura odpowiedzialna za generowanie XMLa wywoływała się automatycznie i z selecta w jej ciele można było się dostać do nowego rekordu?
Czy raczej w takim przypadku trzebaby z triggera wywoływać np jakiegoś niezależnego joba, który wywoływałby tą procedurę?
Czytałem coś o compound triggers, ale nie jestem pewien czy za ich pomocą można to obejsć..
dzięki za pomoc z góry