Reading clob line by line with pl\sql

后端 未结 9 944
长情又很酷
长情又很酷 2020-12-02 00:53

In my project i use oracle as primary database and i\'ve faced a problem with parsing clob. So suppose we have a clob with value

   aaaaaa
   cccccc
   bbbbb         


        
9条回答
  •  我在风中等你
    2020-12-02 01:26

    Emmanuel's Answer

    This is an elegant solution that works just fine with clobs exceeding 32767 chars or lines exceeding 4K characters.

    ANSI Standard Query:

    DECLARE
      v_tmp clob :='aaaa'||chr(10)||
                   'bbb'||chr(10)||
                   'ccccc';
    BEGIN
      FOR rec IN (WITH clob_table(c) as (SELECT v_tmp c FROM DUAL),
                       recurse(text,line) as (SELECT regexp_substr(c, '.+', 1, 1) text,1 line
                                                FROM clob_table
                                               UNION ALL
                                              SELECT regexp_substr(c, '.+', 1, line+1),line+1
                                                FROM recurse r,clob_table
                                               WHERE line

    Oracle Specific Query (original post):

    DECLARE
      v_tmp clob :='aaaa'||chr(10)||
                   'bbb'||chr(10)||
                   'ccccc';
    BEGIN
      FOR rec IN (WITH clob_table(c) as (SELECT v_tmp c FROM DUAL)
                SELECT regexp_substr(c, '.+', 1, level) text,level line
                 FROM clob_table
              CONNECT BY LEVEL <= regexp_count(c, '.+')) LOOP
          dbms_output.put_line(rec.text);
      END LOOP;
    END;
    

提交回复
热议问题