Como criar um Debug em linhas PL/SQL

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
carloscsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qui, 26 Jul 2012 8:55 am
" Pense diferente! - "

Ola,

Sou novo oracle... alguém poderia me aux. a criar um debug ... tipo toda vez que utilizar uma procedure ou função que atualize ou retorne uma informação ... cria um debug de todo processo que esta sendo feito, já ouvi que da para ser feito através de tela, se alguém tiver um exemplo.

Vlws!
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, beleza?

Cara, existem ferramentas que possuem essa opção de Debug (o PL/SQL Developer é "expert" nisso).
Porém, existem algumas formas "manuais" de debug, que a gente conhece:
  • Colocar mensagens DBMS_OUTPUT.PUT_LINE nos teus objetos (dessa forma você irá receber as mensagens em um bloco anônimo quando executar);
  • Criar uma tabela de mensageria e, por um determinado período, preencher essa tabela com as informações que necessita;
Caso o pessoal aqui utilize alguma outra, estarão postando aqui pra gente.

Essas são algumas que costumamos utilizar.

qualquer coisa, conte com a gente.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Carlos,

Bem vindo ao forum GLUFKE,

Existem várias formas de você implementar uma rotina de debug em seu código PL/SQL:

- Criar uma tabela de LOG e inserir registros na mesma conforme seu código PL/SQL é executado;
- Adcionar o pacote DBMS_OUTPUT (metodo PUT_LINE) em seu código PL/SQL (mas este comando pode apresentar
um limite máximo de mensagens geradas);
- Usar o pacote DBMS_APPLICATION_INFO em seu código PL/SQL;

No meu caso, eu gosto de usar a primeira e a ultima opção. E neste tópico vou descrever a útima.

Existe o pacote da ORACLE chamado DBMS_APPLICATION_INFO. Com ele você pode atualizar o valor de algumas colunas (MODULE,ACTION,CLIENT_INFO) da visão V$SESSION, permitindo em tempo real verificar o que o seu código PL/SQL está executando.

Execute pausadamente os seguintes comandos em uma sessão SQL*PLus (preferencialmente para o exemplo, use o SQL*PLus):

Selecionar tudo

SQL> SELECT MODULE,ACTION FROM V$SESSION WHERE audsid=userenv('sessionid');

SQL> EXEC DBMS_APPLICATION_INFO.SET_MODULE('SP_XPTO_PRODECURE','Executando');

SQL> SELECT MODULE,ACTION FROM V$SESSION WHERE audsid=userenv('sessionid');

SQL> EXEC DBMS_APPLICATION_INFO.SET_MODULE('','');

SQL> SELECT MODULE,ACTION FROM V$SESSION WHERE audsid=userenv('sessionid');
Note que as colunas MODULE e ACTION da V$SESSION para a sua sessão corrente foram atualizadas pela DBMS_APPLICATION_INFO.

Você pode utilizar este pacote para rotinas de execução longa:

Selecionar tudo

CREATE OR REPLACE PROCEDURE SP_XPTO_PROCEDURE
IS
  WTOTAL NUMBER :=0; 
  ....
BEGIN
  DBMS_APPLICATION_INFO.SET_MODULE('SP_XPTO_PRODECURE','Iniciando');
  ....
  FOR ... LOOP
      WTOTAL := WTOTAL+1;
      DBMS_APPLICATION_INFO.SET_MODULE('SP_XPTO_PRODECURE','Proces.Elemento '||WTOTAL);
      ...
  END LOOP;
  ..
  DBMS_APPLICATION_INFO.SET_MODULE('','');
EXCEPTIONS
  WHEN OTHERS THEN
       DBMS_APPLICATION_INFO.SET_MODULE('','');
       RAISE_APPLICATION_ERROR(....
END SP_XPTO_PROCEDURE;       
 
Espero ter conseguido lhe passar um exemplo que o ajude em sua codificação.

Abraços,

Sergio Coutinho
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 317
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Particularmente eu prefiro criar uma tabela para registro de log, mas aqui onde eu trabalho além de nós utilizarmos o DBMS_OUTPUT para testes no ambiente de desenvolvimento a existem os objetos em produção que utilizam a geração de arquivos com as informações necessárias.

Fica a sugestão.

Abç.,
carloscsilva
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qui, 26 Jul 2012 8:55 am
" Pense diferente! - "

Valeu Pessoal!!! Irei fazer alguns teste com todos, e verei qual o melhor para o meu caso.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 13 visitantes