天天看點

PowerBuilder 讀取Oracle Clob字段内容

  最近需要用PowerBuilder讀取Oracle 的Clob字段内容,發現直接使用SELECTBLOB讀取的資料總是有資料不能完全讀取問題。最後我在網上進行了搜羅,發現可以寫一個FUNCTION來進行處理: 

1、Oracle讀取Clob函數,一次可以讀取2000個字元: 

create or replace function getclob(

    table_name in varchar2, --表名

    field_name in varchar2, --CLOB字段名

    v_tj in varchar2,  --表查詢條件

    v_pos in number –字元起始位置)

  return varchar2 is  

    buffer varchar2(32767);

    lobloc  clob;   

    amount number := 2000;

      query_str varchar2(1000);

    begin

query_str :='select '||field_name||' from '||table_name||' where '||v_tj||'';

      --initialize buffer with data to be found

      EXECUTE IMMEDIATE query_str INTO lobloc ;

      --read 2000 varchar2 from the buffer

      dbms_lob.read(lobloc,amount,v_pos+1,buffer);

      return buffer;

      exception

        when no_data_found then

        return buffer;

        end;

2、PowerBuilder采用循環讀取CLOB字段的所有内容: 

String ls_temp,ls_data,ls_data1

ls_temp = " blbh="+String(ll_blbh)+" and blym= "+String(li_blym)

SELECT dbms_lob.getlength(html) INTO :ll_len FROM ys_zy_bl_html Where blbh = :ll_blbh AND blym = :li_blym;

Long i

i = 1 

DO

//調用ORACLE的函數GetClob

 SELECT getclob('ys_zy_bl_html','html',:ls_temp,:i ) INTO :ls_data FROM dual;

 ls_data1 = ls_data1 + ls_data 

 ll_len = ll_len - 2000 

 i = i + 2000 

LOOP WHILE ll_len >= 0 

注:ll_blbh, li_blym為PowerBuilder變量。

簡單吧,ls_data1就是需要讀取的CLOB字段的全部内容。