[英]Oracle trigger update values after insertion
我正在创建一个触发器,但仍然卡住并且不确定代码有什么问题。 任何帮助表示赞赏。
触发器 BI_FILM_DESP 将文本附加到插入数据库的每部新电影的描述中。 输出应该是这样的 [描述].[评级]:最初在 <original_langauge_id> 中。 以 <language_id> 重新发布。 如果评级、语言 ID 或原始语言为空,则电影将使用原始描述。
CREATE OR REPLACE TRIGGER "BI_FILM_DESP"
AFTER INSERT ON "FILM"
FOR EACH ROW
DECLARE
DESCRIPTION VARCHAR2 (255);
BEGIN
INSERT INTO FILM
(TITLE, DESCRIPTION, LANGUAGE_ID, ORIGINAL_LANGUAGE_ID, RATING) VALUES (:new.TITLE, :new.DESCRIPTION, :new.LANGUAGE_ID, :new.ORIGINAL_LANGUAGE_ID, :new.RATING)
UPDATE FILM
SET DESCRIPTION = DESCRIPTION '. ' RATING ': Originally in ' LANGUAGE_ID '. RE-released in ' ORIGINAL_LANGUAGE_ID
WHERE RATING IS NOT NULL
OR LANGUAGE_ID IS NOT NULL
OR ORIGINAL_LANGUAGE_ID IS NOT NULL;
END;
/
这不是触发器的工作方式。 创建触发器的表上的 DML 语句是不可能的。 而是做这样的事情:
CREATE OR REPLACE TRIGGER "BI_FILM_DESP" BEFORE
INSERT ON "FILM"
FOR EACH ROW
DECLARE
l_description VARCHAR2(255);
BEGIN
IF ( :new.rating IS NOT NULL OR :new.language_id IS NOT NULL OR :new.original_language_id IS NOT NULL ) THEN
:new.description := :new.description
|| '. '
|| :new.rating
|| ': Originally in '
|| :new.language_id
|| '. RE-released in '
|| :new.original_language_id;
END IF;
END;
/
BEFORE INSERT
触发器是你想要的,因为你在插入之前修改了一个列||
完成的象征。description
重命名为l_description
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.