db2 - SQLRPGLE 程序 IBM 中的 SQLSTATE '08003'
问题描述
我没有计算 SQLRPGLE 程序中的问题。它用作 API 程序,用于在订单出现问题时向用户发送邮件。
为了勾画程序的工作原理,我们有一个自动启动作业,它启动一个程序(程序 A),该程序查看创建的每个订单以查看其中的所有数据是否正常。如果不是,它会调用邮件 API 程序。
在程序 A 中有几个发送邮件的 API 调用。在 API 邮件程序中,我们在名为 FCMAILS 的表中执行 SQL 插入(作为日志记录)。
在程序 A 中,只有 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
解决方案
我已经在一些非常具体的情况下看到了这种情况,尽管我不确定为什么会发生这种情况,因为除了本地数据库之外我从来没有连接到任何东西。
我所做的是创建一个使用EXEC SQL CONNECT RESET;
. 每当找到 08003 SQLSTATE 时,我都会调用该过程。然后我可以重试失败的语句。它需要一些额外的循环,并检查以防止无限循环,但在那之后我从来没有遇到过问题。
推荐阅读
- django - 删除django中的多行
- python - 在 Python 中,如何将符号转换为表情符号?
- python - 用 pyplot 在前景中绘制更近的线条
- email - SpamAssassin:阻止来自除某些域之外的所有域的电子邮件到特定用户
- unity3d - Unity - 命令行性能
- xslt - 使用 XSLT 将 xsd:complex-type 元素复制到另一个 xsd:complex-type 元素
- c# - C# 中的 LoadLibraryEx 函数问题
- python - finally 总是在 try 块返回之前运行,那么为什么 finally 块中的更新不会影响 try 块返回的变量的值?
- javascript - 在反应应用程序的函数调用中使用时,Axios post 不返回数据
- javascript - JavaScript 函数不适用于第二个 HTML 文件,因为它是由第一个 HTML 文件中的按钮触发的