日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Oracle中LOB 处理

發(fā)布時(shí)間:2023/12/15 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 Oracle中LOB 处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

主要是用來(lái)存儲(chǔ)大量數(shù)據(jù)的數(shù)據(jù)庫(kù)字段,最大可以存儲(chǔ)4G字節(jié)的非結(jié)構(gòu)化數(shù)據(jù)。主要介紹字符類(lèi)型和二進(jìn)制文件類(lèi)型LOB數(shù)據(jù)的存儲(chǔ),單獨(dú)


三,大對(duì)象數(shù)據(jù)的讀取和操作:DBMS_LOB包
DBMS_LOB包:包含處理大對(duì)象的過(guò)程和函數(shù)
/*
insert into tlob values(1,'Gene','CLOB大對(duì)象列',empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));
insert into tlob values(2,'Jack','CLOB大對(duì)象列',empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));
insert into tlob values(3,'Mary','大對(duì)象列CLOB',empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));
*/
1,讀取大對(duì)象數(shù)據(jù)的過(guò)程和函數(shù)
①:DBMS_LOB.Read():從LOB數(shù)據(jù)中讀取指定長(zhǎng)度數(shù)據(jù)到緩沖區(qū)的過(guò)程。
DBMS_LOB.Read(LOB數(shù)據(jù),指定長(zhǎng)度,起始位置,存儲(chǔ)返回LOB類(lèi)型值變量);
例子:
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數(shù)據(jù)中提取子字符串的函數(shù)。
DBMS_LOB.SubStr(LOB數(shù)據(jù),指定提取長(zhǎng)度,提取起始位置):
例子:
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('結(jié)果為: '||vRStr);
End;

③:DBMS_LOB.InStr():從LOB數(shù)據(jù)中查找子字符串位置的函數(shù)。
DBMS_LOB.InStr(LOB數(shù)據(jù), 子字符串);
例子:
Declare
varC clob;
vSubStr varchar2(1000);
vRStr varchar2(1000);
ln number(4);
Begin
select resume into varC from tlob where no = 1;
vSubStr := '大對(duì)象';
ln := DBMS_LOB.InStr(varC,vSubStr);
DBMS_output.put_line('位置為: '||ln);

vRStr := DBMS_LOB.SubStr(varC, Length(vSubStr), ln);
DBMS_output.put_line('位置為'||ln||'長(zhǎng)度為'||Length(vSubStr)||'的子字符串為:'||vRStr);
End;

④:DBMS_LOB.GetLength():返回指定LOB數(shù)據(jù)的長(zhǎng)度的函數(shù)。
DBMS_LOB.GetLength(LOB數(shù)據(jù));

⑤:DBMS_LOB.Compare():比較二個(gè)大對(duì)象是否相等。返回?cái)?shù)值0為相等,-1為不相等。
DBMS_LOB.Compare(LOB數(shù)據(jù),LOB數(shù)據(jù));
例子:
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('比較的結(jié)果為: '||ln);
ln := DBMS_LOB.Compare(varC2,varC3);
DBMS_output.put_line('比較的結(jié)果為: '||ln);
End;
2,操作大對(duì)象數(shù)據(jù)的過(guò)程
操作會(huì)改變數(shù)據(jù)庫(kù)中原有數(shù)據(jù),需要加上Updata鎖鎖上指定數(shù)據(jù)列,修改完后提交事務(wù)。

①:DBMS_LOB.Write():將指定數(shù)量的數(shù)據(jù)寫(xiě)入LOB的過(guò)程。
DBMS_LOB.Write(被寫(xiě)入LOB, 寫(xiě)入長(zhǎng)度(指寫(xiě)入LOB數(shù)據(jù)),寫(xiě)入起始位置(指被寫(xiě)入LOB),寫(xiě)入LOB數(shù)據(jù));
例子:
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('改寫(xiě)結(jié)果為: '||varC);
Commit;
End;

②:DBMS_LOB.Append():將指定的LOB數(shù)據(jù)追加到指定的LOB數(shù)據(jù)后的過(guò)程。
DBMS_LOB.Append(LOB數(shù)據(jù),LOB數(shù)據(jù));
例子:
Declare
varC clob;
vAStr varchar2(1000);
Begin
vAStr := ',這是大對(duì)象列';
select resume into varC from tlob where no = 1 FOR UPDATE;
DBMS_LOB.Append(varC, vAStr);
commit;
DBMS_output.put_line('追加結(jié)果為: '||varC);
End;

③:DBMS_LOB.Erase():刪除LOB數(shù)據(jù)中指定位置的部分?jǐn)?shù)據(jù)的過(guò)程;
DBMS_LOB.Erase(LOB數(shù)據(jù),指定刪除長(zhǎng)度, 開(kāi)始刪除位置);
例子:
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('擦除結(jié)果為: '||varC);
End;

④:DBMS_LOB.Trim():截?cái)郘OB數(shù)據(jù)中從第一位置開(kāi)始指定長(zhǎng)度的部分?jǐn)?shù)據(jù)的過(guò)程;
DBMS_LOB.Trim(LOB數(shù)據(jù),,截?cái)嚅L(zhǎng)度);
例子:
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('截?cái)嘟Y(jié)果為: '||varC);
End;

⑤:DBMS_LOB.Copy():從指定位置開(kāi)始將源LOB復(fù)制到目標(biāo)LOB;
DBMS_LOB.Copy(源LOB,目標(biāo)LOB,復(fù)制源LOB長(zhǎng)度,復(fù)制到目標(biāo)LOB開(kāi)始位置,復(fù)制源LOB開(kāi)始位置)
例子:
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('拷貝結(jié)果為: '||vDEST_LOB);
End;

總結(jié)

以上是生活随笔為你收集整理的Oracle中LOB 处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。