我的问题如下, 首先,这是我的代码,
ORA-04091: table SYSTEM.ISSUE is mutating, trigger/function may not see it
ORA-06512: at "SYSTEM.TRI_ISSUE", line 12
ORA-04088: error during execution of trigger 'SYSTEM.TRI_ISSUE'
我收到这样的错误,
{{1}}
我想要做的是,我想删除正在插入的行,通过' After Insert'触发,然后插入调用。我真的能这样做吗?谁能建议我一个补救措施?提前谢谢:)
答案 0 :(得分:0)
有几种方法可以满足您的要求。
将delete ISSUE where rollno = :new.rollno and accn_no = :new.accn_no;
替换为raise_application_error(-20001, 'Book is not available!');
这样,用户就会收到异常并且未插入数据。
BEFORE STATEMENT
,BEFORE EACH ROW
和AFTER STATEMENT
组件创建compound trigger。 创建视图和INSTEAD OF TRIGGER
,就像这样:
CREATE OR REPLACE VIEW V_ISSUE AS
SELECT * FROM ISSUE;
CREATE OR REPLACE TRIGGER tri_ISSUE
INSTEAD OF INSERT OR DELETE ON V_ISSUE
FOR EACH ROW
declare
ct varchar2(20);
cnt number(20);
begin
if inserting
then
select bk_category into ct from BOOK_MASTER where accn_no=:new.accn_no;
select available into cnt from BOOK_INFO where bk_category=ct;
if(cnt=0)
then
dbms_output.put_line('Book is not available!');
NULL; -- > do nothing
else
INSERT INTO ISSUE VALUES (... all coloums of this table);
select bk_category into ct from BOOK_MASTER where accn_no=:new.accn_no;
update BOOK_INFO set available=available-1 where bk_category=ct;
end if;
end if;
if deleting
then
DELETE FROM ISSUE WHERE ...;
select bk_category into ct from BOOK_MASTER where accn_no=:old.accn_no;
update BOOK_INFO set available=available+1 where bk_category=ct;
end if;
END;