DBMS_LOB包的常量,函数,过程

dbms_log 是oracle 提供的,专门处理lob型的数据类型pl/sql包,
定义了一些常量,函数,和过程

/*
1.常量
在应用程序中可以直接调用,包名.常量名(dbms_lob.call)
*/

file_readonly constant binary_integer :=0;
lob_readonly constant binary_integer :=0;
lob_readwrite constant binary_integer :=1;
lobmaxsize constant integer :=4294967295;
session constant pls_integer :=10;
call constant pls_integer :12;

/*
2 . 过程的append
将源lob变量添加到目的lob变量的尾部。
注释:
只适用于内部的lob类型,不适用于外部的bfile类型。
*/

declare
dest_lob clob:=’中国’;
src_lob clob:= ‘,你好!’;
begin
dbms_lob.append(dest_lob,src_lob);
dbms_output.put_line(dest_lob);
end;

/*
3. 过程的close
不仅适用于内部的lob类型,也适用于外部的bfile类型。
*/
dbms_lob.close(dest_lob);

/*
4. 过程的compare
用于比较两个同类型的lob变量;
不仅适用于内部的lob类型,也适用于外部的bfile类型。
*/

declare
dest_lob clob:=’中国’;
src_lob clob:= ‘&no’;
begin
if dbms_lob.compare(dest_lob,src_lob)=0 then
dbms_output.put_line(‘两个lob类型数据一致……………’);
else
dbms_output.put_line(‘两个lob类型数据不一致……………’);
end if;
end;

/*
5. 过程的copy
用于将源lob变量复制到目的lob类型中。
只适用于内部的lob类型,不适用于外部的bfile类型。
*/

declare
dest_lob clob:=’中国人12542mm’;
src_lob clob:= ‘,美国佬1sdlmk’;
acount number;
start_location number;
begin
start_location:= dbms_lob.getlength(dest_lob); –开始复制的起始位置
acount:= dbms_lob.getlength(src_lob); –源lob大小
dbms_lob.copy(dest_lob,src_lob,acount,start_location+1);
dbms_output.put_line(dest_lob);
end;

/*
6. createtemporary(v_lob,true);
建立临时的lob
只适用于内部的lob类型,不适用于外部的bfile类型。
*/

declare
tem_lob clob;
begin
dbms_lob.createtemporary(tem_lob,true);
end;

/*
7. erase (擦去)
删除lob变量的全部类容或部分类容;
只适用于内部的lob类型,不适用于外部的bfile类型。
*/

declare
tem_lob clob := ‘abcdefghigklmnopqrstuvwqyz’;
acount number := 5; –删除量
start_location number := 1; –起始位置
begin
dbms_lob.erase(tem_lob,acount,start_location);
dbms_output.put_line(tem_lob);
end;

/*
8. 过程fileclose
用于关闭以关闭以打开的bfile类型定位符所指的os文件;
*/
dbms_lob.fileclose(file_lob);

/*
9. 过程filecloseall
用于关闭该次会话所打开的所有os文件;
*/

dbms_lob.filecloseall;

/*
10**. 函数fileexists**
文件是否存在,存在返回1 ,不存在返回0

*/

declare
v_file bfile;
begin
v_file := bfilename(‘F’,’Cpp1.dsw’);
if dbms_lob.fileexists(v_file)=1 then
dbms_output.put_line(‘该文件存在’);
else
dbms_output.put_line(‘该文件不存在’);
end if;
end;

/*
11. 过程filegetname
取得bfile定位符所对应的目录别名或文件名;
*/

declare
dir_name varchar2(20);
filename varchar2(20);
file_bfile bfile;
begin
select filename into file_bfile from bfile_table where fno = &no;
dbms_lob.filegetname(file_bfile,dir_name,filename );
dbms_output.put_line(‘目录名:’ || dir_name );
dbms_output.put_line(‘文件名:’ || filename );
end;

/*
12. 函数fileisopen 确定文件是否被打开;
打开 —返回1
没有打开 —返回;
*/

declare
v_file bfile;
begin
v_file := bfilename(‘F’,’Cpp1.dsw’);
if dbms_lob.fileisopen(v_file)=1 then
dbms_output.put_line(‘该文件已经打开’);
else
dbms_output.put_line(‘该文件没有被打开…’);
end if;
end;

/*
13.过程fileopen 打开bfile所对应的文件;
*/

declare
v_file bfile;
begin
v_file := bfilename(‘F’,’Cpp1.dsw’);
if dbms_lob.fileexists(v_file)=1 then
dbms_lob.fileopen(v_file);
dbms_output.put_line(‘该文件已经打开’);
end if;
dbms_lob.fileclose(v_file);
end;

/*
14.过程 freetemporary
用于释放默认表空间的临时lob
*/

declare
v_file clob ;
begin
dbms_lob.createtemporary(v_file,true);
v_file := ‘我是中国人………….’;
dbms_lob.freetemporary(v_file);
end;

/*
15.函数 getchunksize
当表中有clob,blob 时,chunk 是操控lob数据分配的字节数
*/

declare
v_lob clob;
chunksize int;
begin
v_lob := ‘小日本,二胺淡了……’;
chunksize:= dbms_lob.getchunksize(v_lob);
dbms_output.put_line(chunksize);
end;

/*
16.函数 getlength() return int

返回lob 数据类型的实际长度;

*/

declare
v_file clob;
v_length int ;
begin
v_file := ‘dshxzhzcohfsabcsdnfhyohol’;
v_length := dbms_lob.getlength(v_file);
dbms_output.put_line(‘文件的实际长度:’ || v_length);
end;

/*17.函数 instr
确定 特定字符 在lob 数据类型中,从 第n 个位置开始,第m 次出现的*位置*;
*/

declare
v_lob clob:=’王瑶,大脸,王瑶,指数,安康,宝鸡,王瑶。’;
start_location number := 3 ;
twice number := 2;
location int;
begin
location:= dbms_lob.instr(v_lob,’王瑶’,start_location,twice);
dbms_output.put_line(‘王瑶在lob中从第’ || start_location || ‘开始第’ ||twice ||
‘次出现的位置是’ || location);
end;

/*18.函数 isopen
确定lob类型 是否被打开;
*/

declare
v_lob clob:= ‘ssdefhfsdhf’;
begin
if dbms_lob.isopen(v_lob) = 0 then
dbms_lob.open(v_lob,1);
end if;
dbms_lob.close(v_lob);
end;

/*19.函数 istemporary
确定lob定位符是否为临时的lob
*/

declare
v_lob clob;
begin
if dbms_lob.istemporary(v_lob) = 1 then
dbms_output.put_line(‘lob已经是临时的lob’);
else
dbms_output.put_line(‘需要建立临时的lob’);
dbms_lob.createtemporary(v_lob,true);
end if;
dbms_lob.freetemporary(v_lob);
end;

/*20.过程 loadfromfile
将外部bfile 部分或全部复制到内部的lob(clob,blob)中
*/

declare
src_file bfile ;
dest_lob clob;
v_count int ;
begin
src_file := bfilename(‘F’,’A.txt’);
dbms_lob.createtemporary(dest_lob,true);
dbms_lob.fileopen(src_file);
v_count:=dbms_lob.getlength(src_file);
dbms_lob.loadfromfile(dest_lob,src_file,v_count);
dbms_lob.fileclose(src_file);
dbms_lob.freetemporary(dest_lob);
end;

/*21.过程 loadblobfromfile
将外部bfile 部分或全部复制到内部的blob中
*/
declare
src_file bfile ;
dest_lob blob;
v_count int ;
dest_offset int := 1;
src_offset int := 1;
begin
src_file := bfilename(‘F’,’A.txt’);
dbms_lob.createtemporary(dest_lob,true);
dbms_lob.fileopen(src_file,0);
v_count:=dbms_lob.getlength(src_file);
dbms_lob.loadblobfromfile(dest_lob,src_file,v_count,dest_offset,src_offset );
dbms_output.put_line(‘新的偏移位置:’ ||dest_offset );
dbms_lob.fileclose(src_file);
dbms_lob.freetemporary(dest_lob);
end;

/*22.过程 loadclobfromfile
src_cid –int 源文件字符集编号ID
lang_content– int 指定语言上下文
warning – int 取得警告消息。
*/
declare
src_file bfile ;
dest_lob clob;
v_count int ;
dest_offset int := 1;
src_offset int := 1;
src_cid int:=0;
lang_content int :=0;
warning int;
begin
src_file := bfilename(‘F’,’A.txt’);
dbms_lob.createtemporary(dest_lob,true);
dbms_lob.fileopen(src_file,0);
v_count:=dbms_lob.getlength(src_file);
dbms_lob.loadclobfromfile(dest_lob,src_file,v_count,dest_offset,src_offset,src_cid, lang_content,warning);
dbms_lob.fileclose(src_file);
dbms_lob.freetemporary(dest_lob);
end;

/*
23.过程open
用于打开lob时 ,指定lob的读写模式;
只读(dbms_lob.lob_readonly)
读写(dbms_lob.lob.readwrite)

*/

declare
tem varchar2(200):= ‘中国有个好地方-西安,西安是八朝古都….’;
v_lob clob ;
v_acount number ;

begin
v_acount:= length(tem);
dbms_lob.createtemporary(v_lob,true);
dbms_lob.open(v_lob,dbms_lob.lob_readwrite);
dbms_lob.write(v_lob,v_acount,1,tem);
dbms_output.put_line(v_lob);
dbms_lob.close(v_lob);
dbms_lob.freetemporary(v_lob);
end;

/*
24.过程read/write
将lob类型数据读到缓冲区中
*/
declare
buffer varchar2(200);
v_lob clob :=’但是看了回复你参考下你看电视成交量的内’;
v_acount number ;
begin
v_acount:= dbms_lob.getlength(v_lob);
dbms_lob.open(v_lob,dbms_lob.lob_readonly);
dbms_lob.read(v_lob,v_acount,1,buffer);
dbms_output.put_line(buffer);
dbms_lob.close(v_lob);
end;

/*
25.函数 substr;
返回lob 中从某个位置开始的某些部分
*/
declare
v_acount int := 5;
dest_offset int := 4;
v_lob clob := ‘ABCEFGHIGKLMN’;
v_tem varchar2(20);
begin
v_tem := dbms_lob.substr(v_lob,v_acount,dest_offset);
dbms_output.put_line( v_tem );
end;

/*
26.过程trim
用于把lob数据类型从1-开始,截取m 个。
*/
declare
v_acount int := 5;
v_lob clob := ‘ABCEFGHIGKLMN’;
begin
dbms_lob.trim(v_lob,v_acount);
dbms_output.put_line(v_lob);
end;

/*
27.过程writeappend
将数据写入缓冲区的尾部;
*/
declare
v_acount int;
v_lob clob := ‘祖国啊,美丽的祖国,’;
buffer varchar2(100):= ‘我那美丽的母亲………’;
begin
v_acount:=length(buffer);
dbms_lob.writeappend(v_lob,v_acount,buffer);
dbms_output.put_line(v_lob);
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值