ACILobAssign()¶
-
ACILobAssign()¶
作用:
分配一个LOB或BFILE描述符到另一个描述符指针,因拷贝基本是在客户端完成,所以只是一种浅拷贝。
语法:
sword ACILobAssign ( ACIEnv *envhp,
ACIError *errhp,
const ACILobLocator *src_locp,
ACILobLocator **dst_locpp );
参数:
- envhp(IN)
环境句柄
- errhp (IN/OUT)
错误句柄,该接口调用失败时,错误信息会存在该句柄上 ,调用 ACIErrorGet 获得错误信息。
- src_locp (IN)
一个单独的源大对象的内部大对象描述符指针,这个描述符指针必须是通过svchp句柄已经从服务器获得的。
- dst_locp (IN/OUT)
要复制到的LOB或BFILE定位器。 调用者必须通过调用 ACIDescriptorAlloc 为目标定位器分配空间后才能使用。
说明:
将源定位器分配给目标定位器。分配后,两个定位器都引用相同的LOB值。对于内部LOB,仅当目标定位器存储在表中时,源定位器的LOB值才会复制到目标定位器的LOB值。因此,发出包含目标定位符的对象的刷新将复制LOB值。
ACILobAssign不能用于临时LOB。它生成一个ACI_INVALID_HANDLE错误。对于临时LOB,请使用ACILobLocatorAssign。
对于BFILE,仅将引用该文件的定位符复制到表中。操作系统文件本身不会被复制。
将BFILE定位器分配给LOB定位器是错误的,反之亦然。
如果源定位器用于启用了缓冲的内部LOB,并且已使用源定位器通过LOB缓冲子系统修改LOB数据,并且自写入以来未刷新缓冲区,则源定位器可能不会被分配给目标定位器。这是因为每个LOB只能有一个定位器可以通过LOB缓冲修改LOB数据。
输入目标定位符的值必须已通过调用 ACIDescriptorAlloc 分配。 例如,假定以下声明:
ACILobLocator *source_loc = (ACILobLocator *) 0;
ACILobLocator *dest_loc = (ACILobLocator *) 0;
以下代码示例显示应用程序如何分配source_loc定位器。
分配source_loc源定位器
if (ACIDescriptorAlloc((void *) envhp, (void **) &source_loc, (ub4) ACI_DTYPE_LOB, (size_t) 0, (void **) 0))
handle_error;
假定它随后从表中选择一个LOB到source_loc中以对其进行初始化。 在 ACILobAssign 调用将source_loc的值分配给dest_loc之前,应用程序必须先分配目标定位器dest_loc,如以下代码示例所示,分配dest_loc目标定位器:
if (ACIDescriptorAlloc((void *) envhp, (void **) &dest_loc, (ub4)ACI_DTYPE_LOB, (size_t) 0, (void **) 0))
handle_error;
if (ACILobAssign(envhp, errhp, source_loc, &dest_loc))
handle_error