DBMS_LOB 系统包以读取和修改 BLOBCLOB,提供了大部分 LOB 操作。

DBMS_LOB 安全模型

此系统包必须在 SYS 下创建。但是此系统包提供的操作在当前调用用户下执行,而不在 SYS 下执行。

从匿名 PL 块调用的任何 DBMS_LOB 子程序都要使用当前用户权限来执行。从存储子程序调用的任何 DBMS_LOB 子程序都要使用存储子程序所有者的权限来执行。

在创建子程序时,用户可以设置 AUTHID 来指示需要定义者的权限还是调用者的权限。如下例所示:

  1. CREATE PROCEDURE proc1 AUTHID DEFINER ...

或者

  1. CREATE PROCEDURE proc1 AUTHID CURRENT_USER ...

DBMS_LOB 使用的数据类型

数据类型描述

BLOB

源或目标二进制 LOB

RAW

源或目标 RAW 缓冲区(与 BLOB 一起使用)。

CLOB

源或目标字符 LOB

VARCHAR2

源或目标字符缓冲区(与 CLOB 一起使用)。

INTEGER

指定缓冲区或 LOB 的大小,LOB 的偏移量或要访问的数量。

DBMS_LOB 使用说明

所有 DBMS_LOB 子程序都基于 LOB 定位器进行工作。为了成功完成 DBMS_LOB 子程序操作,必须提供一个输入定位器,该输入定位器代表数据库表空间或外部文件系统中已经存在的 LOB

所有 DBMS_LOB API 现在都将支持对远程 LOB 定位器的操作。所有使用两个定位器的 API 必须将两个 LOB 并置在一个数据库中。

DBMS_LOB 子程序概览

下表列出了 OceanBase 数据库当前版本所支持的 DBMS_LOB 子程序和简要描述。

子程序

描述

APPEND

将源 LOB 的内容附加到目标 LOB

CLOSE

关闭先前打开的内部或外部 LOB

COPY

将源内部 LOB 的全部或一部分复制到目标内部 LOB

CREATETEMPORARY

在默认的临时表空间中创建一个临时 BLOBCLOB 及对应的索引。

FREETEMPORARY

释放默认的临时表空间中的临时 BLOBCLOB

ERASE

擦除全部或部分 LOB

GETLENGTH

获取 LOB 值的长度。

ISOPEN

检查是否已经使用输入定位器打开了 LOB

INSTR

返回在 LOB 模式中第 n 次发生匹配位置。

OPEN

在指示的模式下打开 LOB(内部、外部或临时)。

READ

从指定偏移量开始读取 LOB 的数据。

SUBSTR

从指定的偏移量开始返回部分 LOB 值。

TRIM

LOB 值修剪为指定的较短长度。

WRITE

从指定的偏移量开始将数据写入 LOB

WRITEAPPEND

将缓冲区写入 LOB 的末尾。