簡體   English   中英

Oracle SQL觸發器插入/更新

[英]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在表StarsInstarName引用nameMovieStar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM