почему я не могу остановить свою программу pl/sql в точке останова, которую я установил в TOAD

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

  •  19-09-2019
  •  | 
  •  

Вопрос

у меня есть простая хранимая процедура oracle proc1 следующим образом:

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;

владельцем proc1 является sys.sys имеет достаточно привилегий для отладки proc1, как показывает следующая команда sql:

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

я получу следующий результат:

DEBUG CONNECT SESSION
DEBUG ANY PROCEDURE

я использую oracle 11g, как показывают следующие команды sql:

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

верхние запросы дают мне:

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,

и

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

в TOAD я устанавливаю точку останова на proc1, затем нажимаю кнопку «выполнить plsql с помощью отладчика».TOAD запустите proc1 и немедленно отобразите результат.Он просто не останавливается на точке останова.Я не знаю, почему.Кто-нибудь когда-нибудь сталкивался с этой проблемой?как ты это исправишь?Большое спасибо!

пс:я использую жабу 9.7.2

Это было полезно?

Решение

Где именно вы ставите точку останова?Надеюсь, ты не кладешь это на CREATE PROCEDURE линия.

Если вы поместите его так, он не будет работать (этот оператор только создает процедуру, но не выполняет ее).Вам нужно откуда-то вызвать proc1 и поставить точку останова на строке, где он вызывается, вот так:

BEGIN
   proc1; -- place your breakpoint on this line
END;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top