2013-04-21 221 views
-1

我正在創建一個用於賦值的留言板系統,並且我在某些SQL中遇到了一些問題。使用Oracle 11g。在刪除觸發器刪除另一個表中的條目之前

我有一個表稱爲線程,並且當一個線程被刪除時,我想刪除所有與該線程相關的帖子,所以我想我會使用一個之前的刪除觸發器,但我不是很有經驗的SQL。誰能幫我嗎?

到目前爲止,我已經得到了什麼:

CREATE OR REPLACE TRIGGER DELETE_POSTS 
    BEFORE DELETE ON THREADS 
    FOR EACH ROW 
BEGIN 
    DELETE FROM POSTS 
    WHERE POSTS.THREAD_ID = :OLD.ID 
END; 

我已經試過:NEW和其他一些東西。任何幫助表示讚賞。

+1

那麼當你通過刪除一條記錄來觸發這個觸發器時發生了什麼 - 或者沒有發生? – APC 2013-04-21 21:14:45

回答

3

除非您的分配明確需要觸發器,否則使用外鍵約束執行級聯刪除會更合理。

SQL> create table threads(
    2 thread_id number primary key 
    3 ); 

Table created. 

SQL> create table posts(
    2 post_id number primary key, 
    3 thread_id number references threads(thread_id) on delete cascade 
    4 ); 

Table created. 

這樣的話,當你從threads表中刪除特定行,在posts表中的所有子行會自動被刪除也是如此。

相關問題