mysql lob 操作_Oracle中LOB 处理

主要是用来存储大量数据的数据库字段,最大可以存储4G字节的非结构化数据。主要介绍字符类型和二进制文件类型LOB数据的存储,单独

三,大对象数据的读取和操作:DBMS_LOB包

DBMS_LOB包:包含处理大对象的过程和函数

/*

insert into tlob values(1,'Gene','CLOB大对象列',empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));

insert into tlob values(2,'Jack','CLOB大对象列',empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));

insert into tlob values(3,'Mary','大对象列CLOB',empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));

*/

1,读取大对象数据的过程和函数

①:DBMS_LOB.Read():从LOB数据中读取指定长度数据到缓冲区的过程。

DBMS_LOB.Read(LOB数据,指定长度,起始位置,存储返回LOB类型值变量);

例子:

Declare

varC clob;

vRStr varchar2(1000);

ln number(4);

Strt number(4);

Begin

select resume into varC from tlob where no = 1;

ln := DBMS_LOB.GetLength(varC);

Strt := 1;

DBMS_LOB.Read(varC, ln, Strt, vRStr);

DBMS_output.put_line('Return: '||vRStr);

End;

②:DBMS_LOB.SubStr():从LOB数据中提取子字符串的函数。

DBMS_LOB.SubStr(LOB数据,指定提取长度,提取起始位置):

例子:

Declare

varC clob;

vRStr varchar2(1000);

ln number(4);

Strt number(4);

Begin

select resume into varC from tlob where no = 1;

ln := 4;

Strt := 1;

vRStr := DBMS_LOB.SubStr(varC, ln, Strt);

DBMS_output.put_line('结果为: '||vRStr);

End;

③:DBMS_LOB.InStr():从LOB数据中查找子字符串位置的函数。

DBMS_LOB.InStr(LOB数据, 子字符串);

例子:

Declare

varC clob;

vSubStr varchar2(1000);

vRStr varchar2(1000);

ln number(4);

Begin

select resume into varC from tlob where no = 1;

vSubStr := '大对象';

ln := DBMS_LOB.InStr(varC,vSubStr);

DBMS_output.put_line('位置为: '||ln);

vRStr := DBMS_LOB.SubStr(varC, Length(vSubStr), ln);

DBMS_output.put_line('位置为'||ln||'长度为'||Length(vSubStr)||'的子字符串为:'||vRStr);

End;

④:DBMS_LOB.GetLength():返回指定LOB数据的长度的函数。

DBMS_LOB.GetLength(LOB数据);

⑤:DBMS_LOB.Compare():比较二个大对象是否相等。返回数值0为相等,-1为不相等。

DBMS_LOB.Compare(LOB数据,LOB数据);

例子:

Declare

varC1 clob;

varC2 clob;

varC3 clob;

ln number(4);

Begin

select resume into varC1 from tlob where no = 1;

select resume into varC2 from tlob where no = 2;

select resume into varC3 from tlob where no = 3;

ln := DBMS_LOB.Compare(varC1,varC1);

DBMS_output.put_line('比较的结果为: '||ln);

ln := DBMS_LOB.Compare(varC2,varC3);

DBMS_output.put_line('比较的结果为: '||ln);

End;

2,操作大对象数据的过程

操作会改变数据库中原有数据,需要加上Updata锁锁上指定数据列,修改完后提交事务。

①:DBMS_LOB.Write():将指定数量的数据写入LOB的过程。

DBMS_LOB.Write(被写入LOB, 写入长度(指写入LOB数据),写入起始位置(指被写入LOB),写入LOB数据);

例子:

Declare

varC clob;

vWStr varchar2(1000);

vStrt number(4);

ln number(4);

Begin

vWStr := 'CLOB';

ln := Length(vWStr);

vStrt := 5;

select resume into varC from tlob where no = 1 FOR UPDATE;

DBMS_LOB.Write(varC, ln, vStrt, vWStr);

DBMS_output.put_line('改写结果为: '||varC);

Commit;

End;

②:DBMS_LOB.Append():将指定的LOB数据追加到指定的LOB数据后的过程。

DBMS_LOB.Append(LOB数据,LOB数据);

例子:

Declare

varC clob;

vAStr varchar2(1000);

Begin

vAStr := ',这是大对象列';

select resume into varC from tlob where no = 1 FOR UPDATE;

DBMS_LOB.Append(varC, vAStr);

commit;

DBMS_output.put_line('追加结果为: '||varC);

End;

③:DBMS_LOB.Erase():删除LOB数据中指定位置的部分数据的过程;

DBMS_LOB.Erase(LOB数据,指定删除长度, 开始删除位置);

例子:

Declare

varC clob;

ln number(4);

strt number(4);

Begin

ln := 1;

strt := 5;

select resume into varC from tlob where no = 1 FOR UPDATE;

DBMS_LOB.Erase(varC, ln, strt);

commit;

DBMS_output.put_line('擦除结果为: '||varC);

End;

④:DBMS_LOB.Trim():截断LOB数据中从第一位置开始指定长度的部分数据的过程;

DBMS_LOB.Trim(LOB数据,,截断长度);

例子:

Declare

varC clob;

ln number(4);

Begin

ln := 4;

select resume into varC from tlob where no = 1 FOR UPDATE;

DBMS_LOB.Trim(varC, ln);

COMMIT;

DBMS_output.put_line('截断结果为: '||varC);

End;

⑤:DBMS_LOB.Copy():从指定位置开始将源LOB复制到目标LOB;

DBMS_LOB.Copy(源LOB,目标LOB,复制源LOB长度,复制到目标LOB开始位置,复制源LOB开始位置)

例子:

Declare

vDEST_LOB clob;

vSRC_LOB clob;

AMOUNT number;

DEST_OFFSET number;

SRC_OFFSET number;

Begin

select resume into vDEST_LOB from tlob where no = 1 FOR UPDATE;

select resume into vSRC_LOB from tlob where no = 2 ;

AMOUNT := DBMS_LOB.GetLength(vSRC_LOB);

DEST_OFFSET := DBMS_LOB.GetLength(vDEST_LOB)+1;

SRC_OFFSET := 1;

DBMS_LOB.Copy(vDEST_LOB, vSRC_LOB, AMOUNT, DEST_OFFSET, SRC_OFFSET);

DBMS_output.put_line('拷贝结果为: '||vDEST_LOB);

End;

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值