请教各位关于oracle触发器的问题!

hpym365 2006-08-14 10:53:30
请教各位关于oracle触发器的问题!


create or replace trigger tr_for_update_score
after update of ORDER_STATUS on t_bc_shopingorder
referencing old as old_value
new as new_value
for each row

when ((old_value.ORDER_STATUS=1) and (new_value.ORDER_STATUS in('2','3')) and (new_value.score=0))
declare
-- local variables here
begin
--
update t_bc_shopingorder sp --这里报错
set sp.score=1000;
--
update t_bc_customer c
set c.score=c.score+50
where c.id=(:new_value.BUYER_ID);
end tr_for_update_score;


报错地方我已标注自己感觉是因为触发器建立在这个表上然后又更新这个表造成的错误 请高手指点 谢谢
...全文
205 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpym365 2006-08-14
  • 打赏
  • 举报
回复
还是不行 不需要视图啊 我有条件限制的晕
when ((old_value.ORDER_STATUS=1) and (new_value.ORDER_STATUS in('2','3')) and (new_value.score=0))
不满足这个不让执行
vivianfdlpw 2006-08-14
  • 打赏
  • 举报
回复
你的触发器里边又update,构成了直接递归
可以用视图的instead of update触发器实现你的目的

create or replace view v_t_bc_shopingorder
as
select * from t_bc_shopingorder;

create or replace trigger tr_for_update_score
instead of update
on v_t_bc_shopingorder
referencing old as old_value
new as new_value
for each row
begin
update t_bc_shopingorder
set ORDER_STATUS=:new_value.ORDER_STATUS,
score=:new_value.score,
BUYER_ID=:new_value.BUYER_ID
where id=:old_value.id;

update t_bc_shopingorder sp
set sp.score=1000
where :old_value.ORDER_STATUS=1
and
sp.ORDER_STATUS in(2,3)
and
sp.score=0;
end;
hpym365 2006-08-14
  • 打赏
  • 举报
回复
各位好心人帮帮忙啊 在线等呢。。
vivianfdlpw 2006-08-14
  • 打赏
  • 举报
回复
更新表改为更新试图是一样的亚 晕。。。

17,140

社区成员

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

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