sql >> Database >  >> RDS >> Oracle

Clob regel voor regel lezen met pl\sql

Hier is een stukje code dat werkt. Ik stel voor dat je expliciete cursors gebruikt in plaats van impliciete (FOR i IN (select...)), voor prestatiedoeleinden.

Hier is eerst het script om een ​​testcase te maken.

create table test (c clob);

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

Dan is hier het script om regel voor regel Clob te lezen:

/* 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;

De variabele 'amount' wordt gebruikt om de positie aan het einde van de regel te detecteren. Wees voorzichtig, in sommige gevallen is het einde van de regel CHR(10)||CHR(13) (CR + LF), en in sommige andere gevallen is het alleen CHR(10).



  1. Caculate punt 50 mijl afstand (Noord, 45% NE, 45% ZW)

  2. Wat is IN Logische operator in SQL Server - SQL Server / TSQL-zelfstudie, deel 122

  3. Pyodbc - Naam gegevensbron niet gevonden en geen standaardstuurprogramma opgegeven

  4. Een SQL Plus-script uitvoeren in PowerShell