【问题标题】:Oracle syntax error triggerOracle 语法错误触发器
【发布时间】:2014-10-07 01:46:37
【问题描述】:

我已经尝试了 2 个多小时来为这个触发器设置正确的语法,但它一直给我编译错误,有人可以指出我出错的方向吗?

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

film_actor 有以下字段:

actor_id
film_id

film 有以下字段:

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)));

【问题讨论】:

标签: oracle triggers


【解决方案1】:

您正在执行 SQL 更新 - 它应该使用常规的 = SQL 运算符,而不是 pl/SQL 的 := 赋值运算符:

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;

【讨论】:

    【解决方案2】:

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

    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;
    

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 2015-08-09
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      相关资源
      最近更新 更多