2014-10-07 78 views
1

我一直在尝试2个多小时才能获得适用于此触发器的语法,但它一直给我编译错误,请问有人可能会指出我错误的方向吗?Oracle语法错误触发器

[Compilation errors: missing equal sign line 5, sql statement ignored, line 4] 

FILM_ACTOR具有以下字段:

actor_id 
film_id 

膜具有以下字段:

film_id 
rental_rate 


CREATE OR REPLACE TRIGGER TRIGGER_ACTOR_STARRED 
BEFORE INSERT ON film_actor FOR EACH ROW 
BEGIN  
IF :new.actor_id IN (SELECT * 
        FROM V_ACTORS_STARRED) 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; 
/

我试图从是选择如下的观点:

CREATE OR REPLACE VIEW V_ACTORS_STARRED AS 
SELECT actor_id 
FROM actor 
WHERE actor_id IN 
     (SELECT actor_id 
     FROM film_actor 
     WHERE film_actor.actor_id = actor.actor_id 
     AND film_id IN 
       (SELECT film.film_id 
       FROM film, film_category, category 
       WHERE category.name = 'Documentary' 
       AND film.film_id = film_category.film_id 
       AND film_category.category_id = category.category_id 
       AND rental_rate = (SELECT MAX(rental_rate) 
            FROM film, category, film_category 
            WHERE category.name = 'Documentary' 
            AND film.film_id = film_category.film_id 
            AND film_category.category_id = category.category_id))); 
+0

可能重复)从表)> 0然后](http://stackoverflow.com/questions/10200281/if-select-countcolumn-from-table-0-then) – 2014-10-07 03:04:20

+0

我试过从可能的重复帖子,相同的解决方案工作错误正在显示/抛出 – user3603183 2014-10-07 03:34:01

回答

2

你执行一个SQL更新 - 它应该使用常规= SQL操作,而不是PL/SQL的:=赋值操作符:[IF(SELECT COUNT(列

UPDATE film 
SET rental_rate = rental_rate * 1.10 -- Note ":=" was replaced with "=" 
WHERE :new.actor_id = film_actor.actor_id 
AND film.film_id = film_actor.film_id; 
1

删除SET部分中的冒号o f UPDATE语句。

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;