2014-10-05 97 views
0

对于以下触发器,我收到以下编译错误:缺少SET关键字,SQL语句被忽略(在第2行),遇到下列其中一项时遇到符号“文件结束”:(开始case声明结束异常退出goto if循环mod空pragma提交返回select更新while < <继续关闭当前删除读取锁定插入打开回滚保存点集合sql执行提交forall合并管道清除(第9行(我已经通过遍历2打的例子,仍然无法弄清楚我造成什么样的合成错误,导致这些编译错误..Oracle触发器编译错误

CREATE OR REPLACE TRIGGER CHANGE_RENTAL_RATE 
BEFORE INSERT ON film FOR EACH ROW 
BEGIN 
UPDATE film 
SELECT * 
SET rental_rate = CASE special_features 
       WHEN 'Trailers' THEN rental_rate := :new.rental_rate + 0.1 
       WHEN 'Commentaries' THEN rental_rate := new.rental_rate + 0.5 
       WHEN 'Deleted Scenes' THEN rental_rate := new.rental_rate + 0.2 
       WHEN 'Behind the Scenes' THEN rental_rate := new.rental_rate - 0.2 
END; 
/
+0

删除'select *';它不是'update'语句的一部分。 – 2014-10-05 13:22:11

回答

1

您的更新声明不m因为它会影响film中的所有行。你正在做一个“之前”的触发器。也许你想要:

CREATE OR REPLACE TRIGGER CHANGE_RENTAL_RATE 
BEFORE INSERT ON film FOR EACH ROW 
BEGIN 
    if :new.special_features = 'Trailers' THEN :new.rental_rate := :new.rental_rate + 0.1; 
    elsif :new.special_features = 'Commentaries' THEN :new.rental_rate := :new.rental_rate + 0.5; 
    elsif :new.special_features = 'Deleted Scenes' THEN :new.rental_rate := :new.rental_rate + 0.2; 
    elsif :new.special_features = 'Behind the Scenes' THEN :new.rental_rate := :new.rental_rate - 0.2; 
    else :new.special_features := NULL 
    end if; 
END;