簡體   English   中英

Oracle觸發器編譯錯誤

[英]Oracle trigger compilation error

對於以下觸發器,我得到以下編譯錯誤:缺少SET關鍵字,忽略了SQL語句(第2行),在預期以下情況之一時遇到了“文件結束”符號: goto if loop mod null pragma提高返回選擇更新,同時繼續<< <<繼續關閉當前刪除獲取鎖插入打開回滾保存點集sql execute commit forall合並管道清除(第9行(我已經搜索了2十幾個示例,但仍然可以'找出造成這些編譯錯誤的我類型錯誤。

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

您的update語句沒有意義,因為它影響了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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM