вторник, 24 мая 2011 г.

Расширенные функции Oracle 10g по работе со стеком ошибок

    В Oracle 10g возможности для работы со стеком ошибок были расширены. В пакете DBMS_UTILITY появились функции, которые позволяют получить больше информации о том, как ведёт себя программа в случае возникновения исключительной ситуации.

    Вот эти функции:
  • FORMAT_ERROR_BACKTRACE - позволяет получить строку из программы, в которой произошла исключительная  ситуация.
  • FORMAT_CALL_STACK - отображает на экране стэк программы на момент возникновения исключения.
  • FORMAT_ERROR_STACK - позволяет получить “полное” сообщение об ошибке (дело в том, что привычная всем функция SQLERRM имеет ограничение на длину выводимого текста 512 символов, новая функция имеет ограничение в 2000 символов).
  Самый простой пример, который демонстрирует работу этих функций выглядит так:
   DECLARE
     local_exception EXCEPTION;
     FUNCTION nested_local_function
     RETURN BOOLEAN IS
       retval BOOLEAN := FALSE;
     BEGIN
       RAISE local_exception;
       RETURN retval;
     END;
     BEGIN
       IF nested_local_function THEN
         dbms_output.put_line('No raised exception');
       END IF;
     EXCEPTION
       WHEN others THEN
         dbms_output.put_line('DBMS_UTILITY.FORMAT_CALL_STACK');
         dbms_output.put_line('------------------------------');
         dbms_output.put_line(dbms_utility.format_call_stack);
         dbms_output.put_line('DBMS_UTILITY.FORMAT_ERROR_BACKTRACE');
         dbms_output.put_line('-----------------------------------');
         dbms_output.put_line(dbms_utility.format_error_backtrace);
         dbms_output.put_line('DBMS_UTILITY.FORMAT_ERROR_STACK');
         dbms_output.put_line('-------------------------------');
         dbms_output.put_line(dbms_utility.format_error_stack);
     END;

   Если его выполнить, то получим:
DBMS_UTILITY.FORMAT_CALL_STACK
------------------------------
----- PL/SQL Call Stack -----
object    line     object
handle    number   name
20909240      18   anonymous block
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
-----------------------------------
ORA-06512: at line 7
ORA-06512: at line 11
DBMS_UTILITY.FORMAT_ERROR_STACK
-------------------------------
ORA-06510: PL/SQL: unhandled user-defined exception

Скорее всего, самой востребованной функцией будет - DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,  рекомендую ознакомиться с более интересным примеров стека ошибок на сайте документации по Oracle 10g: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_util.htm#i1003874

Комментариев нет:

Отправить комментарий