解決比較Oracle中CLOB欄位問題

來源:互聯網
上載者:User

Oracle中CLOB和BLOB欄位雖說在開發中滿足了存放超大內容的要求,但是在一些簡單使用中確頻頻帶來麻煩。CLOB中存放的是指標,並不能直接取到實際值。而SQLServer中的text欄位就很方便,可以直接拿來與需要的字串比對,象什麼等於呀小於呀Like呀不在話下。可是換成Oracle就麻煩死了,要開闢一個緩衝,把內容一段段讀取出來後轉換,難道寫個where條件都這麼複雜?經過多方尋求資料,終於發現一個方便簡單的方法:利用dbms_lob 包中的方法(放心,內建的)instr和substr 。具體的介紹如下:

 

instr函數與substr函數

 

instr函數用於從指定的位置開始,從大型物件中尋找第N個與模式比對的字串。
用於尋找內部大對象中的字串的instr函數文法如下:

1:  dbms_lob.instr(
2:  lob_loc in clob character set any_cs,
3:  pattern in varchar2 character set lob_loc%charset,
4:  offset in integer:=1,
5:  nth in integer := 1)
6:  return integer; 
7:   

 

lob_loc為內部大對象的定位器

pattern是要匹配的模式

offset是要搜尋匹配檔案的開始位置

nth是要進行的第N次匹配

substr函數

substr函數用於從大對象中抽取指定數位的位元組。當我們只需要大對象的一部分時,通常使用這個函數。

操作內部大對象的substr函數文法如下:

其中各個參數的含義如下:

lob_loc是substr函數要操作的大型物件定位器

amount是要從大型物件中抽取的位元組數

offset是指從大型物件的什麼位置開始抽取資料。


如果從大型物件中抽取資料成功,則這個函數返回一個 raw 值。如果有一下情況,則返回null:

1 任何輸入參數尾null

2 amount < 1

3 amount > 32767

4 offset < 1

5 offset > LOBMAXSIZE

 1:  dbms_lob.instr(
 2:  lob_loc in blob, 
 3:  pattern in raw, 
 4:  offset in integer := 1;
 5:  nth in integer := 1)
 6:  return integer; 
 7:  dbms_lob.substr(
 8:    lob_loc in blob, 
 9:    amount in integer := 32767,
10:    offset in integer := 1)
11:  return raw; 
12:  dbms_lob.substr(
13:    lob_loc in clob character set any_cs, 
14:    amount in integer := 32767,
15:    offset in integer := 1)
16:  return varchar2 character set lob_loc%charset; 

 

照下面樣本,很容易看懂:

 1:  declare 
 2:     source_lob clob;
 3:     pattern varchar2(6) := 'Oracle';
 4:     start_location integer := 1;
 5:     nth_occurrence integer := 1;
 6:     position integer;
 7:     buffer varchar2(100);
 8:  begin
 9:     select clob_locator into source_lob from mylobs where lob_index = 4;
10:     position := dbms_lob.instr(source_lob, pattern, start_location, nth_occurrence);
11:     dbms_output.put_line('The first occurrence starts at position:' || position);
12:   
13:     nth_occurrence := 2;
14:     select clob_locator into source_lob from mylobs where lob_index = 4;
15:     position := dbms_lob.instr(source_lob, pattern, start_location, nth_occurrence);
16:     dbms_output.put_line('The first occurrence starts at position:' || position);
17:   
18:     select clob_locator into source_lob from mylobs where lob_index = 5;
19:     buffer := dbms_lob.substr(source_lob, 9, start_location);
20:     dbms_output.put_line('The substring extracted is: ' || buffer);
21:  end; 

 

輸出結果為:

The first occurrence starts at position:8

The first occurrence starts at position:24

The substring extracted is: Oracle 9i

 

哈哈,輕鬆搞定CLOB欄位的比對匹配篩選,不用一大堆的預存程序和函數,祝大家好運!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.