0
私の問題は、私が削除したい私はこのようなエラーを取得していますトリガが呼び出された行をトリガ自体で削除するにはどうすればよいですか?私のコードは、まずここで、 を次のように
create or replace trigger tri_ISSUE
after insert or delete
on 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!');
delete ISSUE where rollno=:new.rollno and accn_no=:new.accn_no;
else
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
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;
、
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'
私は何をしようとしていることであり、挿入の後に呼び出される「挿入後」トリガによって挿入されている。私は実際にそれを行うことはできますか?誰も私に治療法を提案することができますか?事前に感謝:)
いいえ、あなたはできません。 'insert'が成功するのを防ぐために例外を発生させることができます。トリガーのafter文部分で削除を実行するbefore文、row-level文、およびafter文セクションを持つ複合トリガを(Oracleのバージョンに応じて)使用できます。それはシステムに非常に複雑なものを加える。この論理を最初にトリガーに入れたいのですが、チェックアウトを実装するコードでその本が実際に利用可能であることを検証するのではなく、なぜですか? –