ACIBindDynamic()

ACIBindDynamic()

作用:

注册用户的回调函数,在回调函数中定义数据缓冲区及长度等信息。

语法:

sword ACIBindDynamic ( ACIBind     *bindp,
                       ACIError    *errhp,
                       void        *ictxp,
                       ACICallbackInBind         (icbfp)(
                                void             *ictxp,
                                ACIBind          *bindp,
                                ub4               iter,
                                ub4               index,
                                void            **bufpp,
                                ub4              *alenp,
                                ub1              *piecep,
                                void            **indpp ),
                                void             *octxp,
                       ACICallbackOutBind        (ocbfp)(
                                void             *octxp,
                                ACIBind          *bindp,
                                ub4               iter,
                                ub4               index,
                                void            **bufpp,
                                ub4             **alenpp,
                                ub1              *piecep,
                                void            **indpp,
                                ub2             **rcodepp ) );

参数:

  • bindp (IN/OUT)

bind绑定句柄,必须是已经通过调用 ACIBindByNameACIBindByPos 初始化过的绑定句柄。

  • errhp (IN/OUT)

错误句柄,该接口调用失败时,错误信息会存在该句柄上 ,调用 ACIErrorGet 获得错误信息。

  • ictxp (IN)

回调函数icbfp所需的上下文指针。

  • icbfp (IN)

在运行时返回指向IN绑定值或段的指针的回调函数。 回调采用以下参数

  • ictxp (IN/OUT)

回调函数的上下文指针。

  • bindp (IN)
将唯一标识该绑定变量的bind句柄。
  • iter (IN)

从0开始的执行迭代值

  • index (IN)

绑定PL/SQL数组的索引,对于SQL语句他是行号。值起始为0,且不能比curelep 的值大。

  • bufpp (OUT)

指向缓冲区或存储的指针。 对于描述符,* bufpp包含指向描述符的指针。 例如,如果定义以下参数,则将* bufpp设置为lobp,而不是* lobp.

ACILobLocator    * lobp;

如果bind句柄ACI_ATTR_CHARSET_ID属性设置为ACI_UTF16ID(替换了不推荐使用的ACI_UCS2ID,保留该属性是为了向后兼容),则假定通过相应的绑定调用传递和接收的所有数据都采用UTF-16编码。.

  • alenp (OUT)

指向存储的指针,供ACI在读取绑定值或段的大小后填充它的大小。 对于描述符,将指针的大小传递给描述符。 例如,sizeof(ACILobLocator * )。

  • piecep (OUT)

绑定值的一部分。 这可以是以下值之一:ACI_ONE_PIECE,ACI_FIRST_PIECE,ACI_NEXT_PIECE和ACI_LAST_PIECE。 对于不支持分段操作的数据类型,必须传递ACI_ONE_PIECE或生成错误。

  • indpp (OUT)

包含指标值。 这要么是指向sb2值的指针,要么是指向用于绑定命名数据类型的指示符结构的指针。

  • octxp (IN)

回调函数ocbfp()所需的上下文指针.

  • ocbfp (IN)

在运行时返回指向OUT绑定值或段的指针的回调函数。 回调采用以下参数:

  • octxp (IN/OUT)

此回调函数的上下文指针。

  • bindp (IN)

传入的绑定句柄唯一标识此绑定变量。

  • iter (IN)

从0开始的执行迭代值。

  • index (IN)

对于PL / SQL,数组绑定的当前数组的索引。 对于SQL,索引是当前迭代中的行号。 它基于0,并且不得大于bind调用的curlep参数。

  • bufpp (OUT)

指向要写入绑定值或片段的缓冲区的指针。

如果ACI_ATTR_CHARSET_ID属性设置为ACI_UTF16ID(替换了不推荐使用的ACI_UCS2ID,保留该属性是为了向后兼容),则假定通过相应的绑定调用传递和接收的所有数据都采用UTF-16编码。

  • alenpp (IN/OUT)

指向存储的指针,供ACI在读取绑定值或段的大小后填充它的大小。 在代码点中时,它以字节为单位,但Unicode编码除外(如果ACI_ATTR_CHARSET_ID属性设置为ACI_UTF16ID)。

  • piecep (IN/OUT)

从回调(应用程序)向数据库返回一个片段值,如下所示:

  • IN-值可以是ACI_ONE_PIECE或ACI_NEXT_PIECE。
  • OUT-取决于IN值:
  • 如果IN值为ACI_ONE_PIECE,则OUT值可以为ACI_ONE_PIECE或ACI_FIRST_PIECE。
  • 如果IN值为ACI_NEXT_PIECE,则OUT值可以为ACI_NEXT_PIECE或ACI_LAST_PIECE。
  • indpp (OUT)

包含指标值。 这要么是指向sb2值的指针,要么是指向用于绑定命名数据类型的指示符结构的指针。

  • rcodepp (OUT)

返回指向返回码的指针。

说明:

如果在先前对 ACIBindByNameACIBindByPos 的调用中指定了ACI_DATA_AT_EXEC模式,则此调用用于注册用户定义的回调函数以提供或接收数据。

如果调用成功,则回调函数指针必须返回ACI_CONTINUE。 除ACI_CONTINUE以外的任何返回码都表明客户端希望立即终止处理。

传递存储区的地址时,即使在应用程序从回调返回后,也要确保该存储区存在。 这意味着您不应在堆栈上分配此类存储。

注意:使用 ACIEnvNlsCreate 创建环境句柄之后,bind和define句柄的实际长度和返回长度始终以字节数为单位。