SUBSTR 函数用于返回 LOB 的 amount 字节或字符(从以 LOB 开头的绝对偏移量开始计算)。

对于固定宽度为 n 字节的 CLOB,如果 SUBSTR 的输入量大于(32767 / n),则 SUBSTR 返回长度为(32767 / n)或 CLOB 长度(以较小者为准)的字符缓冲区。 对于宽度为可变字符集中的 CLOBn 是用于 CLOB 中字符的最大字节宽度。

语法

  1. DBMS_LOB.SUBSTR (
  2. lob_loc IN BLOB,
  3. amount IN INTEGER := 32767,
  4. offset IN INTEGER := 1)
  5. RETURN RAW;
  6. DBMS_LOB.SUBSTR (
  7. lob_loc IN CLOB CHARACTER SET ANY_CS,
  8. amount IN INTEGER := 32767,
  9. offset IN INTEGER := 1)
  10. RETURN VARCHAR2;

参数解释

参数

解释

lob_loc

要读取的 LOB 定位器。详细信息请参见 DBMS_LOB 使用说明

amount

要读取的字节数(对于 BLOB)或字符数(对于CLOB)。

offset

开始读取 LOB 的字节数(对于 BLOB)或字符数(对于 CLOB)的偏移量(初始值为 1)。

返回值

返回值描述

RAW

参数中包含 BLOB 的函数重载。

VARCHAR2

CLOB 版本。

NULL

可能为以下几种情况:

  • 任意输入参数为 NULL

  • amount 小于 1

  • amount 大于 32767 字节 (或等价字符)

  • offset 小于 1

  • offset 大于 LOBMAXSIZE

使用说明

  • VARCHAR2 缓冲区的形式必须与 CLOB 参数的形式匹配。也就是说,如果输入 LOB 参数的类型为 CLOB,则缓冲区必须包含 CHAR 数据。

  • 从客户端调用 DBMS_LOB.SUBSTR 时,返回的缓冲区包含客户端字符集中的数据。在将缓冲区返回给用户之前,数据库会将 LOB 值从服务器的字符集转换为客户端的字符集。

  • DBMS_LOB.SUBSTR 将基于 LOB 中存储的字符返回 8191 个或更多字符。如果由于字符字节大小超出可用缓冲区而没有返回所有字符,则用户应使用新的偏移量调用 DBMS_LOB.SUBSTR 以读取其余字符,或者循环调用子程序,直到提取完所有数据。

  • 如有必要,SUBSTR 会在读取前获取 LOB。

  • 如果 LOB 是 DBFS 链接,则从 DBFS 流转数据(如果可能),否则将引发异常。