首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

用 存储过程时 总揭示 表TABLE_HR 发生了变化, 触发器/函数不能读它

2013-07-11 
用 存储过程时 总提示 表TABLE_HR 发生了变化, 触发器/函数不能读它如题目所示,定义如下:~SQL触发器?存储

用 存储过程时 总提示 表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 类型的触发器。
[解决办法]
触发器里不能再进行修改触发器所执行的表,否则会产生表变异
[解决办法]

引用:
在你写的触发器中,触发条件和触发操作针对的是同一张表。这在oracle中,是不能用普通的触发器的,要用到instead of 类型的触发器。
 是的,建议参考下9L

热点排行