有两种方法可用于访问和修改 LOB 值:
- 使用 LOB 的数据接口
- 使用 LOB 定位器访问/修改 LOB 值
使用 LOB 的数据接口
您可以使用 LOB 的数据接口在 C 应用程序中对 BLOB 和 CLOB 列执行绑定和定义操作。它使您能够在不使用 LOB 定位器的情况下插入或选择出 LOB 列中的数据,如下所示:
- 借助与 LOB 列关联的绑定变量将字符数据插入 CLOB,或将 RAW 数据插入 BLOB。
- 定义操作用于在您的应用程序中定义一个输出缓冲区,该缓冲区保存从 BLOB 中选择的 RAW 数据,或从 CLOB 中选择的字符数据。
使用 LOB 定位器访问/修改 LOB 值
存储在数据库中的 LOB 实例的值可以通过 LOB 定位器访问,这是对 LOB 值位置的引用。数据库表仅在 CLOB、BLOB、NCLOB 和 BFILE 列中存储定位符。以下是有关 LOB 定位符和值的要点:
- 要操作或访问 LOB 值,您可以将 LOB 定位符传递给各种 LOB API。
- LOB 定位器可以轻松地分配或重新分配给相同类型的任何 LOB 实例。
- LOB 的临时或持久特性与定位器无关。临时或持久的特性仅适用于 LOB 实例。
LOB 定位器和 BFILE 定位器
一方面,LOB 类型 CLOB、NCLOB 和 BLOB 的定位器的语义与另一方面 BFILE 类型的定位器的语义几乎没有区别:
- 对于 LOB 类型 CLOB、NCLOB 和 BLOB,LOB 列存储 LOB 值的定位符。每个 LOB 实例都有自己独特的 LOB 值副本以及独特的 LOB 定位符。
- 对于初始化的 BFILE 列,该行将定位器存储到保存 BFILE 值的外部操作系统文件中。给定行中的每个 BFILE 实例都有自己独特的定位器;但是,两个不同的行可以包含指向同一个操作系统文件的 BFILE 定位器。
无论 LOB 的值存储在何处,定位器都存储在任何已初始化 LOB 列的表行中。每当使用术语定位器而没有识别前缀术语时,它同时指代 LOB 定位器和 BFILE 定位器。此外,无论何时从表中选择 LOB,返回的 LOB 始终是临时 LOB。有关使用临时 LOB 定位器的更多信息,请参阅“从 SQL 函数返回的 LOB”。
表 print_media Oracle 数据库示例模式 PM 的表print_media
,用作许多示例并定义为:
CREATE TABLE print_media
( product_id NUMBER(6),
ad_id NUMBER(6),
ad_composite BLOB,
ad_sourcetext CLOB,
ad_finaltext CLOB,
ad_fltextn NCLOB,
ad_textdocs_ntab textdoc_tab,
ad_photo BLOB,
ad_graphic BFILE,
ad_header adheader_typ
)
NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab;