请教各位关于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;
报错地方我已标注自己感觉是因为触发器建立在这个表上然后又更新这个表造成的错误 请高手指点 谢谢
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;
报错地方我已标注自己感觉是因为触发器建立在这个表上然后又更新这个表造成的错误 请高手指点 谢谢
解决方案 »
- 函数返回的游标,能否直接select显示?
- CLOB、BLOB字段的表无法导入,ORA-01536: 超出表空间 'SYSTEM' 的空间限额。
- IN NOT IN EXISTS NOT EXISTS 的问题
- 数据类型转换问题 下午就要交了 谢谢 高手速赐教
- 请问在Oracle9i里如何用存储过程实现多数据插入?
- 这问题还有更简单的解决方法吗?
- 开始接触oracle一个基础问题
- 高分求教,有关Oracle驱动的问题,更换驱动以后,Sql语句不好用了!急,各位请进!
- 请教一个棘手的问题,撤消回滚功能怎么来实现?我先是做了一个操作,同时修改插入了N个表,并且提交了,现在我发现我操作错误了
- penitent(只取一瓢)和弱水三千请快来,我建好了一个包,请问一下在SQL/PLUS怎么才能得到它返回的记录集?
- 隆重推出PL/SQL Developer功能扩展插件CnPlugin升至1.5预览版,各位达人支持
- 紧急求助:本人给一个公司做了个网站,用JSP ORACLE SERVERLET 技术,但做完后发现网上没有可以支持上传的空间,几
可以用视图的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;
when ((old_value.ORDER_STATUS=1) and (new_value.ORDER_STATUS in('2','3')) and (new_value.score=0))
不满足这个不让执行