DBMS_LOB包

神通数据库的DBMS_LOB系统包提供一系列函数和过程,用以操作LOB类型的数据

LOB类型 参见 大对象类型

子程序 说明 过程/函数
APPEND 向目标LOB尾部追加数据 过程
CLOSE 关闭一个已经打开的LOB 过程
COMPARE 比较两个LOB大小 函数
CONVERTTOBLOB 将源数据转换成BLOB 过程
CONVERTTOCLOB 将源数据转换成CLOB 过程
COPY 将LOB拷贝到另一个LOB 过程
CREATETEMPORARY 创建一个临时LOB 过程
ERASE 删除LOB中的全部数据 过程
FILECLOSE 关闭文件 过程
FILECLOSEALL 关闭全部文件 过程
FILEEXISTS 查看一个文件是否存在 函数
FILEGETNAME 获得指定文件的名字 过程
FILEISOPEN 文件是否打开 函数
FILEOPEN 打开文件 过程
FREETEMPORARY 释放临时LOB空间 过程
GETCHUNKSIZE 获得CHUNK大小 函数
GETLENGTH 获得LOB长度 函数
INSTR 查看数据是否存在于指定LOB中 函数
ISOPEN 查看一个LOB是否打开 函数
ISTEMPORARY 查看一个LOB是否为临时LOB 函数
LOADBLOBFROMFILE 从文件读取BLOB数据 过程
LOADCLOBFROMFILE 从文件读取CLOB数据 过程
LOADFROMFILE 从文件读取LOB数据 过程
OPEN 打开一个LOB 过程
READ 读取LOB数据 过程
SUBSTR 获得指定LOB的部分数据 函数
TRIM 减少指定LOB的大小 过程
WRITE 向LOB写数据 过程
WRITEAPPEND 向指定LOB尾部追加数据 过程

以下介绍了各种函数和过程的语法、参数和说明。

示例

drop table lob_tab cascade;

---创建表
create table LOB_TAB  
   (  
   ID        NUMBER,  
   CLOB_COL  CLOB,  
   BLOB_COL  BLOB,  
   BFILE_COL BFILE  
   );  
---创建文件路径        
create or replace directory OSCAR_DIR as 'E:\oscar_dir';  


create or replace procedure my_test() as 
declare  
   V_files  bfile;              ----文件定位器   
   V_bfiles bfile;  
   V_blobs  blob;               ----blob定位器
   V_clobs  clob;               -----clob定位器
   Varc  clob;                    
   offset_str varchar2(100):=1;    
   vRStr varchar2(1000);
   vWStr varchar2(100):= 'CLOB';
   ln number(4);                  
   warning number:=0;
   lang_ctx number:=0;
   dest_offset number:=1;  
   src_offset number:=1;  

begin  
  
--1.从文件中加载      
   V_bfiles:=bfilename('OSCAR_DIR','cpjtxx.txt');  
  
--2.创建2个临时的lob
   dbms_lob.createtemporary(V_blobs,true,DBMS_LOB.session);  
   dbms_lob.createtemporary(V_clobs,true,DBMS_LOB.session);
      
--3.从文件定位器加载到blob 
   V_files:=bfilename('OSCAR_DIR','18105.jpg');  
   dest_offset:=1;  
   src_offset:=1;  
   dbms_lob.open(V_files,dbms_lob.lob_readwrite);    
   dbms_lob.loadblobfromfile(V_blobs,  
                          V_files,  
                          DBMS_LOB.getLength(V_files), 
                          dest_offset,  
                          src_offset);  
   dbms_lob.close(V_files);                                              
      
--4.从文件定位器加载到clob      
   V_files:=bfilename('OSCAR_DIR','cpjtxx.txt');  
   dest_offset:=1;  
   src_offset:=1;  
   dbms_lob.open(V_files,dbms_lob.lob_readwrite);  
   dbms_lob.loadclobfromfile(V_clobs,
                             V_files,DBMS_LOB.getLength(V_files),
                             dest_offset,
                             src_offset,
                             0,
                             lang_ctx,
                             warning);
--5关闭文件
   dbms_lob.close(V_files); 
         
--6插入
   insert into Lob_Tab(ID,CLOB_COL,BLOB_COL,BFILE_COL)  
   select 1,V_clobs,V_blobs,V_bfiles from dual;
    
--6读出clob   
   select CLOB_COL into Varc from lob_tab where ID = 1;
   ln := DBMS_LOB.GetLength(Varc);
   DBMS_LOB.Read(Varc, ln, offset_str, vRStr);          
   DBMS_output.put_line('Return: '||vRStr);
    

--7写入clob
   ln := Length(vWStr);
   offset_str := 5;
   select CLOB_COL into Varc from lob_tab where ID = 1 FOR UPDATE;
   DBMS_LOB.Write(Varc,ln,offset_str,vWStr);
   DBMS_output.put_line('改写结果为: '||Varc);

--8关闭临时lob
   dbms_lob.freetemporary(V_blobs);  
   dbms_lob.freetemporary(V_clobs);
      
end;
/
exec my_test();
?COLUMN?(VOID)      |
--------------------
null                |
总数目:1
Return: AAAAAAAAAAAAA
改写结果为: AAAACLOBAAAAA
/