dbms_lob用法小结
来源:互联网 发布:淘宝详情页美工 编辑:程序博客网 时间:2024/06/04 19:09
CLOB里存的是2进制
判定长度 DBMS_LOB.GETLENGTH(col1)
获取文本 DBMS_LOB.SUBSTR(col1,n,pos)
DBMS_LOB.SUBSTR(col1,10,1)表示从第1个字节开始取出10个字节
DBMS_LOB.SUBSTR(CLOB_VAR,32767)表示截取CLOB变量保存的全部数据
DBMS_LOB.FILECLOSE(IMG_BFILE)关闭文件
clob转化为字符串,SELECT UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(col1,10,1)) FROM tab1;
如果clob中包含空格则不能使用。
将clob类型转化成字符串
create or replace function getclob(
table_name in varchar2,
field_id in varchar2,
field_name in varchar2,
v_id in number,
v_pos in number) return varchar2
is
lobloc clob;
buffer varchar2(32767);
amount number := 2000;
offset number := 1;
query_str varchar2(1000);
begin
query_str :='select '||field_name||' from '||table_name||' where '||field_id||'= :id ';
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
offset:=offset+(v_pos-1)*2000;
dbms_lob.read(lobloc,amount,offset,buffer);
return buffer;
exception
when no_data_found then
return buffer;
end;
两个写数据的存储过程
dbms_lob.append 和 dbms_lob.write
append存储过程用于将一个大对象添加到另一个大对象中,此时是将源大对象的内容全部添加过去。append存储过程的语法如下:
dbms_lob.append(
dest_lob in out nocopyblob,
src_lob in blob);
dbms_lob.append(
dest_lob in out nocopy clobcharacter set any_cs,
src_lob in clob character setdest_lob%charset);
其中,各个参数的含义如下:
dest_lob是被源lob添加到的目标lob的定位器
src_lob是源lob的定位器
any_cs用来指定字符集。
write存储过程
write存储过程能够将数据写入大型对象中。写的位置是从大型对象开始处的某个绝对偏移地址,数据从缓冲区参数被写入。写操作将覆盖已经在大型对象偏移地址处存在的任何长度为指定的数据。如果输入数多于在缓冲区的数据,将产生一个错误。如果输入数量小于在缓冲区的数据,那么只有缓冲区的数据字节活字符被写给大型对象。
write存储过程的语法如下:
dbms_lob.write(
lob_loc in out nocopy blob,
amount in binary_integer,
offset in integer,
buffer in raw);
dbms_lob.write(
lob_loc in out nocopy clob character setany_cs,
amount in binary_integer,
offset in integer,
buffer in varchar2 character setlob_loc%charset);
其中各个参数的含义如下:
lob_loc是要操作的大型对象定位器。
amount是要写道大型对象中去的字节数量。
offset是指定将数据写入到大型对象什么位置的偏移地址。
buffer是写入到大型对象的数据缓冲区。
any_cs指定要使用的字符集。
示例:
declare
source_lob clob;
dest_lob clob;
write_amountinteger:=18;
writing_positioninteger;
buffer varchar2(20) := 'Addedtext to clob';
begin
select clob_locator intodest_lob from mylobs where lob_index = 4 for update;
select clob_locator intosource_lob from mylobs where lob_index = 1;
dbms_lob.append(dest_lob,source_lob);
commit;
select clob_locator intodest_lob from mylobs where lob_index = 5 for update;
writing_position :=dbms_lob.getlength(dest_lob) + 1;
dbms_lob.write(dest_lob,write_amount, writing_position, buffer);
commit;
end;
/
SQL> select * frommylobs;
LOB_INDEX---CLOB_LOCATOR-------------------------------------------------------
1 I Love Oracle 9i
2 Oracle 9i is powerful
3 Oracle 9i is the most popular database in the world
4 I Love Oracle 9iI Love Oracle 9i
5 Oracle 9i is powerfulAdded text to clob
判定长度 DBMS_LOB.GETLENGTH(col1)
获取文本 DBMS_LOB.SUBSTR(col1,n,pos)
DBMS_LOB.SUBSTR(col1,10,1)表示从第1个字节开始取出10个字节
DBMS_LOB.SUBSTR(CLOB_VAR,32767)表示截取CLOB变量保存的全部数据
DBMS_LOB.FILECLOSE(IMG_BFILE)关闭文件
clob转化为字符串,SELECT UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(col1,10,1)) FROM tab1;
如果clob中包含空格则不能使用。
将clob类型转化成字符串
create or replace function getclob(
table_name in varchar2,
field_id in varchar2,
field_name in varchar2,
v_id in number,
v_pos in number) return varchar2
is
lobloc clob;
buffer varchar2(32767);
amount number := 2000;
offset number := 1;
query_str varchar2(1000);
begin
query_str :='select '||field_name||' from '||table_name||' where '||field_id||'= :id ';
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
offset:=offset+(v_pos-1)*2000;
dbms_lob.read(lobloc,amount,offset,buffer);
return buffer;
exception
when no_data_found then
return buffer;
end;
两个写数据的存储过程
dbms_lob.append 和 dbms_lob.write
append存储过程用于将一个大对象添加到另一个大对象中,此时是将源大对象的内容全部添加过去。append存储过程的语法如下:
dbms_lob.append(
dest_lob in out nocopyblob,
src_lob in blob);
dbms_lob.append(
dest_lob in out nocopy clobcharacter set any_cs,
src_lob in clob character setdest_lob%charset);
其中,各个参数的含义如下:
dest_lob是被源lob添加到的目标lob的定位器
src_lob是源lob的定位器
any_cs用来指定字符集。
write存储过程
write存储过程能够将数据写入大型对象中。写的位置是从大型对象开始处的某个绝对偏移地址,数据从缓冲区参数被写入。写操作将覆盖已经在大型对象偏移地址处存在的任何长度为指定的数据。如果输入数多于在缓冲区的数据,将产生一个错误。如果输入数量小于在缓冲区的数据,那么只有缓冲区的数据字节活字符被写给大型对象。
write存储过程的语法如下:
dbms_lob.write(
lob_loc in out nocopy blob,
amount in binary_integer,
offset in integer,
buffer in raw);
dbms_lob.write(
lob_loc in out nocopy clob character setany_cs,
amount in binary_integer,
offset in integer,
buffer in varchar2 character setlob_loc%charset);
其中各个参数的含义如下:
lob_loc是要操作的大型对象定位器。
amount是要写道大型对象中去的字节数量。
offset是指定将数据写入到大型对象什么位置的偏移地址。
buffer是写入到大型对象的数据缓冲区。
any_cs指定要使用的字符集。
示例:
declare
source_lob clob;
dest_lob clob;
write_amountinteger:=18;
writing_positioninteger;
buffer varchar2(20) := 'Addedtext to clob';
begin
select clob_locator intodest_lob from mylobs where lob_index = 4 for update;
select clob_locator intosource_lob from mylobs where lob_index = 1;
dbms_lob.append(dest_lob,source_lob);
commit;
select clob_locator intodest_lob from mylobs where lob_index = 5 for update;
writing_position :=dbms_lob.getlength(dest_lob) + 1;
dbms_lob.write(dest_lob,write_amount, writing_position, buffer);
commit;
end;
/
SQL> select * frommylobs;
LOB_INDEX---CLOB_LOCATOR-------------------------------------------------------
1 I Love Oracle 9i
2 Oracle 9i is powerful
3 Oracle 9i is the most popular database in the world
4 I Love Oracle 9iI Love Oracle 9i
5 Oracle 9i is powerfulAdded text to clob
- dbms_lob用法小结
- 数据库:dbms_lob用法小结
- dbms_lob用法小结
- dbms_lob用法小结
- dbms_lob用法小结
- dbms_lob包的用法
- DBMS_LOB的用法
- ORALCE DBMS_LOB用法
- dbms_lob中substr,append,write用法
- DBMS_LOB的简单用法以及释放DBMS_LOB生成的临时CLOB内存
- dbms_lob的instr和substr函数的用法
- Oracle中LOB 处理(dbms_lob的一些用法)
- dbms_lob.instr
- dbms_lob.instr
- oracle dbms_lob.instr
- DBMS_LOB包的使用
- dbms_lob使用之-基础
- [转载]Const用法小结
- 删除网上邻居中已记住的密码
- oracle 10g 用dbms_xmlgen将数据表转成xml格式
- hdu 4301 Divide Chocolate(DP ,4级,多校)
- phpmyadmin提示:配置文件权限错误,无法写入!解决方法
- linux 常用命令
- dbms_lob用法小结
- tamarin中的opcode(bytecode)
- Linux下默认的宏测试
- find the mincost route
- 大数据时代,海量数据处理常用思路和方法总结
- 也谈栈和栈帧(五)——x86 Crash调查
- 关于调试的一些方法
- 关于如何查看mysql版本及其端口号
- 初识Redis及Redis在Windows下的安装和使用