如何将 :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 客户函数?的主要内容,如果未能解决你的问题,请参考以下文章

将 xml 数据作为存储过程的参数传递给 s-s-rs

从Oracle PLSQL调用java时如何将参数传递给java

是否可以将列作为参数传递给 ORDER BY 子句?

从 Java 创建并将 SYS_REFCURSOR 作为输入参数传递给 Oracle 过程

如何将数组作为参数传递给另一个脚本?

如何将回调作为参数传递给另一个函数