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.