当前位置: 代码迷 >> Oracle开发 >> Clob中怎么分行读取
  详细解决方案

Clob中怎么分行读取

热度:18   发布时间:2016-04-24 06:55:26.0
Clob中如何分行读取
一个CLOB字段的表中,存入了一个包含5行的txt文件,我想读取该文件的第3行,何解?
clob 分行 读取

------解决方案--------------------
参考:http://hehe198504.iteye.com/blog/852883
------解决方案--------------------
闲来无事,写了一个,不知道是不是能达到你的要求:

create table t_clob (id number,str clob);
insert into t_clob values(1,'aaa'
------解决方案--------------------
chr(10)
------解决方案--------------------
'bbb'
------解决方案--------------------
chr(10)
------解决方案--------------------
'ccc');
insert into t_clob values(2,'111'
------解决方案--------------------
chr(10)
------解决方案--------------------
'222'
------解决方案--------------------
chr(10)
------解决方案--------------------
'333'
------解决方案--------------------
chr(10)
------解决方案--------------------
'444');
/
declare
  v_amount BINARY_INTEGER := 4000;
  v_offset INTEGER := 1;
  v_buffer varchar2(4000);
BEGIN
  for j in (select id, str
              from (select id,
                           regexp_substr(str,
                                         '[^' 
------解决方案--------------------
 chr(10) 
------解决方案--------------------
 ']+',
                                         1,
                                         level) str,
                           level lv
                      from t_clob t
                    CONNECT BY id = PRIOR id
                           AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
                           AND LEVEL <= regexp_count(str, chr(10)) + 1)
             where lv = 3) loop
    IF dbms_lob.getlength(j.str) <= 4000 THEN
      dbms_lob.READ(j.str, v_amount, v_offset, v_buffer);
      dbms_output.put_line(j.id 
------解决方案--------------------
 ':' 
------解决方案--------------------
 v_buffer);
    ELSE
      dbms_output.put_line('文件的第三行长度超过了4000');
    END IF;
  end loop;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    dbms_output.put_line(sqlerrm);
END;