SQLRPGLE程序IBM中的SQLSTATE'08003'

问题描述 投票:0回答:1

我没有数过SQLRPGLE程序中的问题。当订单出问题时,它用作API程序向用户发送邮件。

为了勾画程序的工作原理,我们有一个自动启动作业,它启动一个程序(程序A),该程序查看创建的每个订单以查看其中的所有数据是否正常。如果没有,它将调用邮件API程序。

在程序A中,有多个对发送邮件的API调用。在API邮件程序中,我们在称为FCMAILS的表中进行了SQL插入(作为日志记录)。

在程序中,只有1个调用总是出错。经过在SQLSTATE 08003中进行一些测试后得出的结果。意思是“应用程序未处于连接状态”。该程序不会崩溃,也不会发出任何sysopr通知。它还不会在文件FCMAILS中写入记录。

有人有解决此问题的想法吗?我一直在寻找AS400的SQLCONNECT命令,但没有找到太多有关它的信息,并且我不想让它变得比现在更糟。

/free
     // save body to text file for loading into clob
     BodyObj_Data = Body;
     BodyObj_Len = %len(Body);
     callp GenGuid(GUID);

     exec sql
       insert into fcmails(
          Guid,SendUser,Program,Sender,Recipient,RecipientCc,RecipientBcc,
          Subject,Body) values
          (:GUID,:SendUser,:Program,:Sender,:Recipient,:RecipientCc,
            :RecipientBcc,:Subject,:BodyObj);

     if sqlstate <> '00000';
       callp XSndMsg(' ':'SYSOP':'Mail Error: P:' + Program +' S:'+sqlstate+
                                 ' subj:' +Subject);

     endif;
     // trigger mail program
     callp SndDtaQ('APIMAILDTQ':'FCDTA500':%Size(GUID):
                    GUID);

     return *on;
  /end-free
 PapiCreateMail    E

enter image description here enter image description here

db2 ibm-midrange rpgle
1个回答
0
投票

我已经在某些非常特定的情况下看到了,尽管我不确定为什么会发生,因为除了本地数据库外,我从未连接到其他任何东西。

我所做的是创建一个使用EXEC SQL CONNECT RESET;重新连接的过程。每当找到08003 SQLSTATE时,我就调用该过程。然后,我可以重试失败的语句。它需要一些额外的循环,并进行检查以防止无限循环,但此后我再也没有遇到过问题。

© www.soinside.com 2019 - 2024. All rights reserved.