【发布时间】:2014-05-13 23:06:00
【问题描述】:
我有两个服务程序:mySrvPgm 和 myErr
mySrvPgm 有一个过程,其中包含:
/free
...
exec sql INSERT INTO TABLE VALUES(:RECORD_FMT);
if sqlError() = *ON;
//handle error
endif;
...
/end-free
myErr 有一个过程 sqlError:
/free
exec sql GET DIAGNOSTICS CONDITION 1
:state = RETURNED_SQLSTATE;
...
/end-free
背景信息: 我正在使用 XMLSERVICE 从 PHP 调用 mySrvPgm 中的给定过程。我没有使用持久连接。 myErr 通过 mySrvPgm 使用的绑定目录通过引用绑定。其激活设置为*IMMED,其激活组设置为*CALLER。
问题:假设mySvrPgm 中的INSERT 语句有错误。第一次调用 sqlError() 时,尽管出现错误,它将返回 SQLSTATE 00000。对sqlError() 的所有后续调用都返回预期的SQLSTATE。
解决方法:我向 myErr 添加了一个名为 initSQL 的过程:
/free
exec sql SET SCHEMA MYLIB;
/end-free
如果我在 mySrvPgm 中的 INSERT 语句之前调用 initSQL(),sqlError() 会正常运行。它不一定是SET SCHEMA,它可以是另一个GET DIAGNOSTICS 语句。但是,如果它不包含可执行的 SQL 语句,则无济于事。
问题:我相信 myErr 服务程序正在正确激活并且具有正确的范围,但我想知道是否需要做更多的事情来激活它的 SQL 部分。有什么方法可以设置它,以便在激活服务程序时 SQL 自动初始化,还是我必须执行不需要的 SQL 语句才能启动它?
here 提供更多背景信息。
感谢您的阅读。
【问题讨论】:
标签: sql ibm-midrange rpgle