我在IBM i上运行Apache,设置了对使用嵌入式SQL的RPG ILE程序的CGI调用。
我在这些程序中遇到各种SQL错误(例如“需要指示符变量”和“游标未打开”),但我找不到哪些程序特别导致了这些问题。此系统中有数百个程序,并且在错误消息上点击F1时未指定源程序(消息来自/到'QSQRUN2')。
我无法在调试模式下重新编译每个程序,这可能会提供更多信息(生产系统,一些源问题)。
有关如何获取此信息的任何想法?
答案 0 :(得分:1)
哪里看到错误?
你说"击中F1 ......"你的意思是命中F10 =在作业日志中显示消息;来自WRKACTJOB屏幕上的7 =显示消息?
如果是,请尝试5 =使用和11 =显示调用堆栈..
如果作业没有进入MSGW,那么你的程序就会吞下这些错误。要么不正确而不做任何事情。或者在处理问题后(并且忽略清理作业日志)或在某处记录您需要的数据。你只需要知道在哪里。
答案 1 :(得分:0)
下面是作业日志中的消息示例,它在“原因”中有一个语句,用于调出主机变量名称。在示例中,它是“TCANDSBMDT”。这有助于缩小范围吗?
Message ID . . . . . . : SQL0305
Date sent . . . . . . : 08/06/12 Time sent . . . . . . : 10:41:52
Message . . . . : Indicator variable required.
Cause . . . . . : A FETCH, embedded SELECT, CALL, GET DESCRIPTOR, or a SET
or VALUES INTO statement has resulted in a null value, but an indicator
variable was not specified for host variable TCANDSBMDT. ...
答案 2 :(得分:0)
@ user2338816在评论中给出了这个答案。
有一种简单的方法可以为特定作业添加SQL监控。
STRDBMON OUTFILE(QGPL/DBMON) JOB(*ALL/QTMHHTTP/WEBSERVER) FTRSQLCODE(*NONZERO)
启动监视器,监视用户QTMHHTTP,作业WEBSERVER的所有作业(当前或将来),记录所有发出警告或错误的语句。
有关生成的QGPL / DBMON数据库文件的详细信息,请参阅here。
如果您需要某些上下文,则可以在作业日志中交叉引用作业编号/时间。