create or replace trigger tri_work
after insert
on work
for each row
declare
v_count number(8);
begin
select count(1) into v_count from resource where id = :new.id;
if v_count > 0 then
update resource set count = count+1 where id = :new.id;
else
insert into resource (id,count) values (:new.id,1);
end if;
end;
/
after insert
on work
for each row
declare
v_count number(8);
begin
select count(1) into v_count from resource where id = :new.id;
if v_count > 0 then
update resource set count = count+1 where id = :new.id;
else
insert into resource (id,count) values (:new.id,1);
end if;
end;
/
解决方案 »
- 我用C++存文件入Oracle的BLOB字段,前几个可以存入,后面的就不行了,一直是NULL??请问这是怎么回事啊???
- 闪回数据可以存放几天?或者数据量能达到多少,如果闪回数据存放的位置满了后,以前闪回数据能查到吗?
- ORACLE机制结构
- orcal分类统计(PLSQL)———急急急急急!!!
- ORACLE 遍历字符串
- 帮我看看这个存储过程,有错误:
- 新手求助,急!!OracleDBConsole*服务启动不了。。。
- 菜鸟问题三:如何判断数据库的几个小问题:
- 请教一个简单问题 请帮忙解答一下
- 求一段时间去除星期六和星期天的SQL语句
- 调用dbms_job.submit出错,请大侠们指教???
- 怎么赋值给list item?
当俺手工执行一条insert into work语句的时候出现下面的错误。
ERROR at line 1:
ORA-04091: table SCOTT.RESOURCE is mutating, trigger/function may not see it
ORA-06512: at "SCOTT.TRI_WORK", line 8
ORA-04088: error during execution of trigger 'SCOTT.TRI_WORK'可是我把触发器里面的select count(1) into v_count from resource where id = :new.id去掉,不检查v_count,直接执行update的时候就没有这样的错误了。。为什么阿??
after insert
on work
for each row
declare
begin
update resource set count = nvl(count,0)+1 where id = :new.id;
if SQL%NOTFOUND then
insert into resource (id,count) values (:new.id,1);
end if;
end;
/
AFTER INSERT OR UPDATE
ON SYSTEM.WORK
REFERENCING OLD AS OLD NEW AS NEW
declare
cursor c_work is select id,count(action) l from work group by id; BEGIN
delete from resource1;
for v_work in c_work loop
insert into resource1 values (v_work.id,v_work.l);
end loop;
END;
/