[英]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.