1

我只是调试 iSeries/RPG/SQL 问题的唯一不幸者……(我不是 RPG 专家)

我有一个程序,它包含在 iSeries 上的 DB2 上声明的临时表。临时表是在会话中声明的,因此当我通过 iSeries 上的终端运行应用程序并调试 RPG 时(我认为这是正确的术语?)无论如何,我实际上处于两个不同的会话中。

我正在查看的 SQL 做了这样的事情......

select blah from SESSION/#temp_table left join #real_table left join _to_many_other_tables

虽然我可以很好地查询“真实表”,但我看不到 SESSION 表的内容......那么我将如何在不同的会话中查询表?大概 SESSION/#temp_table 是我可以通过执行 select * from 123123/#temp_table 之类的操作来查询的东西,但是我怎么知道其他会话 id/name/variable/access token 的样子?

4

1 回答 1

1

您可以使用STSRRVJOB调试另一个作业,但这可能不会让您查询该作业的 QTEMP。传统上,中端程序员以交互方式调试这些工作。登录到绿屏会话并调用您要调试的程序。

STRDBGSTRISDB系统调试器和RDi中的 SEP 工具之间,有许多选项可以解决调试问题。此外,开源DBG400可能值得一看。

编辑: 这个问题很困难。看起来这是一个客户端/服务器类型的应用程序。在编写这样的应用程序时,我通常会在其中放置一个调试开关,以便我可以记录正在发生的事情以进行调试。DB2 for i 上的存储过程可以纯粹用 SQL 实现,也可以调用像 RPG 之类的 HLL 来实现。

如果您的 SP 是外部的,例如 RPG,则添加一些代码,将临时文件复制到系统上的真实库中。将其实现为 system() 或 QCMDEXC 调用对现有程序代码的干扰不是很大。您可以使用数据区域打开和关闭它 - 同样,非常不具侵入性,但您可以从应用程序外部设置调试状态。

如果您的 SP 是 SQL,我会修改它们以在真实库中编写临时文件的副本。假设有一个 CREATE TABLE QTEMP/TEMP001 WITH DATA ... 添加一个 CREATE TABLE DEBUGLIB/TEMP001 WITH DATA ... 如果你愿意,你可以在一个特殊的“调试”用户配置文件中键入这个额外的代码,尽管这可能需要一些IBM i 方面的安全更改。

于 2013-08-18T14:58:53.337 回答