📜  LOB 定位符和 LOB 值

📅  最后修改于: 2021-09-08 15:41:21             🧑  作者: Mango

有两种方法可用于访问和修改 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;