Configurando SPOOL ORACLE

Oracle

Banco de Dados

01/06/2017

Galera.. Preciso de uma ajuda, acredito que talvez seja simples, mas infelizmente nao achei na internet.. Enfim..

Estou gerando um comando spool para criar um arquivo txt.. Entao esta desta maneira:

set echo off        
set feedback off 
set heading off   

spool 'C:\\TESTE\\TXT\\testespool.txt'

SELECT DISTINCT DWCDCLIE FROM DWATOOA WHERE DWFLATTI = 0;

spool off


O arquivo gera normal, porem apresenta o select executado no arquivo, como abaixo.

SQL> SELECT DISTINCT DWCDCLIE FROM DWATOOA WHERE DWFLATTI = 0;

    563163
    563166
    567968
    567984
    563094
    567974
    563161
    563164
    567971
    567989
    567991
    567973
    567969

    567979
    567970
    561783
    563165
    567972
SQL> spool off



Alguem tem uma lista no qual eu vejo os tipos de set's q posso dar para tirar essas linhas de comando???

Obrigado!!!!
Felipe

Felipe

Curtidas 0

Melhor post

Roberto Spernega

Roberto Spernega

01/06/2017

Felipe,

Salva este scripit no arquivo x.sql (ou qualquer nome) e depois executa
Só pra testar, depois troca a query pela sua.


accept v_arquivo prompt "Informe o nome do arquivo com extensão: "
accept v_separador prompt "Informe o separador: "

set feedback off
set heading off
set termout off
Set echo off
set verify off
Set Pagesize 0
Set linesize 1000
Set Trimspool on


spool &v_arquivo

with x as(
select 1 col1, 2 col2, 3 col3, 4 col4 from dual
union
select 5 col1, 6 col2, 7 col3, 8 col4 from dual
union
select 9 col1, 10 col2, 11 col3, 12 col4 from dual)
Select col1||'&v_separador'||col2||'&v_separador'||col3||'&v_separador'||col4
from x;

spool off
GOSTEI 1

Mais Respostas

Roberto Spernega

Roberto Spernega

01/06/2017

Cria um arquivo com o conteúdo da sua query

set echo off
set feedback off
set heading off
spool 'C:\\\\TESTE\\\\TXT\\\\testespool.txt'
SELECT DISTINCT DWCDCLIE FROM DWATOOA WHERE DWFLATTI = 0;
spool off

salva como, por exemplo, c:\\teste\\x.sql

Daí no SqlPlus você executa @c:\\teste\\x.sql
GOSTEI 0
Felipe

Felipe

01/06/2017

Obrigado a ajuda.. A ideia realmente funciona, porem ele passa a ignorar os sets que eu dei anteriormente. Na verdade, eu acho que essa ideia, por mais que funcione, não vai me ajudar pois a ideia é criar uma procedure de acordo com oque um cliente solicitou.. Porem não estou conseguindo tirar aquelas linhas de comando do arquivo.
GOSTEI 0
Roberto Spernega

Roberto Spernega

01/06/2017

Você não conseguiu nada ainda com o UTL_FILE?
GOSTEI 0
Felipe

Felipe

01/06/2017

Não =(

Com o UTL_FILE eu consegui criar a Procedure e aparentemente esta tudo correto, porem quando eu executo a procedure, aparece "Operação inválida no arquivo." .. Eu procurei na internet sobre o assunto, mas todas as formas que tentei olhando os foruns, não deu certo.

Por isso estou tentando pelo Spool.

No Spool estou conseguindo gerar o arquivo, ao menos, porem não estou conseguindo formata-lo de uma maneira melhor.
GOSTEI 0
Roberto Spernega

Roberto Spernega

01/06/2017

Quer tentar passar exatamente como você quer a saída do Arquivo?
Dai eu tento ver se consigo.
GOSTEI 0
Felipe

Felipe

01/06/2017

Preciso criar uma procedure no qual ira gerar um txt a partir de 2 variáveis, sendo var1 para endereço de onde sera salvo (ate por esse motivo eu achei melhor o spool, pois no utl_file eu teria que ficar criando ou alterando o diretorio), var2 seria o separador entre campos..

Entao seria algo tipo..

var1 varchar2(200) := 'C:\\Teste';
var2 varchar2(1) := ';';

set feedback off
set heading off

spool var1

select campo1||var2||campo2||var2||campo3 from tabela

spool off
GOSTEI 0
Felipe

Felipe

01/06/2017

No arquivo txt.. eu so preciso do resultado da query.. nao preciso de titulo nem nada.. apenas os resultados
GOSTEI 0
Felipe

Felipe

01/06/2017

Perfeito!!! Ficou certinho =)

O único jeito de não aparecer a query seria chamando o arquivo como .sql? Não tem nenhum jeito de deixar uma procedure pronta com a query para executar?
GOSTEI 0
Roberto Spernega

Roberto Spernega

01/06/2017

Felipe,

Pra colocar tudo numa procedure precisaria do UTL_FILE e o UTL_FILE não gera num disco local, só num diretório definido no banco.
Fiz uns testes aqui e não consegui fazer via procedure sem ter um script pra definir as variáveis e os SETs e chamar a execução dela.
GOSTEI 0
Roberto Spernega

Roberto Spernega

01/06/2017

Não sei como será o processo de execução da geração desse, mas você poderia criar uma BAT e um ícone para o usuário executar.

call C:\\oracle\\product\\10.2.0\\client_1\\bin\\sqlplusw.exe usuario/senha @c:\\temp\\sp_gera_Arquivo.sql

o problema é que teria que ter o usuário e senha nesta BAT.
GOSTEI 0
POSTAR