sql >> Databáze >  >> RDS >> Oracle

Čtení clob řádek po řádku pomocí pl\sql

Zde je část kódu, která funguje. Navrhuji, abyste místo implicitních kurzorů používali explicitní kurzory (PRO i IN (vyberte...)) pro účely výkonu.

Nejprve je zde skript pro vytvoření testovacího případu.

create table test (c clob);

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

Pak je zde skript pro čtení řádek po řádku 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;

Proměnná 'částka' se používá k detekci pozice na konci řádku. Buďte opatrní, v některých případech je konec řádku CHR(10)||CHR(13) (CR + LF) a v některých jiných případech je to pouze CHR(10).



  1. Jak najít kolace databáze podporované vaší instancí SQL Server

  2. Vložení SqlBulkCopy se sloupcem identity

  3. Zkoumání chyby ORA 028513 DG4ODBC

  4. Jak vybrat a seřadit podle sloupců, které nejsou v SQL příkazu Groupy By - Oracle