Oracle 觸發器的一個初級錯誤

在寫觸發器,碰到個錯誤一直執行不了,後來找師傅看了下解決了,錯誤時小錯誤,但對初次寫的人來說也有很高的機率碰到

create or replace trigger JC
  after insert or delete on jc_detail  
  for each row
declare
  -- local variables here
  typeA number;
  typeB number;
begin
DBMS_OUTPUT.PUT_LINE('main_id的值是'||:new.main_id);
  CASE
    WHEN INSERTING THEN
      DBMS_OUTPUT.PUT_LINE('這是新增');
      IF :new.ab = 'A' then
		select count(*) into typeA from jc_detail m where m.main_id = :new.main_id and type ='A' group by type;
		DBMS_OUTPUT.PUT_LINE('typeA的值是'||typeA);
		UPDATE jc_main m SET m.a = typeA WHERE m.id = :new.main_id;
      ELSE
        select count(*) into typeB from jc_detail m where m.main_id = :new.main_id and type ='B' group by type;
        DBMS_OUTPUT.PUT_LINE('typeB的值是'||typeB);
        UPDATE jc_main m SET m.b = typeB WHERE m.id = :new.main_id;
      END IF;
    WHEN DELETING THEN 
      DBMS_OUTPUT.PUT_LINE('這是刪除');
      IF :old.ab = 'A' then
        select count(*) into typeA from jc_detail m where m.main_id = :new.main_id and type ='A' group by type;
		DBMS_OUTPUT.PUT_LINE('typeA的值是'||typeA);
		UPDATE jc_main m SET m.a = typeA WHERE m.id = :new.main_id;
      ELSE
		select count(*) into typeB from jc_detail m where m.main_id = :new.main_id and type ='B' group by type;
        DBMS_OUTPUT.PUT_LINE('typeB的值是'||typeB);
        UPDATE jc_main m SET m.b = typeB WHERE m.id = :new.main_id;
      END IF;
  END CASE;
end JC;

不能通過的原因就是,我觸發器綁定的表示jc_dtail,而在語句中select into那from的表也是jc_detail,因爲jc_detail還在被修改中,還不是確定的,所以是不能執行通過的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章