Процедура отладки Oracle PL / SQL - с использованием $$ plsql_line - PullRequest
1 голос
/ 15 марта 2012

Я хочу создать процедуру, которая поможет с отладкой определенных переменных, и для повторного использования я хотел бы сохранить ее в своей собственной процедуре и передавать при необходимости определенную переменную, такую ​​как

debugz(var_x);

и процедура отладки будет делать следующее -

PROCEDURE debugz (var_x VARCHAR2(1000))
AS
BEGIN
DBMS_OUTPUT.put_line ('Variable value: '|| var_x || ' | Line number: ' || $$plsql_line ||' | Unit: '|| $$plsql_unit);
END;

Проблема в том, что я хочу, чтобы номер строки PL / SQL и модуль PL / SQL были основаны на том месте, где вызов процедурыпроисходит, то есть строка / единица «debugz(var_x);».Есть ли способ отладки для вывода этого номера строки без передачи дополнительной информации?

Ответы [ 4 ]

5 голосов
/ 15 марта 2012

Проверьте DBMS_UTILITY.FORMAT_CALL_STACK

Возможно, вам понадобится / вы захотите проанализировать вывод в зависимости от ваших точных требований, но может быть хорошим местом для начала.*

Также обратите внимание на DBMS_UTILITY.FORMAT_ERROR_BACKTRACE и DBMS_UTILITY.FORMAT_ERROR_STACK для обработки ошибок.

0 голосов
/ 26 апреля 2012

Вы пробовали удаленную отладку? Вот как вы можете сделать это в SQL Developer:

1) http://sueharper.blogspot.ca/2006/07/remote-debugging-with-sql-developer_13.html

2) Привилегии пользователя: предоставить EXECUTE для DBMS_DEBUG_JDWP пользователю USERXX; предоставить отладочную сессию USERXX; предоставить отладку ЛЮБОЙ ПРОЦЕДУРЕ для USERXX;

3) Настройка удаленной отладки при подключении USERXX в SQL Developer: Порт: 80 (используйте 4000, если не заблокирован брандмауэром) Локальный адрес: IP-адрес вашей локальной машины

4) Скомпилировать код (пакет, процедуру или функцию) в USERXX в SQL Developer для отладки

5) Установить точки останова в коде

6) На удаленном компьютере (это может быть ваше приложение, вызывающее код PLSQL): перед вызовом кода PLSQL запустите / включите следующее: DBMS_DEBUG_JDWP.CONNECT_TCP («IP-адрес в 3», порт в 3), когда он запускается, разработчик SQL переключится в режим отладки.

7) Запустить приложение или вызвать процедуру с пульта как USERXX

8) Разработчик SQL останавливается на первой точке останова, входит, просматривает / изменяет значения и т. Д.

0 голосов
/ 31 марта 2012

Существует очень хороший модуль пакета отладки, называемый debugf, который обеспечивает хорошую функциональность

Файл отладки содержит такую ​​информацию, как идентификатор сеанса, дата и время, вызываемые пакеты и номер строки каждого сообщения отладки, а такжесамо сообщение отладки

Пример использования приведен ниже

Это используется для инициализации отладки, первый параметр «ALL» означает все модули (могут быть функцией, процедурой или пакетом и т. д.) и значение SYSTEM.схема, которую я хочу отладить

 debug.init(p_modules => 'ALL',p_file =>'C:\debugf123\temp\test.txt',p_user =>'SYSTEM',p_show_date => 'YES',p_date_format =>'DD/MM/YYYY  HH24:MI:SS',p_name_len => 30,p_show_sesid => 'YES');

Эта схема работает как printf в C, и вы можете указать максимум 10 параметров, где v_word1 - параметр

debug.f('the first is %s',v_word1); 

Это то же самое, что и debug.f но здесь вы можете указать более 10 параметров

debug.fa('the third is %s and %s',debug.argv(v_word1,v_amount)); 

Исходный код этого пакета доступен по адресу

http://gerardnico.com/wiki/database/oracle/debugf

0 голосов
/ 18 марта 2012
OWA_UTIL.WHO_CALLED_ME(
   owner          OUT      VARCHAR2,
   name           OUT      VARCHAR2,
   lineno         OUT      NUMBER,
   caller_t       OUT      VARCHAR2);
...