oracle dbms_lob trim,DBMS_LOB包基础应用
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包基础应用相关推荐
- oracle写转帐的存储过程,Oracle存储过程及块编程基础经典案例
Oracle存储过程及块编程基础案例 pl/sql(procedure language/sql:过程语言)编程是oracle的精髓之所在.跑得慢: 提高应用程序的运行性能,提高效率. 1.作为存储过 ...
- Oracle之trim( )、ltrim( )、rtrim( )三个函数
Oracle之trim( ).ltrim( ).rtrim( )三个函数的用法及陷阱 一.去除字符串前后空格(基本用法) trim(string):去除指定字符串string的左右空格,当然,stri ...
- 获取oracle数据库war报告,Oracle 数据库开发及SQL基础实战
Oracle 数据库开发及SQL基础实战 一.数据库基础 主键(Primary Key): 1.某一列或某些列的组合,构成一个主键,在这张二维表里,主键必须不重复.用于在这些行之间进行唯一的区别. 2 ...
- Oracle PL/SQL编程之基础
1.简介:pl/sql块由三个部分组成:定义部分.执行部分.例外处理部分,如下所示: declare: /*定义部分---定义常量.变量.游标.例外.复杂数据类型 begin /*执行部分---要执行 ...
- 数据挖掘课程笔记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/ ...
- 包对象之Oracle如何编译失效包体
主题:如何Oracle编译失效的包体 作者:基毛飞上天 情况说明:在吗?可以帮忙重新编译一个包吗?我们这边编译不了! 处理思维: (1)包头失效还是包体失效? (2)是否存在阻碍的进程影响重新编译? ...
- 【Oracle数据库驱动架包 ojdbc5.jar ojdbc6.jar】
免费获取Oracle数据库驱动架包:ojdbc5 .6.jar 由于用到了Oracle数据库的驱动架包 ,看到论坛里面好多都是要积分的,本人本着资源共享的原则, 特意将架包共享出来,从而解决部分急需之 ...
- oracle trim没用,Oracle中Trim函数的使用方法
TRIM函数最简单的功能就是使用它来去除字符串的行首和行尾的空格,这个功能也是大家使用频率最高的一种.然而在Oracle中TRIM函数其实是具有删除"任意指定"字符的功能,下面就进 ...
- 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 ...
- Oracle HA篇+DG/ADG 基础知识
说明:本文为面向Oracle (Active) Data Guard初学者的指导手册 标签:Oracle DG.Data Guard.Oracle ADG.Active Data Guard.ADG体 ...
最新文章
- 如何首次在 Exchange Server 2003 SP1 上部署 RPC over HTTP
- mx3 android 5.1,魅族MX3揭晓:猎户座处理器5.1寸屏幕
- ping 原理与ICMP协议---转
- 谈谈tcp/ip协议
- Maven属性(properties)标签的使用
- 在哪个Linux发行版上运行python,怎么在linux上运行python
- java对象怎么创建_java对象是怎么创建出来的
- 为informix数据库中的表创建同义词
- 常见的设计模式 ----- 桥接模式
- 电脑怎么彻底卸载程序
- python指南针_Mircopython: 在BPIbit上制作指南针
- 利用uniapp实现手机摇一摇H5项目
- 2009年中国直销业9大主旋律
- 计算机电源功率高好吗,电脑电源买多大功率适合?实战分析分享
- win 7使用mimikatz实现MS14-068漏洞
- Dell服务器型号的详解
- PDF文档无损去签名去口令
- 利用Python实现自动批量图片格式转换
- VulnHub日记(八):Hacker Kid
- 10uF的电容能滤除什么频率的电源纹波?