[英]Oracle SQL Trigger insert/update
好的,所以我的問題應該很簡單。 我只是在學習觸發器,並且試圖解決一個家庭作業問題。 我有三個表,電影(標題,年份,長度,類型,工作室名稱,制片人),StarsIn(電影標題,starName),電影明星(名稱,地址,性別,生日)
因此,基本上我需要編寫一個觸發器來確保在任何時候,出現在StarsIn中的任何一顆星星也都出現在MovieStar中。 我需要為插入和更新事件創建觸發器。
更新:好的,所以我改變了一點,但是我仍然無法弄清楚
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子句中不支持子查詢。因此,我試圖用有限的知識弄清楚這一點。 但是,如果有人有一個聰明的辦法,我真的很想知道:-)。
再次感謝
您創建了一個語句級觸發器。 每個插入或更新語句將觸發一次。 但是,一條插入或更新語句可以一次插入/更新許多行。 但是,您的代碼只需要一行,並假定僅插入或更新了一行。
如果要遵循此路徑,則需要行級觸發器(“ FOR EACH ROW”)。
您的trigger
應該在insert
任何row
before
(在這種情況下)觸發(當前,對於插入一次的多行,它會觸發一次)
我建議閱讀http://docs.oracle.com/cd/A97630_01/appdev.920/a96590/adg13trg.htm
它總是更好地使用外鍵約束確保出現在表中的值b
存在於表a
,在這種情況下,應該有一個foreign key
在表StarsIn
列starName
引用name
在MovieStar
表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.