ACIErrorGet()

ACIErrorGet()

作用:

在提供的缓冲区中返回错误消息和数据库错误代码。

语法:

sword ACIErrorGet ( void       *hndlp,
                    ub4         recordno,
                    OraText    *sqlstate,
                    sb4        *errcodep,
                    OraText    *bufp,
                    ub4         bufsiz,
                    ub4         type );

参数:

  • hndlp (IN)

错误句柄或环境句柄(用于 ACIEnvCreateACIHandleAlloc 的错误)。

  • recordno (IN)

指示应用程序从中寻求信息的状态记录。 从1开始。

  • sqlstate (OUT)

在8.x版或更高版本中不支持。

  • errcodep (OUT)

返回错误代码。

  • bufp (OUT)

返回错误消息文本。

  • bufsiz (IN)

为错误消息提供的缓冲区的大小,以字节数为单位。 如果错误消息的长度大于bufsiz,则会在bufp中返回截短的错误消息文本。

如果将type设置为ACI_HTYPE_ERROR,则 ACIErrorGet 截断期间的返回码为ACI_ERROR。 然后,客户端可以指定更大的缓冲区,然后再次调用 ACIErrorGet

如果bufsiz足以容纳整个消息文本,并且消息可以成功复制到bufp中,则 ACIErrorGet 的返回码为ACI_SUCCESS。

使用以下常量之一来定义错误消息缓冲区,您可以从 ACIErrorGet 返回返回的消息到缓冲区中:

#define ACI_ERROR_MAXMSG_SIZE 1024 /* 最大错误信息长度 */

#define ACI_ERROR_MAXMSG_SIZE2 3072 /* 新的最大错误长度 */

您应该使用ACI_ERROR_MAXMSG_SIZE2来确保您在返回的错误文本中获得了更多信息。

例如,您可以执行以下操作:

char errorMesg[ACI_ERROR_MAXMSG_SIZE2];

  • type (IN)

句柄的类型(ACI_HTYPE_ERROR或ACI_HTYPE_ENV)。

说明:

此功能不支持SQL语句。 通常,hndlp实际上是错误句柄或环境句柄。 您应该始终以环境句柄中设置的编码来获取消息。

请注意,仅应在返回ACI_ERROR或ACI_SUCCESS_WITH_INFO的ACI调用之后调用 ACIErrorGet

错误句柄最初是通过调用 ACIHandleAlloc 分配的。

注意: ACIErrorGet 函数至少返回一个诊断记录。 可以通过重复调用 ACIErrorGet 方法来检索多个诊断记录,直到没有更多的记录并且该方法返回ACI_NO_DATA。