ACILobLocatorAssign()¶
-
ACILobLocatorAssign()¶
作用:
分配一个LOB或BFILE描述符到另一个描述符指针 ACILobLocatorAssign 扩展了 ACILobAssign 对临时lob的支持,并且拷贝临时lob时可以做到深度拷贝。
语法:
sword ACILobLocatorAssign ( ACISvcCtx *svchp,
ACIError *errhp,
const ACILobLocator *src_locp,
ACILobLocator **dst_locpp );
参数:
- svchp (IN)
服务上下文句柄
- errhp (IN/OUT)
错误句柄,该接口调用失败时,错误信息会存在该句柄上 ,调用 ACIErrorGet 获得错误信息。
- src_locp (IN)
一个单独的源大对象的内部大对象描述符指针,这个描述符指针必须是通过svchp句柄已经从服务器获得的。
- dst_locp (IN/OUT)
要复制到的LOB或BFILE定位器。 调用者必须通过调用 ACIDescriptorAlloc 为目标定位器分配空间后才能使用。
说明:
此调用将源定位器分配给目标定位器。 分配后,两个定位器都引用相同的LOB数据。 对于内部LOB,仅当目标定位器存储在表中时,才将源定位器的LOB数据复制到目标定位器的LOB数据。 因此,发出包含目标定位符的对象的刷新将复制LOB数据。 对于BFILE,仅将引用操作系统文件的定位器复制到表中; 操作系统文件未复制。
请注意,此调用类似于 ACILobAssign ,但是 ACILobLocatorAssign 会使用ACI服务句柄指针而不是ACI环境句柄指针。 同样, ACILobLocatorAssign 可以用于临时LOB,但是 ACILobAssign 不能用于临时LOB。
如果 ACILobLocatorAssign 函数失败,则目标定位器不会恢复到其先前状态。 除非将其重新初始化,否则不应在后续操作中使用目标定位器。
如果目标定位器dst_locp是一个已经存在的临时LOB,则在将源LOB定位器分配给目标临时LOB之前,将dst_locp先释放。
如果源LOB定位器引用的是临时LOB,则目标也将设置为临时LOB。源和目的地在概念上是不同的临时LOB。在ACI_DEFAULT模式下,将对源临时LOB进行深度复制,并创建目标定位器以引用临时LOB的新深度副本。因此, ACILobIsEqual 在调用 ACILobLocatorAssign 之后返回FALSE。但是,在ACI_OBJECT模式下,进行了优化以最大程度地减少了深层副本的数量,因此,在通过任一LOB定位器进行任何修改之前,源定位器和目标定位器都指向同一LOB。因此, ACILobIsEqual 会在 ACILobLocatorAssign 之后直到第一次修改后返回TRUE。在这两种情况下,在 ACILobLocatorAssign 之后,对源或目标的任何更改都不会反映在另一个(即目标或源)LOB中。如果希望源和目标指向同一LOB,并希望您的更改反映在另一个LOB中,则必须使用等号来确保两个LOB定位器指针引用同一LOB定位器。