Oracle
 sql >> база данни >  >> RDS >> Oracle

Четене на cob ред по ред с pl\sql

Ето част от кода, който работи. Предлагам ви да използвате явни курсори вместо неявни (ЗА i IN (изберете...)) с цел производителност.

Първо тук е скриптът за създаване на тестов пример.

create table test (c clob);

insert into test (c) values (
'azertyuiop
qsdfghjklm
wxcvbn
');

Тогава ето скрипта за четене ред по ред Clob :

/* Formatted on 28/08/2012 14:16:52 (QP5 v5.115.810.9015) */
declare
    nStartIndex number := 1;
    nEndIndex number := 1;
    nLineIndex number := 0;
    vLine varchar2(2000);

    cursor c_clob is
    select c from test;

    c clob;
    -------------------------------
    procedure printout
       (p_clob in out nocopy clob) is
      offset number := 1;
      amount number := 32767;
      len    number := dbms_lob.getlength(p_clob);
      lc_buffer varchar2(32767);
      i pls_integer := 1;
    begin
      if ( dbms_lob.isopen(p_clob) != 1 ) then
        dbms_lob.open(p_clob, 0);
      end if;
      amount := instr(p_clob, chr(10), offset);
      while ( offset < len )
      loop
        dbms_lob.read(p_clob, amount, offset, lc_buffer);
        dbms_output.put_line('Line #'||i||':'||lc_buffer);
       offset := offset + amount;
       i := i + 1;
      end loop; 
          if ( dbms_lob.isopen(p_clob) = 1 ) then
        dbms_lob.close(p_clob);
      end if; 
    exception
      when others then
         dbms_output.put_line('Error : '||sqlerrm);
    end printout;
    ---------------------------
begin
    dbms_output.put_line('-----------');
    open c_clob;
    loop
       fetch c_clob into c;
       exit when c_clob%notfound;
       printout(c);
    end loop;
    close c_clob;
end;

Променливата 'amount' се използва за откриване на крайната позиция на реда. Бъдете внимателни, в някои случаи краят на реда е CHR(10)||CHR(13) (CR + LF), а в някои други случаи е само CHR(10).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Тип на Java за дата/час, когато използвате Oracle Date с Hibernate

  2. Високо използване на пространство от crfclust.bdb

  3. Защо Mysql's Group By и Oracle's Group по поведение са различни

  4. Имена на колони за цитати на Oracle DB

  5. Как да напиша заявка, която прави нещо подобно на GROUP_CONCAT на MySQL в Oracle?