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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Oracle中LOB 处理

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

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


三,大對象數(shù)據(jù)的讀取和操作:DBMS_LOB包
DBMS_LOB包:包含處理大對象的過程和函數(shù)
/*
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,讀取大對象數(shù)據(jù)的過程和函數(shù)
①:DBMS_LOB.Read():從LOB數(shù)據(jù)中讀取指定長度數(shù)據(jù)到緩沖區(qū)的過程。
DBMS_LOB.Read(LOB數(shù)據(jù),指定長度,起始位置,存儲返回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數(shù)據(jù)中提取子字符串的函數(shù)。
DBMS_LOB.SubStr(LOB數(shù)據(jù),指定提取長度,提取起始位置):
例子:
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 := '大對象';
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數(shù)據(jù)的長度的函數(shù)。
DBMS_LOB.GetLength(LOB數(shù)據(jù));

⑤:DBMS_LOB.Compare():比較二個大對象是否相等。返回數(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,操作大對象數(shù)據(jù)的過程
操作會改變數(shù)據(jù)庫中原有數(shù)據(jù),需要加上Updata鎖鎖上指定數(shù)據(jù)列,修改完后提交事務(wù)。

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

②:DBMS_LOB.Append():將指定的LOB數(shù)據(jù)追加到指定的LOB數(shù)據(jù)后的過程。
DBMS_LOB.Append(LOB數(shù)據(jù),LOB數(shù)據(jù));
例子:
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('追加結(jié)果為: '||varC);
End;

③:DBMS_LOB.Erase():刪除LOB數(shù)據(jù)中指定位置的部分數(shù)據(jù)的過程;
DBMS_LOB.Erase(LOB數(shù)據(jù),指定刪除長度, 開始刪除位置);
例子:
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():截斷LOB數(shù)據(jù)中從第一位置開始指定長度的部分數(shù)據(jù)的過程;
DBMS_LOB.Trim(LOB數(shù)據(jù),,截斷長度);
例子:
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('截斷結(jié)果為: '||varC);
End;

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

總結(jié)

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

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