如何为AS400表创建SQL触发器
我是Java开发人员,但不是RPG开发人员。对于我的一个项目,我需要在插入后为如何为AS400表创建SQL触发器,sql,db2,database-trigger,db2-400,Sql,Db2,Database Trigger,Db2 400,我是Java开发人员,但不是RPG开发人员。对于我的一个项目,我需要在插入后为AS400表(表a)创建一个SQL,并将新创建的行复制到另一个表(表B)中。两个表具有相同的结构。 如果有人能指导我做这个过程,我真的很感激。请注意,我完全有权在AS400上执行任何类型的流程。提前谢谢 编辑 AS400是一个包含SQL引擎(DB2)的IBM设备 您有几个选择,模式和粒度 模式DB2SQL对AFTER触发器有效。触发器后的DB2SQL模式 在所有行操作发生后激活 模式DB2ROW触发器在每个行操作上都被
AS400
表(表a)创建一个SQL,并将新创建的行复制到另一个表(表B)中。两个表具有相同的结构。
如果有人能指导我做这个过程,我真的很感激。请注意,我完全有权在AS400上执行任何类型的流程。提前谢谢
编辑
AS400是一个包含SQL引擎(DB2)的IBM设备
您有几个选择,模式和粒度
模式DB2SQL对AFTER触发器有效。触发器后的DB2SQL模式
在所有行操作发生后激活
模式DB2ROW触发器在每个行操作上都被激活。模式DB2ROW
对于激活之前和之后的时间都有效
对于每一行,指定数据库管理器执行
触发的主题表的每一行的触发操作
操作修改。如果触发操作没有修改任何
行,则不会执行触发的操作
FOR EACH语句指定数据库管理器执行
触发操作仅触发一次。即使
触发操作不会修改或删除任何行,但会触发
操作仍然执行一次。不能指定FOR EACH语句
在触发之前。不能为一个实例指定FOR EACH语句
模式DB2ROW触发器
文档中的引用
子句有一个很好的表,显示了它们是如何交互的
假设您的原始表已经完成了多行插入,那么每个语句触发一次触发器将提高性能
CREATE OR REPLACE TRIGGER TRIGGER_NAME AFTER INSERT
ON TABLE_A
REFERENCING NEW TABLE AS TABLE_N
FOR EACH STATEMENT MODE DB2SQL
begin atomic
insert into TABLE_B
select * from TABLE_N;
end
交替,一行一行
CREATE OR REPLACE TRIGGER TRIGGER_NAME AFTER INSERT
ON TABLE_A
REFERENCING NEW ROW AS N
FOR EACH ROW MODE DB2ROW
begin atomic
insert into TABLE_B
values(n.col1, n.col2, n.col3, <....>);
end
插入后创建或替换触发器名称
在桌子上
将新行引用为N
对于每行模式DB2ROW
开始原子化
插入到表B中
数值(n.col1,n.col2,n.col3,);
结束
如果一次仅将一行插入表_A,则两条语句将一次将一行插入表_B
如果用一次插入将10行插入表_A,则每个语句模式DB2SQL的将一次将10行插入表_B;而对于每行模式DB2ROW
将执行10个单独的插入
有时,您必须为每一行使用,例如BEFORE触发器
但是(通常)在SQL中,最好尽可能地执行基于集合的操作。到目前为止您创建了什么?@Krismorte我已经创建了SQL触发器。我想将其添加到As400表中。请澄清As400是表的名称?您使用的是哪个数据库?@Krismorte AS400是一台带有SQL引擎的IBM服务器,因此我也可以执行SQL语句。@Krismorte它是DB2,但它也有SQL引擎。非常感谢您的回答。每次TABLE_A
获得新记录时,我都需要触发触发器并将记录插入TABLE_B
。我可以为每个语句使用吗?您还可以告诉我什么是表\N
?如果一次只插入一行,那么对于每个语句模式,DB2SQL
一次只会在表\B中插入一行。但是,如果要插入多行,则应使用一条语句插入它们。在这种情况下,上述操作将一次性将它们插入表_B中。TABLE_N是一组行,通过单个INSERT
插入到TABLE_A中,仅用于澄清,在我的例子中,有这么多程序分别向表A插入数据。希望在使用“FOR EACH STATEMENT MODE DB2SQ”时不会出现问题?表N是临时表,还是应该使用与表A和表B相同的表结构创建它?表N是由系统构建的,它将具有与表A相同的列。。。