【问题标题】:Oracle trigger compilation errororacle触发编译错误
【发布时间】:2014-11-29 22:15:25
【问题描述】:

对于以下触发器,我收到以下编译错误:缺少 SET 关键字,忽略 SQL 语句(在第 2 行),在预期以下情况之一时遇到符号“文件结尾”:(开始案例声明结束goto 异常退出 if loop mod null pragma raise return select update while with

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

【问题讨论】:

  • 删除select *;它不是update 语句的一部分。

标签: sql oracle11g


【解决方案1】:

您的更新语句没有意义,因为它影响了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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多