1

在我的 OS/400 v6.x 系统中,我使用 ADDPFTRG 命令为物理文件(DB2 表)创建了一个 AFTER INSERT 触发器,每次我在 RPG IV 程序上执行 WRITE 命令或从 STRSQL 发出 INSERT 语句时,该命令都会正确触发但是当我使用 JT400(JTOpen) JDBC 驱动程序从 Java 程序执行 INSERT 语句时,不会触发触发器。

在这两种情况下(来自 OS400 和来自 Java),记录都已成功插入,但仅当从 OS400 方式插入记录时才会触发触发器。

我在IBM 红皮书JTOpen 论坛和 Google 上搜索了任何可能与我的案例相关的内容,但一无所获。

遗憾的是,由于 JT400 jar 没有版本号,我无法判断我的版本是否已过时,也没有机会尝试 JTOpen 页面中的最新版本。

是否有任何技术限制或库错误阻止我从 Java/JT400 触发 DB2 触发器?

4

2 回答 2

0

我解决了我的问题并将发布解决方案,以便有类似问题的其他任何人(包括我未来的自己)至少可以获得有关如何解决问题的提示。

该问题与添加到 JDBC 连接用户的库有关。触发器实际上被触发了,但我没有注意到它,因为我希望它在该程序调用另一个 RPG 程序(比如 Program2)之后调用一个 RPG 程序(比如 Program1)。我看不到第二个程序被调用,所以我认为我的触发器没有被 JDBC INSERT SQL 语句触发。

当我检查 WRKACTJOB 中的 QZDAZOINIT 作业日志时,我注意到我的 Program2 没有被调用,因为在我为 JDBC 连接配置的库中找不到它。我只添加了能够查看物理数据文件(PF)而不是 RPG 程序(PGM)的库,并且在我的触发程序(Program1)中我试图调用另一个,所以我需要有程序库JDBC 连接用户。在 JDBC 连接属性中配置所有必需的库后,它按预期工作。

于 2013-02-23T04:01:25.447 回答
0

图书馆清单不是唯一的问题。您可能需要关心 ADDPFTRG 命令的“线程安全”和“多线程作业操作”参数。

ADDPFTRG .... THDSAFE(*YES) MLTTHDACN(*RUN)

于 2016-07-06T21:49:12.797 回答