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
/