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