clob 類型


在Oracle Database中,VARCHAR2 字段類型,最大值為4000;PL/SQL中 VARCHAR2 變量類型,最大字節長度為32767。

 

  • 在Oracle中,LOB(Large Object,大型對象)類型的字段現在用得越來越多了。因為這種類型的字段,容量大(最多能容納4GB的數據),且一個表中可以有多個這種類型的字段,很靈活,適用於數據量非常大的業務領域(如圖象、檔案等)。
  • LOB類型分為BLOB和CLOB兩種:BLOB即二進制大型對象(Binary Large Object),適用於存貯非文本的字節流數據(如程序、圖象、影音等)。
  • 而CLOB,即字符型大型對象(Character Large Object),則與字符集相關,適於存貯文本型的數據(如歷史檔案、大部頭著作等)。

 

Oracle中的LOB數據類型分類

  •     CLOB:存儲大量 單字節 字符數據
  •     NLOB:存儲定寬 多字節 字符數據。
  •     BLOB:存儲較大無結構的二進制數據。
  •     BFILE:將二進制文件存儲在數據庫外部的操作系統文件中。存放文件路徑。

大對象列時,插入空白構造函數。

  •     字符型:empty_clob(),empty_nclob()
  •     二進制型:empty_blob()

 

讀取大對象數據的過程和函數

  建表語句:

create table TEMP
(
  name      VARCHAR2(200),
  age       NUMBER,
  temp_clob CLOB
)

 DBMS_LOB包:包含處理大對象的過程和函數

1. DBMS_LOB.Read():從LOB數據中讀取指定長度數據到緩沖區的過程。

   語法: DBMS_LOB.Read(LOB數據,指定長度,起始位置,存儲返回LOB類型值變量);

DECLARE
  l_clob  CLOB;
  vrstr   VARCHAR2(1000);
  lenght  NUMBER(4);
  stat    NUMBER(4);
BEGIN
  SELECT t.temp_clob 
    INTO l_clob 
    FROM temp t
    WHERE ROWNUM = 1;
  lenght   := dbms_lob.getlength(l_clob);
  stat := 1;
  dbms_lob.read(l_clob, lenght, stat, vrstr);
  dbms_output.put_line('返回值為: ' || vrstr);
END;

運行結果:  返回值為: 加入博客園的第一天

2. DBMS_LOB.SubStr():從LOB數據中提取子字符串的函數。
    語法: DBMS_LOB.SubStr(LOB數據,指定提取長度,提取起始位置)

DECLARE
  l_clob  CLOB;
  vrstr    VARCHAR2(1000);
  lenght    NUMBER(4);
  stat  NUMBER(4);
BEGIN
  SELECT t.temp_clob 
    INTO l_clob 
    FROM temp t
    WHERE ROWNUM = 1;
  lenght   := dbms_lob.getlength(l_clob);
  stat := 1;
  vrstr := dbms_lob.substr(l_clob, 4, stat);
  dbms_output.put_line('返回值為: ' || vrstr);
END;

運行結果:  返回值為: 加入博客

 3. DBMS_LOB.InStr():從LOB數據中查找子字符串位置的函數。
     語法: DBMS_LOB.InStr(LOB數據, 子字符串);

DECLARE
  l_clob  CLOB;
  vrstr    VARCHAR2(1000);
  lenght    NUMBER(4);
  stat  NUMBER(4);
BEGIN
  SELECT t.temp_clob 
    INTO l_clob 
    FROM temp t
    WHERE ROWNUM = 1;
  stat := 1;
  vrstr := dbms_lob.instr(l_clob, '博客');
  dbms_output.put_line('返回值為: ' || vrstr);
END;

運行結果:  返回值為: 3

4. DBMS_LOB.GetLength():返回指定LOB數據的長度的函數。
    語法: DBMS_LOB.GetLength(LOB數據)

操作大對象數據的過程   

操作會改變數據庫中原有數據,需要加上Updata鎖鎖上指定數據列,修改完后提交事務。
   
1. DBMS_LOB.Write():將指定數量的數據寫入LOB的過程。
   語法:  DBMS_LOB.Write(被寫入LOB, 寫入長度(指寫入LOB數據),寫入起始位置(指被寫入LOB),寫入LOB數據);

DECLARE
  l_clob CLOB;
  vrstr  VARCHAR2(1000);
  lenght NUMBER(4);
  stat   NUMBER(4);
  l_value varchar2(1000);
BEGIN
  l_value := 'CLOB';
  lenght  := LENGTH(l_value);
  
  SELECT t.temp_clob 
    INTO l_clob 
    FROM temp t 
    WHERE rownum = 1 
    FOR UPDATE;
  
  dbms_lob.write(l_clob,lenght,4, l_value);
  dbms_output.put_line('返回值為: ' || l_clob);
  COMMIT;
END;

運行結果:  返回值為: 加入博CLOB一天           被替換前的值為:  加入博客園的第一天

2. DBMS_LOB.Append():將指定的LOB數據追加到指定的LOB數據后的過程。
    語法:  DBMS_LOB.Append(LOB數據,LOB數據);

DECLARE
  l_clob CLOB;
  l_value varchar2(1000);
BEGIN
  l_value := ',這是大對象列';

  SELECT t.temp_clob 
    INTO l_clob 
    FROM temp t 
    WHERE rownum = 1 
    FOR UPDATE;
  dbms_lob.append(l_clob,l_value);
  COMMIT;
  dbms_output.put_line('返回值為: ' || l_clob);
END;

運行結果為:  返回值為: 加入博CLOB一天,這是大對象列

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM