Result set di una query in un file CSV

 

Questo post è nato come una sfida quando un mio collega mi ha chiesto se Oracle avesse delle procedure per convertire on-the-fly l’output di una query in un file CSV, in modo tale da non dover ricorrere ad un’implemetazione in java.

Mi sono documentato e, lavorando con DBMS_SQL e UTL_FILE, ho creato un package PKG_CSV che ho reso disponibile nel sito.

Tramite questo package è sufficiente specificare la query da esportare in una stringa ed effettuare la chiamata:

BEGIN
  PKG_CSV.Write_File(
  i_folder => 'DUMP_DIR',
i_file_name => 'export.csv',
i_query => 'SELECT * FROM MY_TABLE WHERE ROWNUM <= 100',
i_show_header => true,
i_show_nulls => true,
i_quote => '"',
i_line_break_style => 'win'
);
END;

 

NOTE

  • E’ indispensabile che la directory di scarico dei files, sulla macchina del database, sia referenziata con una directory logica di Oracle e che l’utente abbia i permessi in lettura/scrittura su di essa. In più, solo per i sistemi UNIX-like, l’utente oracle deve poter avere accesso in lettura/scrittura al folder fisico <dir>.

    CREATE OR REPLACE DIRECTORY DUMP_DIR AS '<dir>';
    GRANT READ, WRITE ON DIRECTORY DUMP_DIR TO <user>;

  • Il package offre anche una serie di opzioni di visualizzazione (headers, null values, quoting, trimming, ecc.) documentate nel source file.
 

Lascia un commento