特急问题:高手帮忙呀!请看触发输出!!!!

zhangxuanbird 2003-09-14 12:48:29
create or replace trigger tr_dljx_njh_detail_update
before update on dl_jxjh_nd_detail
for each row
declare
-- local variables here
parid dl_jxjh_nd_detail.par_id%type;
jan dl_jxjh_nd_detail.jan%type;
feb dl_jxjh_nd_detail.feb%type;
mar dl_jxjh_nd_detail.mar%type;
apr dl_jxjh_nd_detail.apr%type;
may dl_jxjh_nd_detail.may%type;
jun dl_jxjh_nd_detail.jun%type;
jul dl_jxjh_nd_detail.jul%type;
aug dl_jxjh_nd_detail.aug%type;
sep dl_jxjh_nd_detail.sep%type;
oct dl_jxjh_nd_detail.oct%type;
nov dl_jxjh_nd_detail.nov%type;
dec dl_jxjh_nd_detail.dec%type;
total dl_jxjh_nd_master.num%type;
gszb dl_wh_sbxx.gszb%type;
fyzb dl_wh_sbxx.fyzb%type;
sbbh dl_jxjh_nd_master.sbbh%type;
xc dl_jxjh_nd_master.xc%type;
sbxh dl_jxjh_nd_master.sbxh%type;
fy dl_jxjh_nd_master.fy%type;
days dl_jxjh_nd_master.days%type;

begin
parid:=:old.par_id;
dbms_output.put_line(parid);

select dl_jxjh_nd_master.sbbh into sbbh from dl_jxjh_nd_master where dl_jxjh_nd_master.id=parid;
dbms_output.put_line(sbbh);
select dl_jxjh_nd_master.sbxh into sbxh from dl_jxjh_nd_master where dl_jxjh_nd_master.id=parid;
dbms_output.put_line(sbxh);
select dl_jxjh_nd_master.xc into xc from dl_jxjh_nd_master where dl_jxjh_nd_master.id=parid;
dbms_output.put_line(xc);



jan:=:new.jan;
feb:=:new.feb;
mar:=:new.mar;
apr:=:new.apr;
may:=:new.may;
jun:=:new.jun;
jul:=:new.jul;
aug:=:new.aug;
sep:=:new.sep;
oct:=:new.oct;
nov:=:new.nov;
dec:=:new.dec;



/* select dl_wh_sbxx.gszb into gszb from dl_wh_sbxx where dl_wh_sbxx.sbbh=sbbh and dl_wh_sbxx.sbxh=sbxh and dl_wh_sbxx.xc=xc;

select dl_wh_sbxx.fyzb into fyzb from dl_wh_sbxx where dl_wh_sbxx.sbbh=sbbh and dl_wh_sbxx.sbxh=sbxh and dl_wh_sbxx.xc=xc;*/

/*total:=jan+feb+mar+apr+may+jun+jul+aug+sep+oct+nov+dec;
fy:=round(fyzb*total,2);
days:= round(gszb*total,2);

update dl_jxjh_nd_master set dl_jxjh_nd_master.num=total,dl_jxjh_nd_master.days=days,dl_jxjh_nd_master.fy=fy where dl_jxjh_nd_master.id=parid;*/
end tr_dljx_njh_detail_update;


输出结果:
62
10003
0.4
小修
62
10003
0.4
小修

oracle报错:
实际返回行数超出请求的行数;为什么会出现2次输出,像是在做循环,怎样解决?跟for each row有无关系?
...全文
47 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzszp 2003-09-15
  • 打赏
  • 举报
回复
检查一下是否造成了循环触发的情况
hackking 2003-09-15
  • 打赏
  • 举报
回复
你试着把变量名改一下,我曾经遇到过这样的事情,ORACLE可能分不出变量与列名,如果你的变量与列名一样的话
beckhambobo 2003-09-14
  • 打赏
  • 举报
回复
create or replace trigger tr_dljx_njh_detail_update
before update on dl_jxjh_nd_detail
for each row
declare
-- local variables here
v_parid dl_jxjh_nd_detail.par_id%type;
v_jan dl_jxjh_nd_detail.jan%type;
v_feb dl_jxjh_nd_detail.feb%type;
v_mar dl_jxjh_nd_detail.mar%type;
v_apr dl_jxjh_nd_detail.apr%type;
v_may dl_jxjh_nd_detail.may%type;
v_jun dl_jxjh_nd_detail.jun%type;
v_jul dl_jxjh_nd_detail.jul%type;
v_aug dl_jxjh_nd_detail.aug%type;
v_sep dl_jxjh_nd_detail.sep%type;
v_oct dl_jxjh_nd_detail.oct%type;
v_nov dl_jxjh_nd_detail.nov%type;
v_dec dl_jxjh_nd_detail.dec%type;
v_total dl_jxjh_nd_master.num%type;
v_gszb dl_wh_sbxx.gszb%type;
v_fyzb dl_wh_sbxx.fyzb%type;
v_sbbh dl_jxjh_nd_master.sbbh%type;
v_xc dl_jxjh_nd_master.xc%type;
v_sbxh dl_jxjh_nd_master.sbxh%type;
v_fy dl_jxjh_nd_master.fy%type;
v_days dl_jxjh_nd_master.days%type;

begin
v_parid:=:old.par_id;
dbms_output.put_line(parid);

select sbbh,sbxh,xc into v_sbbh,v_sbxh,v_xc from dl_jxjh_nd_master where dl_jxjh_nd_master.id=v_parid;
dbms_output.put_line(sbbh);
dbms_output.put_line(sbxh);
dbms_output.put_line(xc);



v_jan:=:new.jan;
v_feb:=:new.feb;
v_mar:=:new.mar;
v_apr:=:new.apr;
v_may:=:new.may;
v_jun:=:new.jun;
v_jul:=:new.jul;
v_aug:=:new.aug;
v_sep:=:new.sep;
v_oct:=:new.oct;
v_nov:=:new.nov;
v_dec:=:new.dec;



/* select dl_wh_sbxx.gszb into gszb from dl_wh_sbxx where dl_wh_sbxx.sbbh=sbbh and dl_wh_sbxx.sbxh=sbxh and dl_wh_sbxx.xc=xc;

select dl_wh_sbxx.fyzb into fyzb from dl_wh_sbxx where dl_wh_sbxx.sbbh=sbbh and dl_wh_sbxx.sbxh=sbxh and dl_wh_sbxx.xc=xc;*/

/*total:=jan+feb+mar+apr+may+jun+jul+aug+sep+oct+nov+dec;
fy:=round(fyzb*total,2);
days:= round(gszb*total,2);

update dl_jxjh_nd_master set dl_jxjh_nd_master.num=total,dl_jxjh_nd_master.days=days,dl_jxjh_nd_master.fy=fy where dl_jxjh_nd_master.id=parid;*/
end tr_dljx_njh_detail_update;
/
onejune4450 2003-09-14
  • 打赏
  • 举报
回复
原因可能是你的update dl_jxjh_nd_detail set ..... 语句修改了两行记录的值。
你可以这样试一下,把update语句中的where updatewhere 拿出来
select * from dl_jxjh_nd_detail where updatewhere 看一下。
zhangxuanbird 2003-09-14
  • 打赏
  • 举报
回复
ding!!
zhangxuanbird 2003-09-14
  • 打赏
  • 举报
回复
没人吗???

17,081

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧