0
我有兩列ID和名稱,並作爲下列數據的表practise_one的條件輸入表,阻塞行當滿足使用觸發器
ID名: 1薩米, 2 VAM, 3 mam, 4 pam, 5果醬,
我已經定義了一個自主觸發器,在插入,更新或刪除表格中的每一行之後。
我希望所有大於8的id插入到表中,將其過濾掉(不能插入到表中)只有id小於8才能插入到表中。所有大於8的id都應該插入到不同的表中practise_one_log中。
我觸發的方法:
create or replace trigger tr_practise_one
after insert or update or delete on practise_one
for each row
Declare
pragma autonomous_transaction;
id_greater exception;
id_one number(10);
begin
if (:new.id>8) then
rollback;
raise id_greater;
end if;
exception
when id_greater then
insert into practise_one_log values('The Id is greater '||:new.id);
commit;
end tr_practise_one;
當我這樣做:
insert into practise_one values (9,'oam');
我能夠獲得相應的行插入表「practise_one_log」,但我仍無法阻止該行從進入表中練習。
Resultant Output:
ID name :
1 sammy,
2 vam,
3 mam,
4 pam,
5 jam,
9 oam
Expected Output
ID name :
1 sammy,
2 vam,
3 mam,
4 pam,
5 jam
是否有一個原因,你不是在視圖上創建視圖和替代觸發器?我猜這是一項家庭作業?如果是這樣,那麼限制/要求是什麼?另外,你已經爲MySQL和Oracle 11g添加了標籤。代碼似乎是PL/SQL,所以我沒有看到MySQL在哪裏玩... –
您是否允許切換您創建的觸發器的類型?在更改已經應用到表格後,會觸發一個'AFTER'觸發器(因爲它的名字意味着)。一個'INSTEAD OF'觸發器意味着你沒有試圖*撤銷數據庫引擎已經完成的工作。 –
對不起對於mysql部分,我沒有注意到它,因爲我匆忙......我只是試圖觸發...嗯,我不想使用視圖,有沒有辦法做同樣的事情,而不創建觀點。 – Sam