Подскажите как в триггере обратиться к мутируемой таблице если это таки необходимо?
Нужен только SELECT.
Спасибо
Здравствуйте, FedorK, Вы писали:
FK>Подскажите как в триггере обратиться к мутируемой таблице если это таки необходимо?
FK>Нужен только SELECT.
На строчном собираешь идентификаторы.(в PL/SQL коллекцию.)
на операторном по ним обращаешься к таблице. и чистишь PL/SQL
Вот шаблон пакета:
CREATE OR REPLACE PACKAGE PkgSuccessor%_T_% AS
procedure Bind;
procedure Add(v_id in integer);
procedure Clear;
procedure Cure;
END PkgSuccessor%_T_%;
/
CREATE OR REPLACE PACKAGE BODY PkgSuccessor%_T_% AS
----------------------------------------------------------------------------
TYPE t_Ids IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
v_id_collection t_Ids;
v_is_execute boolean;
----------------------------------------------------------------------------
procedure Add(v_id in integer) is
begin
if v_is_execute = false and v_id is not null then
v_id_collection(v_id_collection.count) := v_id;
end if;
end;
----------------------------------------------------------------------------
procedure ClearCollections is
begin
v_id_collection.delete;
end;
----------------------------------------------------------------------------
procedure Clear is
begin
if v_is_execute = false then
ClearCollections;
end if;
end;
----------------------------------------------------------------------------
procedure Bind
is
v_com_row ppa.com%rowtype;
v_i integer;
begin
if v_is_execute = false then
v_is_execute := true;
v_i := v_id_collection.first;
while v_i is not null loop
select * into v_com_row from com where id = v_id_collection(v_i);
v_i := v_id_collection.Next(v_i);
end loop;
ClearCollections;
v_is_execute := false;
end if;
exception
when others then
ClearCollections;
v_is_execute := false;
raise;
end;
----------------------------------------------------------------------------
begin
v_is_execute := false;
END PkgSuccessor%_T_%;
/