1 つのプロシージャと 1 つの関数を含むパッケージを作成しました。関数は、表 REZULTAT の各行の後の挿入時にトリガーによって呼び出されます。
create or replace trigger rezultat_compound
for insert on rezultat
compound trigger
v_igid rezultat.igra_id%type;
v_reid rezultat.id%type;
v_jck rezultat.jocker_broj%type;
cursor cur_type is rezultat%rowtype;
before each row is
begin
v_reid:=rezultat_seq.nextval;
:new.id:=v_reid;
v_igid:=:new.igra_id;
end before each row;
after each row is
begin
v_jck:=loto_7_47_pck.getJockerBroj(v_igid);
end after each row;
end rezultat_compound;
関数は挿入された行の列の 1 つを計算することになっており、その入力パラメーターは挿入された行の ID であり、レコード タイプで計算する前にその特定の挿入された行をレコード タイプに選択するために使用しました。
function getJockerBroj
( i_igra_id igra.id%type
)
return rezultat.jocker_broj%type
is
v_jocker rezultat.jocker_broj%type;
rezultat_rec brojevi_type;
begin
select br1
, br2
, br3
, br4
, br5
, br6
, br7
,dopunski_broj
into rezultat_rec
from rezultat
where igra_id=i_igra_id;
v_jocker:=
( substr(to_char(rezultat_rec.br1),-1, 1)
|| substr(to_char(rezultat_rec.br2),-1, 1)
|| substr(to_char(rezultat_rec.br3),-1, 1)
|| substr(to_char(rezultat_rec.br4),-1, 1)
|| substr(to_char(rezultat_rec.br5),-1, 1)
|| substr(to_char(rezultat_rec.br6),-1, 1)
|| substr(to_char(rezultat_rec.br7),-1, 1)
)
;
return v_jocker;
end;
これにより、各行の挿入後に関数が呼び出されたにもかかわらず、テーブルの変更エラーが発生するようです。
これを回避し、その関数に挿入された各行で計算を行うにはどうすればよいですか?