SQL 触发器显示错误 PL/SQL:SQL 语句被忽略 PL/SQL:ORA-00936:缺少表达式
SQL Triggers showing errors PL/SQL: SQL Statement ignored PL/SQL: ORA-00936: missing expression
这是我要编写 SQL 触发器的 sql 语句,应命名为 FILM_LANG ,以将文本附加到
插入数据库的每部新电影的描述。它基于
语言 (language_id) 和原始语言 (original_language_id)
电影。
由于您是基于 id 查询 table 语言,因此将它们作为两个单独的语句来获得更清晰的代码并没有太大关系。
顺便说一下,Oracle 中的 CONCAT
函数仅适用于两个参数,所以更喜欢 ||
CREATE OR replace TRIGGER "BI_FILM_LANG"
BEFORE INSERT ON "FILM"
FOR EACH ROW
BEGIN
SELECT :NEW.description||'.Originally in '
|| name --no need to append :old.description, it's null for insert triggers.
--Append :NEW.description if it contains anything before the string
INTO :NEW.description
FROM LANGUAGE
WHERE language_id = :NEW.language_id;
SELECT :NEW.description
|| '.Re-released in '
|| name --appends the :NEW.description
INTO :NEW.description
FROM LANGUAGE
WHERE language_id = :NEW.original_language_id;
END;
/
由于您正在使用 concat
函数,并且在其中放置了多个参数,这就是问题所在,您应该使用 ||
来连接字符串。
这是我要编写 SQL 触发器的 sql 语句,应命名为 FILM_LANG ,以将文本附加到 插入数据库的每部新电影的描述。它基于 语言 (language_id) 和原始语言 (original_language_id) 电影。
由于您是基于 id 查询 table 语言,因此将它们作为两个单独的语句来获得更清晰的代码并没有太大关系。
顺便说一下,Oracle 中的 CONCAT
函数仅适用于两个参数,所以更喜欢 ||
CREATE OR replace TRIGGER "BI_FILM_LANG"
BEFORE INSERT ON "FILM"
FOR EACH ROW
BEGIN
SELECT :NEW.description||'.Originally in '
|| name --no need to append :old.description, it's null for insert triggers.
--Append :NEW.description if it contains anything before the string
INTO :NEW.description
FROM LANGUAGE
WHERE language_id = :NEW.language_id;
SELECT :NEW.description
|| '.Re-released in '
|| name --appends the :NEW.description
INTO :NEW.description
FROM LANGUAGE
WHERE language_id = :NEW.original_language_id;
END;
/
由于您正在使用 concat
函数,并且在其中放置了多个参数,这就是问题所在,您应该使用 ||
来连接字符串。