[英]Oracle Trigger Insert/update
好的,所以我正在做作業。 我有三個表,電影(標題,年份,長度,類型,工作室名稱,制片人),StarsIn(電影標題,starName),電影明星(名稱,地址,性別,生日)
基本上,我需要確定何時有人在Stars中插入或更新某些內容在MovieStar中也需要進行這些更改。
到目前為止,我有這樣的事情。
CREATE OR REPLACE TRIGGER testTrig
AFTER UPDATE OR INSERT ON STARSIN
DECLARE
l_name MOVIESTAR.NAME%TYPE;
BEGIN
SELECT NAME FROM MOVIESTAR INTO l_name;
FOR EACH ROW WHEN (new.STARSIN.STARNAME NOT IN l_name)
INSERT INTO MOVIESTAR(NAME) VALUES (new.STARSIN.STARNAME);
END;
我遇到一些編譯器錯誤
Error(4,1): PL/SQL: SQL Statement ignored
Error(4,28): PL/SQL: ORA-00933: SQL command not properly ended
Error(5,10): PLS-00103: Encountered the symbol "ROW" when expecting one of
the following: in
我對oracle非常陌生,並且正在練習Triggers。 我知道使用外鍵很容易做到這一點,但是分配是使用觸發器。
我真的可以為此提供一些幫助。 我已經嘗試了上百萬種不同的方法來實現這一目標,但是沒有運氣。
在此先感謝您的幫助/咨詢。
我建議為每行指定觸發器觸發。 我發現這些要容易得多。
您可以進行計數以查看MovieStar.Name
值是否已經存在,然后插入(如果不存在); 這類似於您上面的方法。 如果另一個用戶在您檢查的時間和插入的時間之間插入了電影明星,這將失敗,但是對於類分配而言,這可能就足夠了。 有公認的不失敗方法,但是您可能尚未在課堂上介紹過它們。
嘗試這樣的事情; 它可能包含您到目前為止在課堂上介紹的所有內容:
CREATE OR REPLACE TRIGGER TestTrig
AFTER UPDATE OR INSERT ON STARSIN
FOR EACH ROW
DECLARE
movieStarCount NUMBER;
BEGIN
SELECT COUNT(*) INTO movieStarCount
FROM MovieStar
WHERE Name = :NEW.StarName;
IF movieStarCount = 0 THEN
INSERT INTO MovieStar (Name) VALUES (:NEW.StarName);
END IF;
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.