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绑定句柄,必须是已经通过调用 ACIBindByName 或 ACIBindByPos 初始化过的绑定句柄。
- 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)
返回指向返回码的指针。
说明:
如果在先前对 ACIBindByName 或 ACIBindByPos 的调用中指定了ACI_DATA_AT_EXEC模式,则此调用用于注册用户定义的回调函数以提供或接收数据。
如果调用成功,则回调函数指针必须返回ACI_CONTINUE。 除ACI_CONTINUE以外的任何返回码都表明客户端希望立即终止处理。
传递存储区的地址时,即使在应用程序从回调返回后,也要确保该存储区存在。 这意味着您不应在堆栈上分配此类存储。
注意:使用 ACIEnvNlsCreate 创建环境句柄之后,bind和define句柄的实际长度和返回长度始终以字节数为单位。