文档章节

Oracle数据库查询并回显clob字段的具体内容

w
 wwlan
发布于 2017/08/19 17:44
字数 1057
阅读 199
收藏 0

http://blog.sina.com.cn/s/blog_713978a50100prkt.html

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的instr与substr


instr函数用于从指定的位置开始,从大型对象中查找第N个与模式匹配的字符串。
用于查找内部大对象中的字符串的instr函数语法如下:
dbms_lob.instr(
lob_loc in blob, 
pattern in raw, 
offset in integer := 1;
nth in integer := 1)
return integer;

dbms_lob.instr(
lob_loc in clob character set any_cs,
pattern in varchar2 character set lob_loc%charset,
offset in integer:=1,
nth in integer := 1)
return integer;

lob_loc为内部大对象的定位器
pattern是要匹配的模式
offset是要搜索匹配文件的开始位置
nth是要进行的第N次匹配

substr函数
substr函数用于从大对象中抽取指定数码的字节。当我们只需要大对象的一部分时,通常使用这个函数。
操作内部大对象的substr函数语法如下:
dbms_lob.substr(
  lob_loc in blob, 
  amount in integer := 32767,
  offset in integer := 1)
return raw;

dbms_lob.substr(
  lob_loc in clob character set any_cs, 
  amount in integer := 32767,
  offset in integer := 1)
return varchar2 character set lob_loc%charset;
其中各个参数的含义如下:
lob_loc是substr函数要操作的大型对象定位器
amount是要从大型对象中抽取的字节数
offset是指从大型对象的什么位置开始抽取数据。
如果从大型对象中抽取数据成功,则这个函数返回一个 raw 值。如果有一下情况,则返回null:
 1 任何输入参数尾null
 2 amount < 1
 3 amount > 32767
 4 offset < 1
 5 offset > LOBMAXSIZE

本文转载自:

w
粉丝 1
博文 15
码字总数 28434
作品 0
深圳
私信 提问
我的SQL笔记&一些练习题(一)

Oracle 数据库使用的端口为:1521 在Windows平台下需保证 Oracle server xe 和 Oraclelistener 服务正常运行才可以连接到数据库 MySQL数据库使用的端口为:3306 连接数据库可以使用CML模式,...

MikeYoo
2018/06/23
0
0
使用JDBC处理Oracle大数据

转载自 http://www.cnblogs.com/xdp-gacl/p/4009399.html 一、Oracle中大数据处理   在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大...

Amui
2016/06/28
93
0
Oracle 10g 中常用数据类型介绍

数据类型 取值范围 描述 备注 Char(n) n=1 to 2000字节 存储固定长度的字符串。默认长度为1。 Varchar2(n) 高亮为常用字段 n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n,这种数...

zh119893
2013/05/28
127
0
Oracle 10g 常用数据类型

数据类型 取值范围 描述 备注 Char(n) n=1 to 2000字节 存储固定长度的字符串。默认长度为1。 Varchar2(n) 高亮为常用字段 n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n,这种数...

mj4738
2011/11/28
366
0
Java程序中使用oracle数据库LOB字段的总结

LOB中我们用的比较多的主要有两种CLOB和BLOB,我们对两种类型分别讨论 1.CLOB是字符型LOB,主要存储文本信息,最长为4G.,在J2EE程序中,比如网页的textarea中的字符信息比较长,Varchar2字段类型不...

Adairs
2016/03/10
35
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部