在寫觸發器,碰到個錯誤一直執行不了,後來找師傅看了下解決了,錯誤時小錯誤,但對初次寫的人來說也有很高的機率碰到
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還在被修改中,還不是確定的,所以是不能執行通過的。