创建的语句是:
create or replace trigger update_product_count
after insert or update on product_main for each row
declare
left number(38);
put number(38);
get number(38);
begin
select put_count into put from product_main where id = :new.id;
select get_count into get from product_main where id = :new.id;
left := put-get;
update product_main set leave_count = left where id = :new.id;
end;创建的时候没有报错。。
我这个触发器就是要跟新同一个表中的数据,每当跟新的 时候,left(剩余的) = put(放入)-get(拿取得的)。
就是要更新剩余的。
下面是是表的结构:
Name Null? Type
----------------------------------------- -------- --------------- ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(30)
NOTE VARCHAR2(200)
LEAVE_COUNT NUMBER
GET_COUNT NUMBER
PUT_COUNT NUMBER
GET_DATE DATE
PUT_DATE DATE
当我往表中插入数据的时候就出现错误。但是我show error,却没有错误。
SQL> insert into product_main values(1,'安踏','中国名牌',10,0,10,sysdate,sysdate);出入的时候的错误提示是:insert into product_main values(1,'安踏','中国名牌',10,0,10,sysdate,sysdate)
*
ERROR at line 1:
ORA-04091: table SCOTT.PRODUCT_MAIN is mutating, trigger/function may not see it
ORA-06512: at "SCOTT.UPDATE_PRODUCT_COUNT", line 6
ORA-04088: error during execution of trigger 'SCOTT.UPDATE_PRODUCT_COUNT'
请大家帮我看看什么地方有错。。谢谢
create or replace trigger update_product_count
after insert or update on product_main for each row
declare
left number(38);
put number(38);
get number(38);
begin
select put_count into put from product_main where id = :new.id;
select get_count into get from product_main where id = :new.id;
left := put-get;
update product_main set leave_count = left where id = :new.id;
end;创建的时候没有报错。。
我这个触发器就是要跟新同一个表中的数据,每当跟新的 时候,left(剩余的) = put(放入)-get(拿取得的)。
就是要更新剩余的。
下面是是表的结构:
Name Null? Type
----------------------------------------- -------- --------------- ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(30)
NOTE VARCHAR2(200)
LEAVE_COUNT NUMBER
GET_COUNT NUMBER
PUT_COUNT NUMBER
GET_DATE DATE
PUT_DATE DATE
当我往表中插入数据的时候就出现错误。但是我show error,却没有错误。
SQL> insert into product_main values(1,'安踏','中国名牌',10,0,10,sysdate,sysdate);出入的时候的错误提示是:insert into product_main values(1,'安踏','中国名牌',10,0,10,sysdate,sysdate)
*
ERROR at line 1:
ORA-04091: table SCOTT.PRODUCT_MAIN is mutating, trigger/function may not see it
ORA-06512: at "SCOTT.UPDATE_PRODUCT_COUNT", line 6
ORA-04088: error during execution of trigger 'SCOTT.UPDATE_PRODUCT_COUNT'
请大家帮我看看什么地方有错。。谢谢
after insert or update on product_main for each row
declare
PRAGMA AUTONOMOUS_TRANSACTION;
left number(38);
put number(38);
get number(38);
begin
select put_count into put from product_main where id = :new.id;
select get_count into get from product_main where id = :new.id;
left := put-get;
update product_main set leave_count = left where id = :new.id;
commit;
end;
create or replace trigger update_product_count
before insert or update on product_main for each row
begin
select put_count-get_count into :new.leave_count from product_main where id = :new.id;
end;
一般采取计算字段就可以了
suiziguo的方法也是不行的,对于插入,会报未找到数据的异常!
对于insert情况,可以用
IF inserting THEN
put_count := 0;
get_count := 0;
END IF;
或者类似的。其实楼主该需求本来就有些奇怪,insert时没必要更新自己。