2013-10-29 21 views
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 
+2

是否有一個原因,你不是在視圖上創建視圖和替代觸發器?我猜這是一項家庭作業?如果是這樣,那麼限制/要求是什麼?另外,你已經爲MySQL和Oracle 11g添加了標籤。代碼似乎是PL/SQL,所以我沒有看到MySQL在哪裏玩... –

+0

您是否允許切換您創建的觸發器的類型?在更改已經應用到表格後,會觸發一個'AFTER'觸發器(因爲它的名字意味着)。一個'INSTEAD OF'觸發器意味着你沒有試圖*撤銷數據庫引擎已經完成的工作。 –

+0

對不起對於mysql部分,我沒有注意到它,因爲我匆忙......我只是試圖觸發...嗯,我不想使用視圖,有沒有辦法做同樣的事情,而不創建觀點。 – Sam

回答