ACIDefineDynamic()¶
-
ACIDefineDynamic()¶
作用:
设置在 ACIDefineByPos 或 ACIDefineByPos2 中选择ACI_DYNAMIC_FETCH模式时所需的其他属性。
语法:
sword ACIDefineDynamic ( ACIDefine *defnp,
ACIError *errhp,
void *octxp,
ACICallbackDefine (ocbfp)(
void *octxp,
ACIDefine *defnp,
ub4 iter,
void **bufpp,
ub4 **alenpp,
ub1 *piecep,
void **indpp,
ub2 **rcodep );
参数:
- defnp (IN/OUT)
调用 ACIDefineByPos 返回的定义结构的句柄。
- errhp (IN/OUT)
当发生错误时,可以将错误句柄传递给 ACIErrorGet 以获取诊断信息。
- octxp (IN)
指向回调函数的上下文。
- ocbfp (IN)
指向回调函数。 在运行时调用它,以获取指向缓冲区的指针,在缓冲区中将获取取回的数据或其一部分。 回调还指定指示符,返回码以及数据段和指示符的长度。
注意:通常,在ACI函数中,IN参数是指传递给ACI的数据,而OUT参数是指从ACI返回的数据。 对于回调,这是相反的。 IN表示数据从ACI进入回调,而OUT表示数据从回调出来并进入ACI。
回调参数为:
- octxp (IN/OUT)
上下文指针作为参数传递给所有回调函数。 当客户端库需要缓冲区以返回获取的数据时,将调用回调,并且提供的运行时缓冲区将返回部分或全部数据。
- defnp (IN)
定义句柄。
- iter (IN)
指定此当前读取的哪一行; 从0开始。
- bufpp (OUT)
返回指向用于存储列值的缓冲区的指针; 也就是说,* bufpp指向该列值的适当存储。
- alenpp (IN/OUT)
应用程序用来设置它在* bufpp中提供的存储大小。 数据取入缓冲区后,alenpp指示数据的实际大小(以字节为单位)。 如果第一次调用中提供的缓冲区长度不足以存储服务器返回的所有数据,则将再次调用该回调,依此类推。
- piecep (IN/OUT)
从回调(应用程序)向ACI返回一个片段值,如下所示:
piecep参数指示要提取的块是第一块ACI_FIRST_PIECE,后续块ACI_NEXT_PIECE还是最后一块ACI_LAST_PIECE。 该程序可以在下一次调用回调时或在一系列回调结束后处理该片段。
IN-值可以是ACI_ONE_PIECE,ACI_FIRST_PIECE或ACI_NEXT_PIECE。
OUT-取决于IN值:
如果IN值为ACI_ONE_PIECE,则OUT值可以为ACI_ONE_PIECE。
如果IN值为ACI_FIRST_PIECE,则OUT值可以为ACI_ONE_PIECE或ACI_FIRST_PIECE。
如果IN值为ACI_NEXT_PIECE,则OUT值可以为ACI_NEXT_PIECE或ACI_LAST_PIECE。
- indpp (IN)
指标变量指针。
- rcodep (IN)
返回码变量指针。
说明:
如果在对 ACIDefineByPos 或 ACIDefineByPos2 的调用中选择了ACI_DYNAMIC_FETCH模式,则此调用用于设置所需的其他属性。 如果选择了ACI_DYNAMIC_FETCH模式,并且跳过了对 ACIDefineDynamic 的调用,则应用程序可以使用ACI调用( ACIStmtGetPieceInfo 和 ACIStmtSetPieceInfo )分段获取数据。
注意:使用 ACIEnvNlsCreate 创建环境句柄之后,bind和define句柄的实际长度和返回长度始终以字节数为单位。