› Fóruns › SQL e PL/SQL › Exportação de dados em txt via sqlplus › Exportação de dados em txt via sqlplus
Bem, se a sua necessidade é pontual (ie, vc precisa disso Eventualmente, apenas) sim, o Oracle SQL Developer é ** excelente ** pra isso, é é ridiculamente Fácil de usar e se fazer : é só colocar o HINT de DELIMITED (*** não é o de TXT apenas***) E se vc não quer o default vc Indica nas configs do SQL Developer o delimitador que vc quer, cfrme http://www.thatjeffsmith.com/archive/2013/04/sql-developer-preferences-for-delimited-text-exports/ explica / mostra…. Bico….
PORÉM, o Oracle SQL Developer é uma GUI, portanto vc tem que manualmente clickar onde vc quer, sendo DIFÍCIL portanto vc fazer isso programaticamente, automaticamente, principalmente se isso é um trabalho rotineiro que vc precisa fazer Rotineiramente com queries diferentes : aí sim, vc vai ter que Programar um pouquinho pra isso….
O sqlplus serve sim pra isso, muito embora a linguagem de programação via script dele seja um tanto limitada : vou demonstrar aqui como fazer no sqlplus MAS vou depois indicar outras opções (gratuitas, apenas) que não possuem as limitações do sqlplus…
a) sqlplus :
a principal vantagem do sqlplus é que ele é padrão numa instalação Oracle, mas a questão é que ele é uma tool de Report e Consulta de dados, portanto ele ** sempre ** vai gerar linhas com colunas de mesma largura, assim sendo se uma coluna não foi totalmente preenchida ele VAI ter espaços para esses casos… Se isso não te incomoda (o Excel, por exemplo, Absoluta e Completamente IGNORA por default espaços antes ou depois de cada coluna, no sqlplus a resposta é esta abaixo, com a IMPORTANTE adição que vc deve chamar o script de fora do sqlplus, assim :
==> olha o script :
C:Usersjlchi_000>type gera_delimit.sql
set colsep ‘;’
set headsep off
set pagesize 0
set trimspool on
set linesize 1000
spool delimit.txt
select deptno, dname, loc from dept;
exit
/
C:Usersjlchi_000>
==> O caracter / no final do script é exigência do sqlplus… Vou chamar o script, a partir da linha de comando, num ambiente onde (*** Óbvio ***) já tenho as variáveis de ambiente PATH, ORACLE_SID e ORACLE_HOME setadas :
C:Usersjlchi_000>sqlplus scott/tiger @gera_delimit.sql
SQL*Plus: Release 11.2.0.2.0 Production on Qua Jan 25 12:18:25 2017
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Express Edition Release 11.2.0.2.0 – 64bit Production
10;ACCOUNTING ;NEW YORK
20;RESEARCH ;DALLAS
30;SALES ;CHICAGO
40;OPERATIONS ;BOSTON
Desconectado de Oracle Database 11g Express Edition Release 11.2.0.2.0 – 64bit Production
C:Usersjlchi_000>
==> Olha só o arquivo gerado :
C:Usersjlchi_000>dir delimit.txt
O volume na unidade C não tem nome.
O Número de Série do Volume é 340C-E794
Pasta de C:Usersjlchi_000
25/01/2017 12:18 141 delimit.txt
1 arquivo(s) 141 bytes
0 pasta(s) 460.942.860.288 bytes disponíveis
C:Usersjlchi_000>type delimit.txt
10;ACCOUNTING ;NEW YORK
20;RESEARCH ;DALLAS
30;SALES ;CHICAGO
40;OPERATIONS ;BOSTON
C:Usersjlchi_000>
==> O Fórum talvez reformate isso e vc não veja, mas o TYPE tá mostrando EXATAMENTE o que eu falei acima : os ponto-e-vírgula tão CERTINHO na mesma coluna, cada coluna tem a mesma Exata largura sempre, e são introduzidos espaços ou antes ou depois para “forçar” cada coluna a ficar com a mesma largura… Só pra teste, importei esse arquivo numa Planilha Excel e foi de boas…
b) outra opção gratuita que aceita programação via script é a ferramente Oracle SQL Command Line (SQLcl), disponível na mesma página de download do Oracle SQL Developer (ie, http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html) : eu não usei ela ainda mas em http://www.thatjeffsmith.com/archive/2015/12/more-set-sqlformat-fun-in-sqlcl/ o Autor mostra as opções, tenta lá…
c) ainda outra opção é vc usar a linguagem de programação interna default do RDBMS Oracle, a linguagem PL/SQL : ela possui uma package (biblioteca de rotinas) chamada UTL_FILE que serve para isso… O único senão é que, como essa linguagem é interna no database, ela só pode gravar o arquivo no Servidor do RDBMS Oracle, e não nalguma máquina-cliente : se isso não te afeta, https://asktom.oracle.com/pls/apex/f?p=100:11:0::::p11_question_id:68212348056 tem um bom exemplo…
d) a opção final é vc programar nalguma linguagem de programação externa ao banco mas que permita conectar : https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:459020243348 tem um exemplo em PRO*C, se vc googlar vc encontra exemplos em Java, .NET e muitas outras…. A vantagem de se fazer algo personalizado é que você está no controle total, então vc formata como bem quiser, MAS a desvantagem óbvia é que vc Precisa entender de programação…
[]s
Chiappa