如何将 :new 作为参数传递给 oracle 客户函数?
Posted
技术标签:
【中文标题】如何将 :new 作为参数传递给 oracle 客户函数?【英文标题】:How to pass :new as parameter to oracle customer function? 【发布时间】:2021-11-30 02:59:20 【问题描述】:我想将 :new 从触发器传递给我的自定义 oracle 函数,我已经尝试了所有方法但失败了。 这是我的代码:
set serveroutput on;
create or replace function sum_evaluation_onerow(arow in t_attend_j301%rowtype)
return number
as
total number:=0;
begin
total:=trans_attend_type(arow.class12)+total;
total:=trans_attend_type(arow.class34)+total;
total:=trans_attend_type(arow.class56)+total;
total:=trans_attend_type(arow.class78)+total;
total:=trans_attend_type(arow.class90)+total;
dbms_output.put_line(total);
return total;
end;
/
create or replace trigger tg_insert_attend_j301
after insert on t_attend_j301
for each row
declare
total number;
myrow t_attend_j301%rowtype;
begin
--total:=sum_evaluation_onerow(:new);
myrow:=:new
update u_j301.t_stud_j301 set sum_evaluation=sum_evaluation where sno=:new.sno;
end;
/
我该怎么办?
【问题讨论】:
您必须单独分配每个字段,即:new.field1,:new.field2等 【参考方案1】:分别分配%ROWTYPE
的每个属性:
create or replace trigger tg_insert_attend_j301
after insert on t_attend_j301
for each row
declare
total number;
myrow t_attend_j301%rowtype;
begin
myrow.sno := :new.sno;
myrow.class12 := :new.class12;
myrow.class34 := :new.class34;
myrow.class56 := :new.class56;
myrow.class78 := :new.class78;
myrow.class90 := :new.class90;
total:=sum_evaluation_onerow(myrow);
update u_j301.t_stud_j301
set sum_evaluation=total
where sno=:new.sno;
end;
/
db小提琴here
【讨论】:
以上是关于如何将 :new 作为参数传递给 oracle 客户函数?的主要内容,如果未能解决你的问题,请参考以下文章
从Oracle PLSQL调用java时如何将参数传递给java