【问题标题】:Initialize / activate SQL prior to GET DIAGNOSTICS在 GET DIAGNOSTICS 之前初始化/激活 SQL
【发布时间】: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


    【解决方案1】:

    操作系统的版本是什么?您了解 PTF 的最新情况吗?

    老实说,在我看来这可能是一个错误。或者手册需要澄清..我会打开一个 PMR。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多