DBMS_LOB包应用

1、

dbms_lob.compare (lob_1 in blob/clob/bfile, lob_2 in

blob/clob/bfile,amount in integer:=4294967295,offset_1 in

integer:=1,offset2 in integer:=1) return integer;

如果比较结果相同则返回0,不同则返回其他非0整数。

select

id,in_lob,out_lob,dbms_lob.compare(in_lob,out_lob)

from

nyytest.lob_table

where

id=1;

ID

IN_LOB

OUT_LOB

DBMS_LOB.COMPARE(IN_LOB,OUT_LOB)

1

SYS DUAL TABLE VALID

SYS DUAL TABLE VALID

0

2、dbms_lob.append

将源lob变量的值添加到目标lob变量的尾部,只适用于clob和blob,bfile不适用。APPEND过程把1个LOB中的数据添加到第2个LOB中。由于需要对1个LOB值进行更新操作,所以在执行APPEND过程前,被更新的记录必须要锁定。

Dbms_lob.append(dest_log,src_lob)

测试时遇到了一个错误ORA-22920: 未锁定含有 LOB 值的行

原语句如下:

declare

des_lob clob;

src_lob clob;

begin

select in_lob into des_lob

from

lob_table where id=1;

src_lob:=' nyyadd';

dbms_lob.append(des_lob,src_lob);

dbms_output.put_line(des_lob);

end;

ORACLE官方文档对该错误的说明:

ORA-22920 row

containing the LOB value is not locked

Cause: The row

containing the LOB value must be locked before updating the LOB

value.

Action: Lock the

row containing the LOB value before updating the LOB

value.

修改pl/sql程序,增加for

update之后执行正常

declare

des_lob clob;

src_lob clob;

begin

select in_lob into des_lob

from

lob_table where id=1 for update;

src_lob:=' nyyadd';

dbms_lob.append(des_lob,src_lob);

dbms_output.put_line(des_lob);

end;

DBMS Output for Batch 1

SYS DUAL TABLE VALIDnyyadd nyyadd

nyyadd

3、

DBMS_LOB.ERASE(

lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB,

amount IN OUT NOCOPY INTEGER,--

总数变量(即要删除的字节或字符个数)

offset IN INTEGER:=1—起始位置

)

如果删除一个BLOB值中的数据,则代之以空格填充此CLOB。由于对一个LOB值执行了更新,所以必须用SELECT FOR UPDATE命令来锁定行数据

用户删除lob变量的全部内容或部分内容,只适用于内部LOB,不适用bfile

select

id,in_lob,out_lob

from

lob_table

where

id=1

ID

IN_LOB

OUT_LOB

1

SYS DUAL TABLE VALID

SYS DUAL TABLE VALID

declare

l_1

clob;

l_2

clob;

amount number;

offset number;

begin

select in_lob into l_1

from

lob_table

where

id=1 for update;

amount:=6;

offset:=3;

dbms_lob.erase(l_1,amount,offset);

dbms_output.put_line(l_1);

end;

DBMS Output for Batch 1

SY

TABLE VALID

---查看表里的数据也相应发生了变化

select id,in_lob,out_lob

from

lob_table

where

id=1

ID

IN_LOB

OUT_LOB

1

SY

TABLE VALID

SYS DUAL TABLE VALID

4、DBMS_LOB.WRITE(

Lob_loc IN OUT NOCOPY BLOB/CLOB,

Amount IN BINARY_INTEGER,--要写入的字节或字符个数

Offset IN INTEGER,--写操作的起始点

Buffer IN RAW/VARCHAR2-- 分配被写入的字符串或二进制数据的缓冲区变量

)

WRITE过程允许在LOB中指定的位置写入数据。例如,可以在一个BLOB列的某一部分中写入二进制数据,并覆盖掉已有的数据。也可以使用WRITE。由于WRITE过程会更新LOB的值,所以必须用SELECT FOR UPDATE命令来锁定行数据。

declare

l_1

clob;

l_2

varchar2(20);

amount number;

offset number;

begin

select in_lob into l_1

from

lob_table

where

id=2 for update;

l_2:='测试110524';

amount:=length(l_2);

offset:=dbms_lob.getlength(l_1)+1;

dbms_lob.write(l_1,amount,offset,l_2);

dbms_output.put_line(l_1);

end;

DBMS Output for Batch 1

PUBLIC DUAL SYNONYM

VALID测试110524

5、DBMS_LOB.GELENGTH

获取LOB类型的长度,适用于bfile、blob、clob、nclob

6、 DBMS_LOB.INSTR(

Lob_loc IN BLOB/CLOB/NCLOB/BFILE,

Pattern IN RAW/VARCHAR2,--指定要搜索的二进制串或者字符串

Offset IN INTERGER:=1,--搜索的起始位置

Nth IN INTEGER:=1

--指定次数

) RETURN INTEGER;

INSTR函数在一个LOB数据值上执行函数SQL INSTR,返回特定数据在lob中从某位置开始第n次出现的位置,适用于bfile、blob、clob、nclob

select

id,in_lob,dbms_lob.getlength(in_lob),dbms_lob.instr(in_lob,'N',1,2),out_lob

from

lob_table

where

id=2

ID

IN_LOB

DBMS_LOB.GETLENGTH(IN_LOB)

DBMS_LOB.INSTR(IN_LOB,'N',1,2)

OUT_LOB

2

PUBLIC DUAL SYNONYM VALID测试110524

33

17

PUBLIC DUAL SYNONYM VALID

7、DBMS_LOB.SUBSTR

(

Lob_loc IN BLOB/CLOB/BFILE,

Amount IN INTEGER:=32762,-- 截取的字节或字符个数

Offset IN INTEGER:=1--开始位置

) RETURN RAW/VARCHAR2

在一个LOB数据值上执行SQL SUBSTR函数,返回从指定位置开始的部分内容,适用于bfile、blob、clob、nclob

select id,in_lob,dbms_lob.substr(in_lob,4,3)

from

lob_table

where

id=2

ID

IN_LOB

DBMS_LOB.SUBSTR(IN_LOB,4,3)

2

PUBLIC DUAL SYNONYM VALID测试110524

BLIC

8、DBMS_LOB.TRIM

(

Lob_loc IN OUT NOCOPY BLOB/CLOB/NCLOB,

Newlen IN INTEGER—截断后lob长度

)

从值的结尾处开始删除字符或字节(与SQL RTRIM函数类似)。该过程更新LOB列,所以需要锁定和解锁

declare

l_1

clob;

begin

select in_lob into l_1

from

lob_table

where

id=2 for update;

dbms_lob.trim(l_1,10);

dbms_output.put_line(l_1);

end;

DBMS Output for Batch 1

PUBLIC DUA

oracle dbms_lob trim,DBMS_LOB包基础应用相关推荐

  1. oracle写转帐的存储过程,Oracle存储过程及块编程基础经典案例

    Oracle存储过程及块编程基础案例 pl/sql(procedure language/sql:过程语言)编程是oracle的精髓之所在.跑得慢: 提高应用程序的运行性能,提高效率. 1.作为存储过 ...

  2. Oracle之trim( )、ltrim( )、rtrim( )三个函数

    Oracle之trim( ).ltrim( ).rtrim( )三个函数的用法及陷阱 一.去除字符串前后空格(基本用法) trim(string):去除指定字符串string的左右空格,当然,stri ...

  3. 获取oracle数据库war报告,Oracle 数据库开发及SQL基础实战

    Oracle 数据库开发及SQL基础实战 一.数据库基础 主键(Primary Key): 1.某一列或某些列的组合,构成一个主键,在这张二维表里,主键必须不重复.用于在这些行之间进行唯一的区别. 2 ...

  4. Oracle PL/SQL编程之基础

    1.简介:pl/sql块由三个部分组成:定义部分.执行部分.例外处理部分,如下所示: declare: /*定义部分---定义常量.变量.游标.例外.复杂数据类型 begin /*执行部分---要执行 ...

  5. 数据挖掘课程笔记6 : Numpy、Pandas和Matplotlib包基础知识

    #2018-03-22 10:23:16 March Thursday the 12 week, the 081 day SZ SSMR http://blog.csdn.net/eastmount/ ...

  6. 包对象之Oracle如何编译失效包体

    主题:如何Oracle编译失效的包体 作者:基毛飞上天 情况说明:在吗?可以帮忙重新编译一个包吗?我们这边编译不了! 处理思维: (1)包头失效还是包体失效? (2)是否存在阻碍的进程影响重新编译? ...

  7. 【Oracle数据库驱动架包 ojdbc5.jar ojdbc6.jar】

    免费获取Oracle数据库驱动架包:ojdbc5 .6.jar 由于用到了Oracle数据库的驱动架包 ,看到论坛里面好多都是要积分的,本人本着资源共享的原则, 特意将架包共享出来,从而解决部分急需之 ...

  8. oracle trim没用,Oracle中Trim函数的使用方法

    TRIM函数最简单的功能就是使用它来去除字符串的行首和行尾的空格,这个功能也是大家使用频率最高的一种.然而在Oracle中TRIM函数其实是具有删除"任意指定"字符的功能,下面就进 ...

  9. Maven项目启动报错 org.apache.catalina.LifecycleException: Failed to start component,手动添加Oracle JDBC 驱动jar包

     项目启动报错: D:\apache-tomcat-8.5.43\bin\catalina.bat run [2019-09-11 11:31:53,154] Artifact heima_ssm_w ...

  10. Oracle HA篇+DG/ADG 基础知识

    说明:本文为面向Oracle (Active) Data Guard初学者的指导手册 标签:Oracle DG.Data Guard.Oracle ADG.Active Data Guard.ADG体 ...

最新文章

  1. 如何首次在 Exchange Server 2003 SP1 上部署 RPC over HTTP
  2. mx3 android 5.1,魅族MX3揭晓:猎户座处理器5.1寸屏幕
  3. ping 原理与ICMP协议---转
  4. 谈谈tcp/ip协议
  5. Maven属性(properties)标签的使用
  6. 在哪个Linux发行版上运行python,怎么在linux上运行python
  7. java对象怎么创建_java对象是怎么创建出来的
  8. 为informix数据库中的表创建同义词
  9. 常见的设计模式 ----- 桥接模式
  10. 电脑怎么彻底卸载程序
  11. python指南针_Mircopython: 在BPIbit上制作指南针
  12. 利用uniapp实现手机摇一摇H5项目
  13. 2009年中国直销业9大主旋律
  14. 计算机电源功率高好吗,电脑电源买多大功率适合?实战分析分享
  15. win 7使用mimikatz实现MS14-068漏洞
  16. Dell服务器型号的详解
  17. PDF文档无损去签名去口令
  18. 利用Python实现自动批量图片格式转换
  19. VulnHub日记(八):Hacker Kid
  20. 10uF的电容能滤除什么频率的电源纹波?

热门文章

  1. Qt读取文本文件乱码的问题
  2. 【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(一) 进程信息查看
  3. C#操作.exe文件
  4. 计算机如何安装无线网络适配器,无线网卡驱动怎么安装,教您怎么给电脑安装无线网卡驱动...
  5. 污染土壤修复可以采取哪些方式
  6. android按住录音按钮_Android仿微信录音功能
  7. 创新认知 基于LPC1114单片机的传感器使用
  8. Python练手项目:计算机自动还原魔方视频
  9. FTP软件的安装及上传/下载方法
  10. PHP的数据类型主要有三大类八小类。