用 存储过程时 总提示 表TABLE_HR 发生了变化, 触发器/函数不能读它
如题目所示,
定义如下:
SQL 触发器? 存储过程 PL/SQL
[解决办法]
使用自治事物看看,加上
create or replace trigger after_CgPosition_then_CgPower
after update of position on table_hr
for each row
declare
pragma autonomous_transaction;
begin
if :old.position ='hr' then
update table_hr set powerhr=1, powerBuy=0, powerSell=0, powerScan=1 where worker_id=:new.worker_id;
elsif :old.position ='采购' then
update table_hr set powerhr=0, powerBuy=1, powerSell=0, powerScan=1 where worker_id=:new.worker_id;
elsif :old.position ='销售' then
update table_hr set powerhr=0, powerBuy=0, powerSell=1, powerScan=1 where worker_id=:new.worker_id;
elsif :old.position =NULL then
update table_hr set powerhr=0, powerBuy=0, powerSell=0, powerScan=0 where worker_id=:new.worker_id;
else dbms_output.put_line('职位不对!无效执行!');
end if;
end after_CgPosition_then_CgPower;
/
[解决办法]
关注学习!!好像有死锁。。
[解决办法]
触发器中肯定是不能再写对自己的dml操作(select例外),否则就是死循环嵌套。百度下04091更快些。
[解决办法]
在你写的触发器中,触发条件和触发操作针对的是同一张表。这在oracle中,是不能用普通的触发器的,要用到instead of 类型的触发器。
[解决办法]
触发器里不能再进行修改触发器所执行的表,否则会产生表变异
[解决办法]