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] >