Colega, vamos por partes : primeiro, vc está correto ao supor que, na 
ausência de permissão de criação de qquer objeto no servidor (o que inclui 
tabelas, stored PL/SQL, etc, imagino) E ausência de permissão de acesso a um 
directory qquer via UTL_FILE vc não tem como usar os recursos do servidor 
Oracle para gerar um arquivo-texto na máquina-cliente, então vc VAI TER QUE 
usar um programa cliente que tenha essa capacidade, é isso mesmo...
   O próximo ponto a notar é que não necessariamente precisar ser sqlplus esse 
programa-cliente : hoje em dia, o próprio Microsoft Office, via driver ODBC )e 
programação na linguagem interna de script dele) permite vc conectar num  banco 
Oracle e gerar arquivo-texto, muitos das dúzias de programas-cliente 
alternativos (tanto da Oracle, como o SQL Developer quanto de terceiros, grátis 
ou não) permitem isso, e (claro) sempre há a possibilidade também de vc 
escrever e instalar na máquina cliente em questão um programinha seu específico 
que faça o mesmo.... Vai da sua experiência e do que vc tem disponível / 
permitido na máquina-cliente, mas programas prontos como o SQL Developer 
poderiam ser muito bem aceitos pelo usuário, inclusive permitindo até salvar 
não apenas em texto, mas em outros formatos, como .HTML ou .XLS, dependendo do 
programa...
   
   Caso vc realmente deseje/precise fazer com o sqlplus (talvez devido ao fato 
de ele necessariamente já estar instalado na máquina-cliente, não demandando 
nenhum tipo de Autorização de instalação de nada por parte do cliente, talvez 
por falta de verba / tempo de pesquisa de outra solução, ou mesmo por maior 
adequação dele à sua experiência e à tarefa, seja qual for a razão) nós temos 
que, SE mesmo REALMENTE nem usando CASE, funções analíticas e demais construtos 
de decisão/processamento de linhas vc não conseguir expressar a tua lógica em 
SQL diretamente  :
   
   a) o comando SPOOL do sqlplus grava O QUE APARECE NA TELA, nem mais nem menos
   
   b) como sabemos, a linguagem PL/SQL é Absolutamente, Completamente focada à 
manipulação de dados no servidor, assim ela *** não tem *** um comando nativo 
de geração de telas, de menus, de simples exibição que seja, Não Tem .... 
   
  c) uma coisa que se pode fazer no sentido de se ter algum tipo de exibição é 
usarmos um buffer interno presente no database Oracle e acessível pela package 
DBMS_OUTPUT, pois diversos programas-clientes (como o TOAD, o PL/SQL Developer, 
o SQL Developer) além do próprio sql*plus estão aparelhados para lerem e 
exibirem na tela o conteúdo desse buffer
  
  Juntando esses pontos,  no caso específico do sqlplus, já que como eu disse 
acima o que aparece na tela (venha ou não de buffer, de resultado de SQL, de 
onde for) é gravado num arquivo se o SPOOL, talvez vc possa fazer isso então , 
simplesmente ir exibindo na tela via DBMS_OUTPUT , numa sessão com SPOOL ativo, 
os dados necessários que a sua rotina PL/SQL colocou em buffer... Saiba porém 
que :
  
   a) até a versão 10gR2 do sqlplus, vc tinha um limite máximo de 1000000 bytes 
passíveis de serem exibidos via buffer pelo comando sqlplus SET SERVEROUTPUT, 
só nessa versão/release em diante que foi introduzida a figura do comando SET 
SERVEROUTPUT UNLIMITED
   
   b) a rotina de esvaziamento/exibição do buffer presente no sqlplus tem 
alguns quirks com linhas totalmente em branco, veja 
http://www.adp-gmbh.ch/ora/sqlplus/serveroutput.html para alguns work-arounds
   
  => Como usar a package DBMS_OUTPUT é muito simples, na documentação Oracle 
mesmo vc vai achar diversos exemplos, e fora da doc um exemplo possível pode 
ser 
http://paradigmpatterns.blogspot.com.br/2010/10/example-of-oracle-script-using-cursor.html
 , se vc salvar o bloco anônimo PL/SQL mostrado num arquivo-texto local, este 
poderia ser executado via sqlplus - no seu caso apenas, já que vc quer fazer 
algo não-interativo, vc teria que adicionar a / ao final que o sqlplus exige E 
um comando EXIT para sair do sqlplus...
  
   []s
   
     Chiappa
     

--- Em oracle_br@yahoogrupos.com.br, jean antunes <jeanantu@...> escreveu
>
> Caros, Bom dia !
>  
> Eu sei que o spool se trata de um recurso do sqlplus e não do plsql, mas 
> alguém já teve a necessidade de criar uma lógica dentro de um "declare .. 
> begin .. end", como por exemplo um cursor e depois jogar o resultado dessa 
> logica toda atraves do spool em um arquivo no windows ??
> Eu preciso construi um relatorio mas não consigo isso usando apenas queries, 
> preciso aplicar algumas lógicas/regras mas meu usuario não tem permissão para 
> criar objetos e muito menos jogar essa saida em um arquivo txt dentro de um 
> diretorio (Utl_File.FOpen, Utl_File.Put_Line, etc).
> Também preciso deixar a solução ao nível de usuário pois sera ele quem vai 
> disparar o processo e gerar o relatório.
> Então a minha solução seria criar um arquivo.bat que execute um sqlplus com 
> um bloco "declare begin end" aplicando toda essa logica (cursor, variaveis e 
> etc) e depois jogar isso num arquivo dentro de um diretorio no windows usando 
> o spool.
> Não sei se fui claro quanto a minha necessidade.
>  
> Isso seria possível ?
>  
> Abraços,  
> 
> Jean Carlos Antunes
> Consultor Oracle EBS
> +55 41 98744631
> +55 19 32290828begin_of_the_skype_highlighting              +55 19 
> 32290828      end_of_the_skype_highlighting
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a