sql >> Databasteknik >  >> RDS >> Oracle

SQLPlus - spoolning till flera filer från PL/SQL-block

Jag har en lösning, jag vet inte varför jag inte tänkte på det här tidigare...

Grundidén är att master sqplplus-skriptet genererar ett mellanliggande skript som delar upp utdata till flera filer. Genom att köra det mellanliggande skriptet körs flera frågor med olika intervall på rownum , och spool till en annan fil för varje fråga.

set termout off
set serveroutput on
set echo off
set feedback off
variable v_rowCount number;
spool intermediate_file.sql
declare
     i number := 0;
     v_fileNum number := 1;
     v_range_start number := 1;
     v_range_end number := 1;
     k_max_rows constant number := 65536;
begin
    dbms_output.enable(10000);
    select count(*) 
    into :v_err_count
    from ...
    /* You don't need to see the details of the query... */

    while i <= :v_err_count loop

          v_range_start := i+1;
          if v_range_start <= :v_err_count then
            i := i+k_max_rows;
            v_range_end := i;

            dbms_output.put_line('set colsep ,  
set pagesize 0
set trimspool on 
set headsep off
set feedback off
set echo off
set termout off
set linesize 4000
spool large_data_file_'||v_fileNum||'.csv
select data_string
from (select rownum rn, data_object
      from 
      /* Details of query omitted */
     )
where rn >= '||v_range_start||' and rn <= '||v_range_end||';
spool off');
          v_fileNum := v_fileNum +1;
         end if;
    end loop;
end;
/
spool off
prompt     executing intermediate file
@intermediate_file.sql;
set serveroutput off


  1. MySQL :transaktion inom en lagrad procedur

  2. SQLiteException med WHERE +KEY_Date+='+date+'

  3. ORA-00054:resurs upptagen och förvärv med NOWAIT specificerad

  4. Hur ökar man maxanslutningarna i postgres?