Como posso descarregar tabelas de banco de dados Oracle em arquivos csv?

18

Preciso recuperar certos dados de um banco de dados Oracle 11g release 1 e fornecê-los como um ou mais arquivos CSV. Os dados residem em várias tabelas e / ou visualizações. Tudo isso deve funcionar através da linha de comando. Qual seria a melhor abordagem para isso?

aPhilRa
fonte

Respostas:

11

Uma corrida,

agora que o sqlcl está disponível no Oracle SQL Developer 4.1 EA2 (4.1.0.18.37), você pode usá-lo como o antigo e famoso sqlplus. O sqlcl possui uma configuração de formato de saída para csv

set sqlformat csv
spool x.csv
select * from yourtable[s];
spool off

para obter mais informações sobre o sqlcl checkout Kris 'blog

antes que o sqlcl estivesse mais fácil, era usar o APEX e exportar o relatório para csv. No sqlplus antigo simples, você pode fazer isso usando

set lines 9999 -- the appropriate size
set head off  -- no header lines
set colsep ';' --column separator to ;
set pages 0 -- no pages
set feed off
select your data;
spool to_tofile
/
spool off

Isso funciona melhor se os resultados forem gravados em um servidor ou cliente de aplicativo. Se eles precisarem ser gravados no servidor de banco de dados, utl_file pode ser uma opção melhor.

Ronald.

ik_zelf
fonte
8

Você deve olhar para o pacote UTL_FILE embutido . Existem várias maneiras de usá-lo.

  1. Você pode escrever qualquer número de procedimentos em pacotes que usam o pacote UTL_FILE para gravar em qualquer número de arquivos. Esses procedimentos podem ser chamados a partir de praticamente qualquer aplicativo, incluindo o SQL * Plus.

  2. Você pode escrever um script PL / SQL para fazer o mesmo trabalho e chamar o script a partir da própria linha de comando do SQL * Plus, especificando @scriptname na linha de comando.

  3. Você pode colar um bloco usando UTL_FILE diretamente no SQL * Plus, mas isso deve ser usado apenas para exportações únicas e, mesmo assim, pode não ser o melhor caminho.

No mais simples, uma exportação de arquivo usando UTL_FILE seria composta por uma chamada para FOPEN , uma ou mais chamadas para PUT_LINE e uma chamada para FCLOSE .

Leigh Riffel
fonte
4

Se o desempenho for uma preocupação, convém considerar as ferramentas dos fornecedores.

Avaliei as ferramentas da BMC, Wisdomforce, CoSort, DBCrane. Todos eles são significativamente mais rápidos que spool, utl_file ou tabela externa. Estamos usando o DBCrane porque meu chefe não queria gastar muito com licença.

Lei
fonte
3

Você pode usar o módulo Python e cx_Oracle para extrair dados para o disco no formato CSV.

Veja como você se conecta ao Oracle usando cx_Oracle:

constr='scott/tiger@localhost:1521/ORCL12'
con = cx_Oracle.connect(constr)
cur = con.cursor()

Após a busca dos dados, você pode percorrer a lista Python e salvar dados no formato CSV.

for i, chunk in enumerate(chunks(cur)):
    f_out.write('\n'.join([column_delimiter.join(row[0]) for row in chunk]))
    f_out.write('\n')

Eu usei essa abordagem quando escrevi o TableHunter-For-Oracle

Alex Buzunov
fonte