DBMS_LOB 包

兼容ORACLE的DBMS_LOB包,用于对大对象(BLOB、CLOB)进行操作所提供的一系列方法的集合。

7.1 相关方法

  1. APPEND

追加一个源LOB数据到一个目标的LOB数据后面。

语法如下:

PROCEDURE APPEND(

  dest_lob IN OUT BLOB,

  src_lob IN BLOB

);

PROCEDURE APPEND(

  dest_lob IN OUT CLOB,

  src_lob IN CLOB

);

参数详解

  • dset_lob 目标临时大对象
  • src_lob 源临时大对象
  1. CLOSE

关闭一个之前打开的LOB或BFILE对象。

语法如下:

PROCEDURE CLOSE(

  LOB_LOC IN OUT BLOB

);

PROCEDURE CLOSE(

  LOB_LOC IN OUT CLOB,

);

PROCEDURE CLOSE(

  FILE_LOC IN OUT BFILE

);

参数详解

  • lob_locB LOB或CLOB类型的大对象
  • file_locB FILE类型对象
  1. COMPARE

比较2个LOB的数据,返回一个结果值。

语法如下:

FUNCTION COMPARE(

  lob_1 IN BLOB,

  lob_2 IN BLOB,

  amount IN BIGINT:= DBMS_LOB.LOBMAXSIZE,

  offset_1 IN INTEGER := 1,

  offset_2 IN INTEGER := 1

) RETURN INTEGER;

FUNCTION COMPARE(

  lob_1 IN CLOB,

  lob_2 IN CLOB,

  amount IN BIGINT:= DBMS_LOB.LOBMAXSIZE,

  offset_1 IN INTEGER := 1,

  offset_2 IN INTEGER := 1

) RETURN INTEGER;

FUNCTION COMPARE(

  lob_1 IN BFILE,

  lob_2 IN BFILE,

  amount IN BIGINT,

  offset_1 IN BIGINT:= 1,

  offset_2 IN BIGINT:= 1

) RETURN INTEGER;

参数详解

  • lob_1 第一个临时大对象
  • lob_2 第二个临时大对象
  • amount 需要比较的总的长度,BLOB为字节长度,CLOB为字符长度,默认为2147483647。LOBMAXSIZE是包内变量,为bigint类型,默认值9223372036854775807。
  • offset_1 第一个临时大对象的起始偏移
  • offset_2 第二个临时大对象的起始偏移

返回值

0:表示相等;

-1:表示lob_1<lob_2;

1:表示lob_1>lob_2

NULL:表示amount<1,amount>LOBMAXSIZE,offset_1<1,offset_2<1,offset_1>LOBMAXSIZE,offset_2>LOBMAXSIZE。

  1. COPY

拷贝指定长度的源LOB数据插入到目标LOB。

语法如下:

PROCEDURE COPY(

  dest_lob IN OUT BLOB,

  src_lob IN BLOB,

  amount IN INTEGER,

  dest_offset IN INTEGER := 1,

  src_offset IN INTEGER := 1

);

PROCEDURE COPY(

  dest_lob IN OUT CLOB,

  src_lob IN CLOB,

  amount IN INTEGER,

  dest_offset IN INTEGER := 1,

  src_offset IN INTEGER := 1

);

参数详解

  • dest_lob 目标临时大对象。
  • src_lob 源临时大对象。
  • amount 需要拷贝的字节或字符总数,BLOB为字节,CLOB为字符。
  • dest_offset 写入的起始偏移,BLOB为字节,CLOB为字符,如果写入偏移大于原字段的长度,将自动填充原长度到指定偏移间的数据,BLOB填充0,CLOB填充空格。
  • src_offset 读取的起始偏移,BLOB为字节,CLOB为字符。
  1. CREATETEMPORARY

创建一个临时的LOB对象,并存储在临时的表空间里。

语法如下:

PROCEDURE CREATETEMPORARY(

  lob_loc IN OUT BLOB,

  cache IN BOOLEAN,

  dur IN PLS_INTEGER := DBMS_LOB.SESSION

);

PROCEDURE CREATETEMPORARY(

  lob_loc IN OUT CLOB,

  cache IN BOOLEAN,

  dur IN PLS_INTEGER := 10

);

参数详解

  • lob_loc 目标临时大对象。
  • cache 只支持TRUE。
  • dur 存活周期,只支持DBMS_LOB.SESSION。
  1. ERASE

擦除指定偏移开始的指定长度LOB数据。BLOB用0,CLOB用空格代替原有数据。

语法如下:

PROCEDURE ERASE(

  lob_loc IN OUT BLOB,

  amount IN OUT INTEGER,

  offset IN INTEGER := 1

);

PROCEDURE ERASE(

  lob_loc IN OUT CLOB,

  amount IN OUT INTEGER,

  offset IN INTEGER := 1

);

参数详解

  • lob_loc 临时大对象。
  • amount 输入需要擦除数据的总数,BLOB为字节,CLOB为字符,输出实际擦除的总数,amount<=0将报错,amount大于原字段长度,将擦写所有数据。
  • offset 起始偏移。
  1. FILECLOSE

关闭一个之前打开的BFILE对象。

语法如下:

PROCEDURE FILECLOSE(

  FILE_LOC IN OUT BFILE

);

参数详解

  • file_loc BFILE类型对象。
  1. FILECLOSEALL

关闭所有之前打开的BFILE对象。

语法如下:

PROCEDURE FILECLOSEALL();
  1. FILEEXISTS

判断指定的BFILE是否存在。

语法如下:

FUNCTION FILEEXISTS(

  FILE_loc IN BFILE

)RETURN INTEGER;

参数详解

  • file_loc BFILE类型对象。

返回值

0:不存在

1:存在

  1. FILEGETNAME

获取BFILE对象的目录名和文件名。

语法如下:

PROCEDURE FILEGETNAME(

  FILE_loc IN BFILE,

  DIR_ALIAS OUT VARHCAR,

  FILEANME OUT VARCHAR

);

参数详解

  • file_loc BFILE类型对象。
  • dir_alias 目录对象名。
  • filename 文件名。
  1. FILEISOPEN

判断指定的BFILE是否已经打开。

语法如下:

FUNCITON FILEISOPEN(

  FILE_loc IN BFILE

) RETURN INTEGER;

参数详解

  • file_loc BFILE类型对象。

返回值

0:未打开

1:打开

  1. FILEOPEN

打开一个BFILE文件。

语法如下:

PROCEDURE FILEOPEN(

  FILE_loc IN OUT BFILE,

  OPEN_MODE IN INTEGER:=file_readonly

);

参数详解

  • file_loc BFILE类型对象。
  • open_mode 打开方式,仅支持FILE_READONLY。
  1. FRAGMENT_DELETE

删除指定偏移开始的指定长度的数据,不重写。

语法如下:

PROCEDURE FRAGMENT_DELETE(

  lob_loc IN OUT BLOB,

  amount IN INTEGER,

  offset IN INTEGER

);

PROCEDURE FRAGMENT_DELETE(

  lob_loc IN OUT CLOB,

  amount IN INTEGER,

  offset IN INTEGER

);

参数详解

  • lob_loc 临时大对象。
  • amount 需要删除数据的总数,BLOB为字节,CLOB为字符。
  • offset 起始偏移。BLOB为字节,CLOB为字符。

错误说明:

offset<1, offset超过原字段长, amout大于原字段长, amount +offset大于原字段长,返回错误。

  1. FRAGMENT_INSERT

插入指定长度的数据到LOB的指定偏移处,最大为32K。

语法如下:

PROCEDURE FRAGMENT_INSERT(

  lob_loc IN OUT BLOB,

  amount IN INTEGER,

  offset IN INTEGER,

  buffer IN VARBINARY

);

PROCEDURE FRAGMENT_INSERT(

  lob_loc IN OUT CLOB,

  amount IN INTEGER,

  offset IN INTEGER,

  buffer IN VARCHAR

);

参数详解

  • lob_loc 临时大对象。
  • amount 需要插入数据的总数,BLOB为字节,CLOB为字符,最大32K。
  • offset 写入起始的偏移,BLOB为字节,CLOB为字符。
  • buffer 待写入数据。

错误说明:

amount 大于buffer内数据长度, amount <= 0, offset <= 0,返回错误。

  1. FRAGMENT_MOVE

移动指定长度的数据从原始偏移到新偏移处。

语法如下:

PROCEDURE FRAGMENT_MOVE(

  lob_loc IN OUT BLOB,

  amount IN INTEGER,

  src_offset IN INTEGER,

  dest_offset IN INTEGER

);

PROCEDURE FRAGMENT_MOVE(

  lob_loc IN OUT CLOB,

  amount IN INTEGER,

  src_offset IN INTEGER,

  dest_offset IN INTEGER

);

参数详解

  • lob_loc 临时大对象。
  • amount 需要移动的数据总数,BLOB为字节,CLOB为字符。
  • src_offset 待移动数据的起始偏移。dest_offset 不能在(start_offset, start_offset +
    amount)上取值。
  • dest_offset 目标偏移。BLOB为字节,CLOB为字符。

错误说明:

src_offset或dest_offset 小于1,src_offset或dest_offset大于等于原字段长,amount小于0, amount + srcoffset大于等于原字段长度,返回错误。

  1. FRAGMENT_REPLACE

替换从指定偏移位置的指定长度的数据为新数据,长度不超过32K。

语法如下:

PROCEDURE FRAGMENT_REPLACE(

  lob_loc IN OUT BLOB,

  old_amount IN INTEGER,

  new_amount IN INTEGER,

  offset IN INTEGER,

  buffer IN VARBINARY

);

PROCEDURE FRAGMENT_REPLACE(

  lob_loc IN OUT CLOB,

  old_amount IN INTEGER,

  new_amount IN INTEGER,

  offset IN INTEGER,

  buffer IN VARCHAR2

);

参数详解

  • lob_loc 临时大对象。
  • old_amount 需要被替换数据的总数,BLOB为字节,CLOB为字符。
  • new_amount 替换数据的总数,BLOB为字节,CLOB为字符,最大32K。
  • offset 被替换数据的起始偏移。
  • buffer 需要替换的数据。

使用说明

offset 小于 1, old_amount 或new_amount小于0,old_amount或者new_amount大于32K,new_amount大于buffer内数据长度,将返回错误。

  1. FREETEMPORARY

释放临时的LOB操作符。

语法如下:

PROCEDURE FREETEMPORARY(lob_loc IN OUT BLOB);

PROCEDURE FREETEMPORARY(lob_loc IN OUT CLOB);

参数详解

  • lob_loc 需要被释放的临时大对象
  1. GETLENGTH

返回LOB数据的字符长度。

语法如下:

FUNCTION GETLENGTH(lob_loc IN BLOB) RETURN INTEGER;

FUNCTION GETLENGTH(lob_loc IN CLOB) RETURN INTEGER;

FUNCTION GETLENGTH(FILE_loc IN BFILE) RETURN INTEGER;

参数详解

  • lob_loc 临时大对象。
  • file_loc BFILE类型对象。

返回值

临时大对象的数据长度。BLOB为字节,CLOB为字符。

  1. GET_STORAGE_LIMIT

返回指定LOB的存储长度上限。

语法如下:

FUNCTION GET_STORAGE_LIMIT(lob_loc IN BLOB) RETURN INTEGER;

FUNCTION GET_STORAGE_LIMIT(lob_loc IN CLOB) RETURN INTEGER;

参数详解

  • lob_loc 大字段对象。

返回值

大字段存储限制大小。DM等同于最大长度。

  1. INSTR

返回从指定偏移开始的第nth个匹配对象的位置。

语法如下:

FUNCTION INSTR(

  lob_loc IN BLOB,

  pattern IN varbinary,

  offset IN INTEGER := 1,

  nth IN INTEGER := 1

) RETURN INTEGER;

FUNCTION INSTR(

  lob_loc IN CLOB,

  pattern IN VARCHAR2,

  offset IN INTEGER := 1,

  nth IN INTEGER := 1

) RETURN INTEGER;

参数详解

  • lob_loc 临时大对象。
  • pattern 匹配符。
  • offset 查找起始偏移,BLOB为字节,CLOB为字符。
  • nth 查找的第几个匹配符。

返回值

找到的匹配符出现的偏移。BLOB为字节,CLOB为字符,找不到匹配串返回0。

错误说明:

如果任何一个输入参数:为NULL或者非法则返回0,offset<1,offset>LOBMAXSIZE,nth<1,nth>LOBMAXSIZE时报错。

  1. ISOPEN

判断指定的LOB对象是否已经打开。

语法如下:

FUNCTION ISOPEN(LOB_loc IN BLOB) RETURN INTEGER;

FUNCTION ISOPEN(LOB_loc IN CLOB) RETURN INTEGER;

FUNCTION ISOPEN(FILE_loc IN BFILE) RETURN INTEGER;

参数详解

  • lob_lob LOB类型对象。
  • file_loc BFILE类型对象。

返回值

0:未打开

1:打开

  1. ISTEMPORARY

返回是否指定的LOB是临时操作符。

语法如下:

FUNCTION ISTEMPORARY(lob_loc IN BLOB) RETURN INTEGER;

FUNCTION ISTEMPORARY(lob_loc IN CLOB) RETURN INTEGER;

参数详解

  • lob_loc 大对象。

返回值

1:是临时大对象;

0:不是临时大对象;

NULL:输入参数为NULL或没有与表的大字段列进行关联的大字段对象。

  1. LOADBLOBFROMFILE

从BFILE对象加载数据到BLOB对象。

语法如下:

PROCEDURE LOADBLOBFROMFILE(

  DEST_LOB IN OUT BLOB,

  src_bfile in bfile,

  amount in integer,

  dest_offset in out integer,

  src_offset in out bigint

);

参数详解

  • dest_lob 目标BLOB对象。
  • src_bfile 源BFILE对象。
  • amount 要从BFILE对象加载到BLOB对象的字节数。
  • dest_offset 开始写入BLOB对象的偏移。
  • src_offset 从BFILE对象开始读取的偏移。
  1. LOADCLOBFROMFILE

从BFILE对象加载数据到CLOB对象。

语法如下:

PROCEDURE LOADCLOBFROMFILE(

  DEST_LOB			IN OUT		CLOB,
  
  SRC_BFILE			IN			BFILE,
  
  AMOUNT			IN			BIGINT,
  
  DEST_OFFSET		IN OUT		BIGINT,
  
  SRC_OFFSET		IN OUT		BIGINT,
  
  BFILE_CSID     	IN     		NUMBER,
  
  LANG_CONTEXT		IN OUT 		INTEGER,
  
  WARNING      		OUT  		INTEGER

);

参数详解

  • DEST_LOB 输入:目标CLOB对象。输出:结果CLOB对象。
  • SRC_BFILE 源BFILE对象。
  • AMOUNT 要从BFILE对象加载到cLOB对象的字节数。
  • DEST_OFFSET 输入:开始写入CLOB对象的字符偏移。输出:结束写入的字符偏移。
  • SRC_OFFSET 输入:从BFILE对象开始读取的字节偏移,用户需确保此偏移位置为某字符的第一个字节。输出:结束读取的字节偏移。
  • BFILE_CSID 源BFILE的编码集。

支持的编码集:

编码集名称 编号 说明
DEFAULT_CSID 0 缺省值,编码与数据库一致
US7ASCII 1 ASCII,保持策略与缺省值一致
CL8KOI8R 196 KOI8-R,俄文编码
JA16EUC 830 EUC-JP,日文编码
ZHS16CGB231280 850 GB2312,中文编码
ZHS16GBK 852 GBK,中文编码
ZHS32GB18030 854 GB18030,中文编码
ZHT16BIG5 865 BIG5,繁体中文编码
UTF8 871 UTF8,未做区分
支持带BOM({0XEF,0XBB,0XBF})或不带BOM输入。带BOM时去掉BOM,再进行编码转换;不带BOM时直接进行编码转换。编码转换的规则与其他编码相同。若只输入了BOM,得到的CLOB为输入的CLOB。
AL32UTF8 873
UTF16 1000 UTF16,自适应大小端
支持带BOM({0XFE,0XFF})或不带BOM输入。基本逻辑同UTF8,但会判断输入的大小端标识,并根据编译器大小端进行大小端转换,没有读到大小端标识时默认为小端。
AL16UTF16 2000 UTF16,大端
支持带BOM({0XFE,0XFF})或不带BOM输入。基本逻辑同UTF8,但会根据编译器的大小端进行大小端转换。
AL16UTF16LE 2002 UTF16,小端
支持带BOM({0XFF,0XFE})或不带BOM输入。基本逻辑同UTF8,但会根据编译器的大小端进行大小端转换。
  • LANG_CONTEXT,WARNING

这两个参数暂时不支持,调用时指定任意值即可。

错误说明:

输入参数为NULL,返回错误。

AMOUNT、SRC_OFFSET或DEST_OFFSET小于1或大于LOBMAXSIZE,返回错误。

SRC_OFFSET大于文件长度、DEST_OFFSET+AMOUNT-1大于LOB最大长度、AMOUNT+SRC_OFFSET-1超过文件长度,返回错误。

对于EUC_KR编码的数据库,BFIE_CSID仅支持缺省值,若为其他值,返回错误。

AMOUNT+SRC_OFFSET 不是字符边界时,若没有读到完整的字符,返回错误。

  1. LOADFROMFILE

从BFILE对象加载数据到BLOB对象。

语法如下:

PROCEDURE LOADFROMFILE(

  DEST_LOB IN OUT BLOB,

  src_file in bfile,

  amount in integer,

  dest_offset in out integer:=1,

  src_offset in out bigint:=1

);

参数详解

  • dest_lob 目标BLOB对象。
  • src_file 源BFILE对象。
  • amount 要从BFILE对象加载到BLOB对象的字节数。
  • dest_offset 开始写入BLOB对象的偏移。
  • src_offset 从BFILE对象开始读取的偏移。
  1. OPEN

打开一个LOB对象。

语法如下:

PROCEDURE OPEN(

  LOB_LOC IN OUT BLOB,

  OPEN_MODE IN INTEGER

);

PROCEDURE OPEN(

  LOB_loc IN OUT CLOB,

  OPEN_MODE IN INTEGER

);

PROCEDURE OPEN(

  FILE_loc IN OUT BFILE,

  OPEN_MODE IN INTEGER:=file_readonly

);

参数详解

  • lob_loc LOB对象。
  • file_loc BFILE类型对象。
  • open_mode 打开方式,BFILE对象仅支持FILE_READONLY。
  1. READ

读取指定偏移开始的指定长度数据到buffer中。

语法如下:

PROCEDURE READ(

  lob_loc IN BLOB,

  amount IN OUT INTEGER,

  offset IN INTEGER,

  buffer OUT VARBINARY

);

PROCEDURE READ(

  lob_loc IN CLOB,

  amount IN OUT INTEGER,

  offset IN INTEGER,

  buffer OUT VARCHAR2

);

PROCEDURE READ(

  file_loc IN BFILE,

  amount IN OUT INTEGER,

  offset IN bigint,

  buffer OUT VARbinary

);

参数详解

  • lob_loc 临时大对象。
  • file_loc BFILE对象。
  • amount 输入需要读取的数据总数,BLOB为字节,CLOB为字符,输出为实际读取的总数。
  • offset 读取数据的偏移,BLOB为字节,CLOB为字符。
  • buffer 存储数据的缓冲区。

错误说明:

如果offset + amount大于原字段长度,将会自动截断,返回比要求长度少的数据。

amount小于等于0,返回错误。

offset为null,小于等于0,超过原字段长度,返回错误。

  1. SUBSTR

获取指定偏移开始的指定长度的子串。

语法如下:

FUNCTION SUBSTR(

   lob_loc IN BLOB,

   amount IN INTEGER := 32767,

   offset IN INTEGER := 1

) RETURN VARBINARY;

FUNCTION SUBSTR(

   lob_loc IN CLOB,

   amount IN INTEGER := 32767,

   offset IN INTEGER := 1

) RETURN VARCHAR2;

FUNCTION SUBSTR(

   file_loc IN bfile,

  amount IN INTEGER := 32767,

  offset IN bigint := 1

) RETURN VARBINARY;

参数详解

  • lob_loc 临时大对象。
  • file_loc BFILE对象。
  • amount 读取的数据长度,BLOB为字节,CLOB为字符,上限为32767,实际获取为大对象长度与amount的小值。
  • offset 读取数据的起始偏移。

返回值

返回指定偏移开始的指定长度的子串。若输入的amount或offset参数非法,返回NULL。

  1. TRIM/TRIM_LOB

截断LOB数据到指定的长度。

语法如下:

PROCEDURE TRIM(

   lob_loc IN OUT BLOB,

   new_len IN INTEGER

);

PROCEDURE TRIM(

  lob_loc IN OUT CLOB,

  new_len IN INTEGER

);

PROCEDURE TRIM_LOB(

  lob_loc IN OUT BLOB,

  new_len IN INTEGER

);

PROCEDURE TRIM_LOB(

  lob_loc IN OUT CLOB,

  new_len IN INTEGER

);

参数详解

  • lob_loc 临时大对象。
  • new_len 截断到的新长度,BLOB为字节,CLOB为字符。
  1. WRITEAPPEND

追加指定长度字符的数据到LOB对象的末尾。

语法如下:

PROCEDURE WRITEAPPEND(

  lob_loc IN OUT BLOB,

  amount IN INTEGER,

  buffer IN VARBINARY

);

PROCEDURE WRITEAPPEND(

  lob_loc IN OUT CLOB,

  amount IN INTEGER,

  buffer IN VARCHAR2

);

参数详解

  • lob_loc 临时大对象。
  • amount 追加数据的总数,BLOB为字节,CLOB为字符。
  • buffer 待追加的数据。

错误说明:

amount小于等于0或null或者超过buffer内数据长度,返回错误。

  1. WRITE

写入指定长度字符的数据到LOB对象,从LOB对象的指定绝对偏移开始。如果指定的位置有数据,则新写入的会覆盖原来的数据。

语法如下:

PROCEDURE WRITE (

  lob_loc IN OUT BLOB,

  amount IN INTEGER,

  OFFSET IN INTEGER,

  buffer IN VARBINARY

);

PROCEDURE WRITE (

  lob_loc IN OUT CLOB,

  amount IN INTEGER,

  OFFSET IN INTEGER,

  buffer IN VARCHAR2

);

参数详解

  • lob_loc 临时大对象。
  • amount 写入数据的总数,BLOB为字节,CLOB为字符。
  • offset 偏移量,起始为1。BLOB为字节,CLOB为字符。
  • buffer 待写入的数据。

错误说明:

amount小于等于0或null或者超过buffer内数据长度,返回错误。

  1. CONVERTTOBLOB

将指定的lob的指定部分按一定的编码格式完成blob和clob的互相转换。

语法如下:

PROCEDURE CONVERTTOBLOB(

   dest_lob IN OUT BLOB,

   src_clob IN CLOB,

   amount IN INTEGER,

   dest_offset IN OUT INTEGER,

   src_offset IN OUT INTEGER,

   blob_csid IN NUMBER,

   lang_context IN OUT INTEGER,

   warning OUT INTEGER

);

PROCEDURE CONVERTTOCLOB(

   DEST_LOB IN OUT CLOB,

   SRC_BLOB IN BLOB,

   AMOUNT IN INTEGER,

   DEST_OFFSET IN OUT INTEGER,

   SRC_OFFSET IN OUT INTEGER,

   BLOB_CSID IN NUMBER,

   LANG_CONTEXT IN OUT INTEGER,

   WARNING OUT INTEGER

);

参数详解

  • DEST_LOB 输入输出参数,转换的结果将存入到这个大字段中,如果这个大字段原来已经有数据,新转换出的数据会根据指定的目标偏移覆盖原数据。
  • SRC_LOB 待转换的数据。
  • AMOUNT 转换的数据总数,BLOB为字节,CLOB为字符。
  • DEST_OFFSET 完成转换的数据向目的大字段存放时的偏移。
  • SRC_OFFSET 源数据开始转换的偏移。
  • BLOB_CSID,LANG_CONTEXT,WARNING

这三个参数暂时不支持,调用时指定任意值即可,CLOB转BLOB时,最后BLOB编码格式和CLOB的存入格式相同。

错误说明:

如果AMOUNT大于SRC_LOB的长度、AMOUNT小于0、 DEST_OFFSET+AMOUNT大于大字段限制最大长度(DBMS_LOB.LOBMAXSIZE),返回错误。

7.2 举例说明

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。

SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_LOB');

例将输入的BLOB类型数据转化为CLOB类型。

CREATE OR REPLACE FUNCTION BLOBTOCLOB ( BLOB_IN IN BLOB)

   RETURN CLOB

AS

   V_CLOB CLOB;

   V_VARCHAR VARCHAR2(32767);

   V_START PLS_INTEGER := 1;

   V_BUFFER PLS_INTEGER := 32767;

BEGIN

   DBMS_LOB.CREATETEMPORARY(V_CLOB, TRUE);

   FOR I IN 1 .. CEIL(DBMS_LOB.GETLENGTH(BLOB_IN) / V_BUFFER) + 1

   LOOP

         V_VARCHAR := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(BLOB_IN,
   
V_BUFFER,V_START));


        DBMS_LOB.WRITEAPPEND(V_CLOB, LENGTH(V_VARCHAR), V_VARCHAR);

         PRINT V_CLOB;

        V_START := V_START + V_BUFFER;

        END LOOP;

        RETURN V_CLOB;

END BLOBTOCLOB;

/

调用函数:

call BLOBTOCLOB('B4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE');

查看结果:

达梦数据库有限公司
微信扫码
分享文档
扫一扫
联系客服