2013-05-04 166 views
2

好的,所以我的問題應該是一個容易的問題,我認爲。 我剛剛學習觸發器,我試圖找出一個功課問題。 我有三個表, 電影(名稱,年份長,流派,studioName,製片人) StarsIn(movieTitle,starName) MovieStar(姓名,地址,性別,出生日期)Oracle SQL觸發器插入/更新

所以基本上我需要寫一個觸發器確保在任何時候出現在StarsIn中的任何恆星也出現在MovieStar中。我需要爲插入和更新事件做觸發器。

UPDATE: 行,所以我改變了我的說法有點,但我仍然不明白這一點

CREATE OR REPLACE TRIGGER movieTrigger 
    AFTER UPDATE OR INSERT ON STARSIN 
    FOR EACH ROW 
    WHEN(new.STARNAME NOT IN(SELECT "NAME" FROM MOVIESTAR)) 
    BEGIN 
INSERT INTO MOVIESTAR("NAME") 
VALUES(new.STARNAME) 
END; 

現在我得到的錯誤

Error report: 
ORA-02251: subquery not allowed here 
02251. 00000 - "subquery not allowed here" 
*Cause: Subquery is not allowed here in the statement. 
*Action: Remove the subquery from the statement. 

我剛剛得知,Oracle並不支持when子句中的子查詢... 所以我想用有限的知識來解決這個問題。但如果任何人有一個聰明的方式做到這一點,我真的很想知道:-)。

再次感謝

+0

爲什麼你不只是用這個外鍵?沒有理由認爲這應該成爲觸發器。 – Scotch 2013-05-04 19:51:16

+0

這是一個家庭作業。 – Relics 2013-05-05 21:14:51

+0

http://stackoverflow.com/questions/16404667/oracle-trigger-insert-update 這個環節應該幫助,我也有類似的問題.. – mingle 2013-05-06 18:46:59

回答

1

引用namestarName您創建了一個語句級觸發器。它會爲每個插入或更新語句觸發一次。但是單個插入或更新語句可以一次插入/更新多行。但是,您的代碼需要一行,並假定只插入或更新了單個行。

如果您想遵循此路徑,您需要的是rowlevel觸發器(「FOR EACH ROW」)。