[英]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.