Oi, tudo jóia ? Eu havia dado uma resposta (que vc provavelmente até já viu) 
num outro fórum mas se vc não se importar, vou colar aqui a mesma resposta - 
não só para que outras pessoas que precisem tenham outra chance de encontrar 
MAS também para ter outra chance de provocar eventuais respostas, outros pontos 
de vistas e outras Possibilidades que não me ocorreram : entre outras coisas, 
esse tipo de aprendizado/troca de idéias para que eu tenha crescimento 
profissional (já que essa coisa de banco de dados é o que paga o leitinho das 
crianças) é uma das coisas que me move...

 Então segue : bom, primeiro não entendi patavina sobre essa sua obs de "não é 
ambiente CGI" - o que que é isso no contexto de programação PL/SQL no database 
?? Me parece ser algum conceito da tua linguagem/tool/ambiente de 
desenvolvimento...
A próxima pergunta é a de sempre : PARA QUE vc quer saber o nome do PL/SQL em 
execução, é para fim de debug (ie, numa ÚNICA VEZ vc quer acompanhar o 
comportamento de rotinas PL/SQL, provavelmente para analisar algum erro lógico 
?? Se é isso, considere a opção de ** DEBUGAR ** o PL/SQL, 
www.thatjeffsmith.com/archive/2014/02/ho...-the-plsql-debugger/ exemplifica : 
com esse recurso vc tem até mais recursos, podendo colocar BREAKPOINTs além de 
acompanhar linha a linha a execução.... A questão apenas é que para debugar 
PL/SQL no SQL Developer vc tem que estar executando o PL/SQL em questão a 
partir do SQL developer, nem sempre isso é possível... Muitas vezes é 
totalmente possível vc levantar os parâmetros que estão sendo passados e 
executar o PL/SQL em questão manualmente no SQL developer informando esses 
parâmetros, mas às vezes não é....

Aí finalmente a sua Resposta : se ainda não sabia, *** SAIBA *** que a 
linguagem PL/SQL absolutamente *** NÃO TEM NENHUM COMANDO PARA INTERAGIR COM 
TELA/FRONT-END *** : sendo a linguagem de programação back-end que é, o PL/SQL 
NÂO tem comando para print de texto, NÃO tem comando pra criar uma janela, NÃO 
tem comando para receber input via teclado do usuário, NÃO tem comando pra 
interagir com mouse ou impressora.... PL/SQL é uma linguagem feita para 
manipular (com extrema eficiência) dados dentro do banco de dados, NADA MAIS 
que isso....
Nesse contexto, o que o DBMS_OUTPUT faz NÂO É imprimir coisa NENHUMA, é 
simplesmente colocar uma string num buffer, e Alguns ambientes capazes de 
executar rotinas PL/SQL (como o sqlplus) foram programados para reconhecer e 
exibir o conteúdo desse buffer... Yes ??? Então se a tua 
linguagem/ambiente/tool de programação de onde vc tá chamando o PL/SQL não 
exibe nada, COM CERTEZA ela simplesmente Não Foi Programada para reconhecer e 
exibir o conteúdo do buffer.... Tá claro ? É alguma coisa EXTERNA ao PL/SQL e 
que o PL/SQL Não Tem Como interferir... Porém antes de desistir Tenha ** 
certeza ** que a sua tool/linguagem de programação Realmente Não Foi programada 
para reconhecer o buffer do DBMS_OUTPUT (** muitas ** tem esse Suporte mas 
simplesmente não está Ativado), e se tiver Dúvidas sobre isso numa outra 
mensagem *** DETALHE EXATAMENTE ** qual é essa tool/linguagem/ambiente de 
programação que vc está usando, que eventualmente quem trabalhar com ela/a 
conhecer pode palpitar : por exemplo, APEX rodando num web browser em princípio 
não tem esse Suporte built-in mas 
http://oraclequirks.blogspot.com.br/2007/08/practical-example-of-using-global.html
 exemplifica como se ler o conteúdo do buffer do DBMS_OUTPUT, persistir numa 
GTT e aí é trivial fazer um select na GTT dentro da aplicação...
 Registro aqui, em AINDA OUTRA variação possível, que desde muito tempo nós 
sempre tivemos a chance de chamar de dentro do PL/SQL rotinas feitas em 
linguagens que tem acesso ao hardware/periféricos como exibição em tela, 
impressoras e quetais : duas das mais comuns são C (via EXTERNAL PROCEDURES) e 
Java (via JVM interna no RDBMS Oracle, se disponível na sua instalação) : não 
vou usar esse recurso, entre outras questões porque ele demanda Conhecimento e 
Pesquisa, mas fica a Possibilidade...

O que vc pode fazer num caso onde o buffer do DBMS_OUTPUT não tá sendo 
reconhecido/impresso pela tua tool/ambiente que chama a rotina PL/SQL E não é 
viável debugar no SQL Developer ou similares é :

a) o MAIS ÓBVIO, instrumentar o teu programa que vai chamar as rotinas PL/SQL 
para imprimir o nome da rotina que vai chamar : por exemplo, se fosse um 
programa C poderia ser algo do tipo :

....
printf('Vou chamar a rotina nomedapackage.proc1');
exec nomedapackage.proc1();
printf('Vou Chamar a rotina nomedapackage.proc2');
exec nomedapackage.proc2();
....

(Como eu disse acima, é TOTALMENTE PARTE DA ARQUITETURA proposta vc desenvolver 
front-end em alguma outra linguagem/tool E desenvolver o back-end/manipulação 
de dados em PL/SQL que será chamado pelo front-end : justamente por isso a 
Oracle sempre primou por disponibilizar acesso à rotinas PL/SQL stored  para o 
mais amplo espectro de linguagem/ambientes)...

Uma variação do tema é vc acionar o PL/SQL profiler , veja 
oracle-base.com/articles/11g/plsql-hierarchical-profiler-11gr1 para exemplo

OU

b) instrumentar o PL/SQL para que ele mande uma mensagem assim que começar a 
rotina : como vc tentou fazer com dbms_output e não conseguiu, outra opção pra 
isso seria vc colocar uma mensagem curta na coluna CLIENT_INFO da view interna 
V$SESSION (essa coluna é reservada para isso) e aí a tua aplicação abre uma 
nova janela, conecta no banco e fica fazendo pooling nessa view interna e 
imprime o conteúdo da coluna : 
www.toadworld.com/platforms/oracle/w/wik...info-set-client-info é um exemplo de 
uso da DBMS_APPLICATION, que é a built-in que vc usaria nas suas rotinas PL/SQL

OU

c) se vc quer saber o nome da rotina que está sendo executada ** SEM ** 
intrumentar nada, ie, sem escrever nada/sem alterar nem a sua aplicação nem as 
suas rotinas PL/SQL, a opção seria acompanhar a execução pelas views X$ 
internas : em asktom.oracle.com/pls/asktom/f?p=100:11:...tion_id:767025833873 
eu dou um exemplo...

[]s

Chiappa

OBS : há sempre a possibilidade de vc obter a lista de rotinas executadas 
post-mortem, após a execução, via TRACE : entendo que não é isso que vc quer, 
mas lembremos que existe a possibilidade...

Responder a