【发布时间】:2014-09-20 03:47:18
【问题描述】:
我创建了一个包含一个过程和一个函数的包。 在表 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;
函数应该计算插入行的列之一,它的输入参数是插入行的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;
这显然会导致变异表错误,即使在每行插入后调用该函数。
我怎样才能解决这个问题并使用该函数中插入的每个行进行计算?
【问题讨论】:
标签: plsql oracle11g package triggers mutating-table