在阅读问题之前,请检查此
我想创建一个触发器,该触发器将在表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:预期以下情况之一时遇到符号“文件结束”:符号“;” 被替换为“文件结束”以继续。
你怎么看?以及我该如何解决?
我认为您需要这样的INSERT
声明以及SELECT
触发器中的
CREATE OR REPLACE TRIGGER add_to_A
AFTER INSERT ON B
FOR EACH ROW
BEGIN
INSERT INTO A
SELECT myseq.nextval, y, :NEW.z
FROM C
WHERE t = :NEW.t;
END;
/
哪里
t
,x
假定是表的主键列C
和A
分别commit
出于在表B
中插入数据的应用程序的事务完整性的考虑,不会仅在DML语句之后添加本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句