DBMS_LOB包用于操作大对象。

表 1. DBMS_LOB函数/存储过程
函数/存储过程 类型 返回类型 描述
APPEND(dest_lob IN OUT,src_lob) 存储过程 N/A 将一个大对象附加在另外一个大对象上。
COMPARE(lob_1, lob_2 [, amount[, offset_1 [, offset_2 ]]]) 函数 INTEGER 在给定的长度和偏移范围内,对两个大对象进行逐字节的精确比较。
CONVERTOBLOB(dest_lob IN OUT,src_clob, amount, dest_offset IN OUT, src_offset IN OUT,blob_csid, lang_context IN OUT,warning OUT) 存储过程 N/A 将字符类型数据的大对象,转换成二进制类型数据的大对象。
CONVERTTOCLOB(dest_lob IN OUT,src_blob, amount, dest_offset IN OUT, src_offset IN OUT,blob_csid, lang_context IN OUT,warning OUT) 存储过程 N/A 将二进制数据的大对象转换成字符型数据的大对象。
COPY(dest_lob IN OUT, src_lob,amount [, dest_offset [,src_offset ]]) 存储过程 N/A 将一个大对象复制为另一个大对象。
ERASE(lob_loc IN OUT, amount IN OUT [, offset ]) 存储过程 N/A 删除一个大对象的部分数据。
GET_STORAGE_LIMIT(lob_loc) 函数 INTEGER 大对象允许使用的最大存储空间。
GETLENGTH(lob_loc) 函数 INTEGER 获取大对象的长度。
INSTR(lob_loc, pattern [,offset [, nth ]]) 函数 INTEGER 返回在大对象中指定模式第n次出现时的位置。
READ(lob_loc, amount IN OUT,offset, buffer OUT) 存储过程 N/A 从大对象中读取部分内容。
SUBSTR(lob_loc [, amount [,offset ]]) 函数 RAW,VARCHAR2 返回大对象的部分内容。
TRIM(lob_loc IN OUT, newlen) 存储过程 N/A 将一个大对象截取到指定长度。
WRITE(lob_loc IN OUT, amount,offset, buffer) 存储过程 N/A 将数据写入一个大对象中。
WRITEAPPEND(lob_loc IN OUT,amount, buffer) 存储过程 N/A 将数据添加到一个大对象的末尾。
下表列出的是在DBMS_LOB包中使用的公共变量。
表 2. DBMS_LOB公共变量
公共变量 数据类型 变量值
compress off INTEGER 0
compress_on INTEGER 1
deduplicate_off INTEGER 0
deduplicate_on INTEGER 4
default_csid INTEGER 0
default_lang_ctx INTEGER 0
encrypt_off INTEGER 0
encrypt_on INTEGER 1
file_readonly INTEGER 0
lobmaxsize INTEGER 1073741823
lob_readonly INTEGER 0
lob_readwrite INTEGER 1
no_warning INTEGER 0
opt_compress INTEGER 1
opt_deduplicate INTEGER 4
opt_encrypt INTEGER 2
warn_inconvertible_char INTEGER 1
说明 在以下章节中,如果大对象是BLOB类型,长度和偏移量是以字节为单位。如果大对象是CLOB类型,长度和偏移量是以字符为单位。

APPEND

存储过程APPEND用于将一个大对象附加在另外一个大对象上。这两个大对象必须属于同一类型。
APPEND(dest_lob IN OUT { BLOB | CLOB }, src_lob { BLOB | CLOB })
表 3. 参数说明
参数名称 描述
dest lob 目标大对象的位置。它必须和参数src_lob代表的大对象的数据类型一致。
src lob 源大对象的位置。它必须和参数dest_lob代表的大对象的数据类型一致。

COMPARE

函数COMPARE在给定的长度和偏移范围内,对两个大对象进行逐字节的精确比较。进行比较操作的两个大对象必须是相同的数据类型。
status INTEGER COMPARE(lob_1 { BLOB | CLOB },
  lob_2 { BLOB | CLOB }
  [, amount INTEGER [, offset_1 INTEGER [, offset_2 INTEGER ]]])
表 4. 参数说明
参数名称 描述
lob_1 在比较操作中第一个大对象的位置,和参数lob_2代表的大对象的数据类型必须相同。
lob_2 在比较操作中第二个大对象的位置,和参数lob_1代表的大对象的数据类型必须相同。
amount
  • 如果大对象是BLOB类型,则是对两个大对象各自的总字节数进行比较。
  • 如果大对象是CLOB类型,则是对两个大对象各自总的字符数进行比较。
参数的默认值是一个大对象的最大容量。
offset 1 在比较操作中,第一个大对象中的起始位置。默认值为1。
offset_2 在比较操作中,第二个大对象中的起始位置。默认值为1。
status
  • 如果在指定的长度和偏移范围内,两个大对象完全相等,这个参数返回0。
  • 如果在指定的长度和偏移范围内,两个大对象不相等,则返回非零值。
  • 如果参数amountoffset_1或者offset_2小于0,则返回空值。

CONVERTTOBLOB

存储过程CONVERTTOBLOB用于将字符类型数据的大对象转换成二进制类型数据的大对象。
CONVERTTOBLOB(dest_lob IN OUT BLOB, src_clob CLOB,
  amount INTEGER, dest_offset IN OUT INTEGER,
  src_offset IN OUT INTEGER, blob_csid NUMBER,
  lang_context IN OUT INTEGER, warning OUT INTEGER)
表 5. 参数说明
参数名称 描述
dest lob 表示一个BLOB类型的大对象。
src clob 表示一个CLOB类型的大对象。
amount 表示在参数src_clob所指定的大对象中要转换的字符数量。
dest_offset IN BLOB类型的目标大对象中字节的位置。
dest_offset OUT 写操作完成后,在BLOB类型大对象中字节的位置。
src offset IN 转换操作中, CLOB类型大对象开始的位置。
src_offset OUT 在转换操作完成后,CLOB类型大对象中字符的位置。
blob csid BLOB类型大对象中的字符集ID。
langcontext IN 转换操作中使用的语言环境。通常使用默认值0。
langcontext OUT 转换后的语言环境。
warning
  • 如果转换成功,则返回0。
  • 如果遇到不可转换的字符,则返回1。

CONVERTTOCLOB

存储过程CONVERTTOCLOB用于将二进制数据的大对象转换成字符型数据的大对象。
CONVERTTOCLOB(dest_lob IN OUT CLOB, src_blob BLOB,
  amount INTEGER, dest_offset IN OUT INTEGER,
  src_offset IN OUT INTEGER, blob_csid NUMBER,
  lang_context IN OUT INTEGER, warning OUT INTEGER)
表 6. 参数说明
参数名称 描述
dest lob CLOB类型大对象的位置。
src_blob BLOB类型大对象的位置。
amount 由参数src_blob指定的大对象中要进行转换的字节数量。
dest_offset IN 在CLOB类型大对象中的位置。
dest_offset OUT 写操作完成后在CLOB类型大对象中字符的位置。
src offset IN 进行转换操作时BLOB类型大对象中字节的开始位置。
src_offset OUT 转换操作完成后,在BLOB类型大对象中字节的位置。
blob csid CLOB类型大对象的字符集ID。
CLOB. langcontext IN 转换操作时使用语言环境。通常使用默认值0。
langcontext OUT 转换操作完成后的语言环境。
warning
  • 如果转换成功,返回0。
  • 如果遇到不可转换的字符,则返回1。

COPY

存储过程COPY用于将一个大对象复制为另一个大对象。源和目标大对象必须具有相同的数据类型。
COPY(dest_lob IN OUT { BLOB | CLOB }, src_lob 
{ BLOB | CLOB },
  amount INTEGER
  [, dest_offset INTEGER [, src_offset INTEGER ]])
表 7. 参数说明
参数名称 描述
dest lob 在大对象复制操作中目标大对象的位置。它和参数src_lob代表的大对象要具有相同的数据类型。
src lob 在大对象复制操作中的源大对象的位置。它和参数dest_lob代表大对象的数据类型必须相同。
amount 由参数src_lob指定的在大对象中拷贝的字节或字符数。
dest offset 目标大对象中的位置。写入源大对象内容操作时的开始位置。默认值为1。
src offset 源大对象中的位置。将源大对象拷贝到目标大对象操作时的开始位置。默认值为1。

ERASE

存储过程ERASE用于删除一个大对象的部分数据。即分别用0字节过滤器替代BLOB类型大对象的部分内容,用空格替代CLOB类型大对象的部分内容。操作结束后大对象的实际大小不会改变。
ERASE(lob_loc IN OUT { BLOB | CLOB }, amount IN OUT INTEGER
  [, offset INTEGER ])
表 8. 参数说明
参数名称 描述
lob loc 待删除的大对象。
amount IN 大对象中待删除的字节或字符数。
amount OUT 实际被清除的字节或字符数量。如果在参数amount指定的字节或字符数被清除前已经达到了大对象的末尾,那么这个值会比输入值小。
offset 对大对象进行清除操作时开始的位置。默认值为1。

GET_STORAGE_LIMIT

函数GET_STORAGE_LIMIT返回大对象允许使用的最大存储空间。
size INTEGER GET_STORAGE_LIMIT(lob_loc BLOB)

size INTEGER GET_STORAGE_LIMIT(lob_loc CLOB)
表 9. 参数说明
参数名称 描述
size 在数据库中一个大对象可允许使用的最大存储空间。
lob loc 这个参数只是为了与Oracle兼容而提供,在实际运行中可以忽略。

GETLENGTH

函数GETLENGTH返回一个大对象的长度。
amount INTEGER GETLENGTH(lob_loc BLOB)

amount INTEGER GETLENGTH(lob_loc CLOB)
表 10. 参数说明
参数名称 描述
lob loc 大对象名称。
amount 大对象的长度。
  • BLOB类型大对象,以字节为单位。
  • CLOB类型大对象,以字符为单位。

INSTR

函数INSTR返回在大对象中指定模式第n次出现时的位置。
position INTEGER INSTR(lob_loc { BLOB | CLOB },
  pattern { RAW | VARCHAR2 } [, offset INTEGER [, nth INTEGER ]])
表 11. 参数说明
参数名称 描述
lob loc 大对象的名称。
pattern 以字节为单位或以字符为单位的模式,用于匹配大对象中的内容。
  • 如果lob_loc代表BLOB类型大对象,那么模式必须是RAW类型。
  • 如果lob_loc代表CLOB类型大对象,那么模式必须是VARCHAR2类型。
offset 参数lob_loc代表的大对象中搜索模式时的开始位置。第一个字节或字符是位置1。默认值为1。
nth 由给定的偏移量指定起始位置,开始搜索指定模式第n次出现时的位置。默认值为1。
position 在大对象中的第n次出现模式的位置,搜索的起始位置由参数offset指定。

READ

存储过程READ用于从大对象中读取部分内容,然后把这部分内容放到到缓冲区中。
READ(lob_loc { BLOB | CLOB }, amount IN OUT BINARY_INTEGER,
  offset INTEGER, buffer OUT { RAW | VARCHAR2 })
表 12. 参数说明
参数名称 描述
lob loc 进行读操作的大对象。
amount IN 读取的字节或字符的总数。
amount OUT 实际读取的字节或字符的总数。如果这里没有更多数据可供读取,那么参数amount返回0,并且产生异常DATA_NOT_FOUND
offset 在大对象中开始进行读操作时的位置。第一个字节或字符的位置是1。
buffer 接收大对象内容的变量。
  • 如果参数lob_loc是BLOB类型大对象,那么参数buffer必须是RAW类型。
  • 如果参数lob_loc是CLOB类型大对象,那么参数buffer则必须是VARCHAR2类型。

SUBSTR

函数SUBSTR用于返回大对象的部分内容。
data { RAW | VARCHAR2 } SUBSTR(lob_loc { BLOB | CLOB }
  [, amount INTEGER [, offset INTEGER ]])
表 13. 参数说明
参数名称 描述
lob loc 用于指示进行读操作的大对象。
amount 所返回的字节或字符的数量。默认值为32,767。
offset 开始返回数据时大对象中的位置。第一个字节或字符的位置是1。默认值为1。
data 用于返回部分被读取的大对象内容。
  • 如果参数lob_loc是BLOB类型大对象,那么data必须是RAW类型。
  • 如果参数lob_loc是CLOB类型大对象,那么data必须是VARCHAR2类型。

TRIM

存储过程TRIM用于将一个大对象截断到指定长度。
TRIM(lob_loc IN OUT { BLOB | CLOB }, newlen INTEGER)
表 14. 参数说明
参数名称 描述
lob loc 指示被截断长度的大对象。
newlen 被截断长度的大对象的字节或字符总数。

WRITE

存储过程WRITE用于将数据写入一个大对象中。从指定的偏移量开始,在指定长度范围内的数据都会被缓冲区中的数据覆盖。
WRITE(lob_loc IN OUT { BLOB | CLOB },
  amount BINARY_INTEGER,
  offset INTEGER, buffer { RAW | VARCHAR2 })
表 15. 参数说明
参数名称 描述
lob loc 用于指示进行写操作的大对象。
amount 在缓冲区中字节或字符的数量,这些字节或字符将被写到大对象中。
offset 大对象中的偏移量。
buffer 用于返回部分被读取的大对象内容。
  • 如果参数lob_loc是BLOB类型大对象,那么参数buffer必须是RAW类型。
  • 如果参数lob_loc是CLOB类型大对象,那么参数buffer必须是VARCHAR2类型。

WRITEAPPEND

存储过程WRITEAPPEND用于将数据添加到一个大对象的末尾。
WRITEAPPEND(lob_loc IN OUT { BLOB | CLOB },
  amount BINARY_INTEGER, buffer { RAW | VARCHAR2 })
表 16. 参数说明
参数名称 描述
lob loc 待添加数据的大对象。
amount 缓冲区中字节或字符的数量,这些字节或字符将添加到大对象的尾部。
buffer 用于返回部分被读取的大对象内容。
  • 如果参数lob_loc是BLOB类型大对象,那么参数buffer必须是RAW类型。
  • 如果参数lob_loc是CLOB类型大对象,那么参数buffer必须是VARCHAR2类型。