调试DB2会话



我只是一个不幸的唯一调试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是我可以通过从123123/#temp_table中选择*来查询的东西,但我怎么知道其他会话id/name/variable/access令牌是什么样子的呢?

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

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

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

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

如果您的SP是SQL,我会修改它们,以便在实际库中写入临时文件的副本。假设有一个带有数据的创建表QTEMP/TEMP001。。。添加带有数据的CREATE TABLE DEBUGLIB/TEMP001。。。如果您愿意,您可以在一个特殊的"调试"用户配置文件中键入这些额外的代码,尽管这可能需要在IBMi端进行一些安全性更改。

相关内容

  • 没有找到相关文章

最新更新