【发布时间】:2020-12-18 15:05:36
【问题描述】:
在阅读问题之前,请检查此问题
我想创建触发器,在插入表 B 后将新行插入表 A。 A 上的属性 z (FK) 的值是表 B 上的 z (PK)(所以我将 new.z 作为 A 上的 z 的值传递),对于 A 上的 y,值是 C 上的 y。 所以,我认为触发器看起来像这样:
CREATE TRIGGER add_to_A
AFTER INSERT on B
FOR EACH ROW BEGIN
select *
from new, B, C
where new.z = B.z and B.t = C.t
INSERT INTO A (x, y, z) VALUES ('1', C.y, B.z);
END
但我发现这是错误的和错误的。以下是错误:
错误(1):PL/SQL:SQL 语句被忽略
错误(4,6):PL/SQL:ORA-00933:SQL 命令未正确结束
错误(5,3):PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:;符号“;”被替换为“文件结尾”以继续。
你怎么看?以及如何解决?
【问题讨论】:
-
错误是什么?如果您需要重新创建/修改它,也建议写
CREATE OR REPLACE TRIGGER而不是CREATE TRIGGER。 -
@TaaviTiitsu 这里是:错误(1):PL/SQL:SQL 语句被忽略,错误(4,6):PL/SQL:ORA-00933:SQL 命令未正确结束,错误( 5,3):PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:
符号“;”被替换为“文件结尾”以继续。 -
数据库的版本是多少?如果
12c+,则可能首选内部序列结构,而不是像我在触发器中所说的那样使用单独的序列。 -
11.问题已解决(请参阅下面的答案)。