oracle 修改 clob欄位,查詢clob欄位

來源:互聯網
上載者:User

 

給你處理clob的方法
處理CLOB欄位的動態PL/SQL
2001-03

動態PL/SQL,對CLOB欄位操作可傳遞表名table_name,表的唯一標誌欄位名field_id,clob欄位名field_name,記錄號v_id,開始處理字元的位置v_pos,傳入的字串變數v_clob

修改CLOB的PL/SQL過程:updateclob

create   or   replace   procedure   updateclob(
          table_name   in   varchar2,
          field_id         in   varchar2,  
          field_name   in   varchar2,
          v_id               in   number,
          v_pos             in   number,
          v_clob           in   varchar2)
is
          lobloc   clob;
          c_clob   varchar2(32767);
          amt   binary_integer;
          pos   binary_integer;
          query_str   varchar2(1000);
begin
      pos:=v_pos*32766+1;
      amt   :=   length(v_clob);
      c_clob:=v_clob;
      query_str   := 'select   '||field_name|| '   from   '||table_name|| '   where   '||field_id|| '=   :id   for   update   ';

--initialize   buffer   with   data   to   be   inserted   or   updated
      EXECUTE   IMMEDIATE   query_str   INTO   lobloc   USING   v_id;
--from   pos   position,   write   32766   varchar2   into   lobloc
      dbms_lob.write(lobloc,   amt,   pos,   c_clob);
      commit;
exception
      when   others   then
      rollback;
end;
/

用法說明:
在插入或修改以前,先把其它欄位插入或修改,CLOB欄位設定為空白empty_clob(),
然後調用以上的過程插入大於2048到32766個字元。
如果需要插入大於32767個字元,編一個迴圈即可解決問題。

查詢CLOB的PL/SQL函數:getclob

create   or   replace   function   getclob(
          table_name   in   varchar2,
          field_id         in   varchar2,  
          field_name   in   varchar2,
          v_id   in   number,
          v_pos   in   number)   return   varchar2
is
          lobloc   clob;
          buffer   varchar2(32767);
          amount   number   :=   2000;
          offset   number   :=   1;
          query_str   varchar2(1000);
begin
      query_str   := 'select   '||field_name|| '   from   '||table_name|| '   where   '||field_id|| '=   :id   ';

--initialize   buffer   with   data   to   be   found
      EXECUTE   IMMEDIATE   query_str   INTO   lobloc   USING   v_id;
      offset:=offset+(v_pos-1)*2000;  
--read   2000   varchar2   from   the   buffer
      dbms_lob.read(lobloc,amount,offset,buffer);
      return   buffer;
exception
        when   no_data_found   then
      return   buffer;
end;
/

用法說明:

用select   getclob(table_name,field_id,field_name,v_id,v_pos)   as   partstr   from   dual;

可以從CLOB欄位中取2000個字元到partstr中,
編一個迴圈可以把partstr組合成dbms_lob.getlength(field_name)長度的目標字串。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.