Sql 创建触发器将使用新的insert触发
我想在将新电影插入电影表时创建一个触发器Sql 创建触发器将使用新的insert触发,sql,oracle,Sql,Oracle,我想在将新电影插入电影表时创建一个触发器 如果一部电影有特别的“预告片”,我想把租金提高10美分 如果一部电影有特别的“评论”,我想把租金提高20美分 如果一部电影有“删除场景”的特殊功能,我想把租金提高20美分 如果一部电影有“幕后”的特殊功能,我想把租金降低20美分 我所做的是 CREATE OR REPLACE TRIGGER RENTALRATE_TRIGGER BEFORE INSERT OR UPDATE ON FILM REFERENCING OLD AS OLD NE
- 如果一部电影有特别的“预告片”,我想把租金提高10美分
- 如果一部电影有特别的“评论”,我想把租金提高20美分
- 如果一部电影有“删除场景”的特殊功能,我想把租金提高20美分
- 如果一部电影有“幕后”的特殊功能,我想把租金降低20美分
CREATE OR REPLACE TRIGGER RENTALRATE_TRIGGER
BEFORE INSERT OR UPDATE ON FILM
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
IF :NEW.SPECIAL_FEATURES LIKE '%Trailers%' THEN
UPDATE FILM SET RENTAL_RATE = :NEW.RENTAL_RATE + .10;
IF :NEW.SPECIAL_FEATURES LIKE '%Commentaries%' THEN
UPDATE FILM SET RENTAL_RATE = :NEW.RENTAL_RATE + .50;
IF :NEW.SPECIAL_FEATURES LIKE '%Deleted Scenes%' THEN
UPDATE FILM SET RENTAL_RATE = :NEW.RENTAL_RATE + .20;
IF :NEW.SPECIAL_FEATURES LIKE '%Behind the Scenes%' THEN
UPDATE FILM SET RENTAL_RATE = :NEW.RENTAL_RATE - .20;
END IF;
END RENTALRATE_TRIGGER;
/
我在创建触发器后收到此错误
LINE/COL ERROR
-------- -----------------------------------------------------------------
11/5 PLS-00103: Encountered the symbol "RENTALRATE_TRIGGER" when
expecting one of the following:
if
特写专栏可以是这样的,“预告片,幕后”
谢谢。您不应该在触发器中更新同一个表:
CREATE OR REPLACE TRIGGER RENTALRATE_TRIGGER
BEFORE INSERT OR UPDATE
ON FILM
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
IF :NEW.SPECIAL_FEATURES LIKE '%Trailers%'
THEN
:NEW.RENTAL_RATE := :NEW.RENTAL_RATE + .10;
ELSIF :NEW.SPECIAL_FEATURES LIKE '%Commentaries%'
THEN
:NEW.RENTAL_RATE := :NEW.RENTAL_RATE + .50;
ELSIF :NEW.SPECIAL_FEATURES LIKE '%Deleted Scenes%'
THEN
:NEW.RENTAL_RATE := :NEW.RENTAL_RATE + .20;
ELSIF :NEW.SPECIAL_FEATURES LIKE '%Behind the Scenes%'
THEN
:NEW.RENTAL_RATE := :NEW.RENTAL_RATE - .20;
END IF;
END RENTALRATE_TRIGGER;
首先,如果将逗号分隔的值列表存储在一列中,则违反了规范化的所有规则。看起来您对PL/SQL还很陌生,所以您不太可能希望从一个非常不正确的数据模型开始。你确定不想创建一个单独的表来将文件映射到它的特殊功能吗?嗨,贾斯汀,我知道你说的,我同意你的看法。这是一个大学作业,它是一个大表格,包含了我在问题中提到的所有内容。这是大学作业的一个可悲的特点,它们似乎是为了通过隐藏错误的实践来培养差劲的程序员。尽管我认为如果大学讲师擅长编程,他们可能不会是大学讲师:)请注意,这只适用于一个特殊特性比率。如果列表中有多个条目,则只应用一个速率差。