2014-10-07 74 views
1

这是我正在写的触发器,它一直说我在第8行有一个缺失的等号,并且第7行的sql语句被忽略了?有什么理由为什么会发生这种情况?缺少等号和SQL语句忽略Oracle触发器?

CREATE OR REPLACE TRIGGER TRIGGER_ACTOR_STARRED 
BEFORE INSERT ON film_actor FOR EACH ROW 
DECLARE a_count NUMBBER(10); 
BEGIN  
SELECT COUNT(*) INTO a_count 
FROM V_ACTORS_STARRED 
WHERE :new.actor_id = actor_id; 
    IF a_count > 0 THEN 
    UPDATE film 
    SET rental_rate := rental_rate * 1.10 
    WHERE :new.actor_id = film_actor.actor_id 
    AND film.film_id = film_actor.film_id; 
    END IF; 
END; 
/

回答

0

您必须记住区分SQL和PL/SQL。

在SQL UPDATE语句中,使用=进行分配。 (示例update tab set cola = 10

在PL/SQL过程语句中,使用:=进行分配。 (例如:i := 10;

低于你的代码嵌入SQL所以应该使用=,不:=

... 
UPDATE film 
    SET rental_rate := rental_rate * 1.10 

应该

UPDATE film 
    SET rental_rate = rental_rate * 1.10 
+0

现在,我得到ORA-00904: “FILM_ACTOR”“FILM_ID “:无效的标识符--->这是否意味着我不正确地加入表格(我试图从此触发器更新另一个表格) – user3603183 2014-10-07 04:17:24

+0

因为更新语句不正确。没有'FILM_ACTOR'表的线索。 – 2014-10-07 04:42:43

+0

@ user3603183 - 您还有一个错字:'DECLARE a_count NUMBBER(10);' – codenheim 2014-10-07 04:49:39