Por que não consigo parar meu programa PL/SQL no BreakPoint, que eu coloquei no sapo

StackOverflow https://stackoverflow.com/questions/1706163

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu tenho um procedimento armazenado Oracle simples, como seguinte:

CREATE OR REPLACE PROCEDURE SYS.proc1
IS
   total   NUMBER := 0;
   temp    INTEGER := 0;
BEGIN
   FOR i IN 1 .. 5
   LOOP
      temp := 2 * i;
      total := total + temp;
   END LOOP;

   DBMS_OUTPUT.put_line (total);
END;

O proprietário do Proc1 é o SYS. O SYS tem privilégios suficientes para depurar o PROC1 como mostra o comando sql sql:

SELECT *
  FROM session_privs
 WHERE privilege LIKE '%DEBUG%';

Vou obter o seguinte resultado:

DEBUG CONNECT SESSION
DEBUG ANY PROCEDURE

Eu uso o Oracle 11g como mostra os seguintes comandos SQL:

SELECT * FROM v$database;
SELECT * FROM v$instance;

As consultas superiores me dão:

1223277241,ORCL,8/21/2009 5:28:25 PM,886308,8/21/2009 5:28:28 PM,1,10/15/2007 10:08:59 AM,NOARCHIVELOG,3510666,3399439,CURRENT,8/21/2009 5:28:26 PM,10008,3536169,11/10/2009 3:16:51 PM,NOT ALLOWED,8/21/2009 5:28:25 PM,READ WRITE,MAXIMUM PERFORMANCE,UNPROTECTED,ENABLED,1223308473,1223308473,PRIMARY,886308,DISABLED,SESSIONS ACTIVE,DISABLED,NONE,NO,NO,NO,NO,7,Microsoft Windows IA (32-bit),2,2,3536339,NO,NO,NO,orcl,0,DISABLED,,0,,,NO,,NO,

e

1,orcl,WD00070136,11.1.0.6.0,11/9/2009 11:04:29 AM,OPEN,NO,1,STOPPED,,ALLOWED,NO,ACTIVE,PRIMARY_INSTANCE,NORMAL,NO

No Toad, defino o ponto de interrupção no Proc1 e clico no botão "Executar o PLSQL com o depurador". Toad Run Proc1 e exiba o resultado imediatamente. Simplesmente não para no ponto de interrupção. Eu não sei por quê. Alguém já se depara com esse problema? Como você corrige isso? Ótimo obrigado!

PS: Eu uso o Toad 9.7.2

Foi útil?

Solução

Onde exatamente você coloca seu ponto de interrupção? Espero que você não o coloque no CREATE PROCEDURE linha.

Se você o colocar sobre isso, ele não funciona (essa declaração só cria o procedimento, ela não a executa). Você precisa ligar para o PROC1 de algum lugar e colocar o ponto de interrupção na linha onde é chamado, assim:

BEGIN
   proc1; -- place your breakpoint on this line
END;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top