Разрабатывая приложение, вы так или иначе сталкиваетесь с ошибками выполнения и проектирования формы, идентифицировать которые бывает иногда просто, а иногда очень проблематично. Каждый разработчик знает, что
Под методами
Комментарии помогают не только оставлять пояснения к тексту программы, но и комментировать фрагменты программы, помечая ее как невыполнимую часть кода. Комментарии относятся к очень простому методу
DECLARE Val1 number; Val2 number; BEGIN Val1:=1/0; Val2:=2+3; Message(val2); END;
Если вы попробуете выполнить вышеописанный пример, то получите ошибку "ORA-01476". Для того чтобы узнать, какой оператор его вызвал, val1 или val2, вам достаточно закомментировать оператор val1 и попробовать выполнить программу снова.
DECLARE Val1 number; Val2 number; BEGIN -- Val1:=1/0; -- место предполагаемой ошибки закомментировано. Val2:=2+3; Message(val2); END;
Выполнив этот пример, вы увидите, как после комментирования оператора val1 ошибка исчезнет и на экране появится сообщение со значением val2. Вам станет сразу ясно, какая из строк возбуждает
Сообщение - это еще один способ отслеживания выполняемого кода программы. Встроенная процедура MESSAGE позволяет вам выводить любое сообщение на экран. Расположив процедуру под наблюдаемым оператором и передав его в качестве параметра, вы можете узнать его значение в ходе выполнения программы. Сообщения могут выводиться в статусной строке формы, для этого свойство "Console Window" формы должно быть правильно настроено, или на экран. В предыдущем примере мы использовали сообщение для вывода на экран значения переменной.
Сообщения - это одна из самых часто используемых процедур, так как применяется она не только для вывода тематических сообщений пользователю, но и ошибок. Процедура MESSAGE дает гораздо больший эффект, если используется совместно с процедурами и PAUSE.
синхронизирует экран терминала и внутреннее состояние формы, то есть обновляет вывод на экран (рис. 9.1) для отображения информации, которую Forms имеет в своем внутреннем представлении экрана. Другими словами, гарантирует вывод сообщения на экран в требуемой точке кода. Ниже приведен пример использования процедуры.
message('Сообщение 1');
synchronize;
message('Сообщение 2');
synchronize;
message('Сообщение 3');
synchronize;
PAUSE синхронизирует вывод на экран и приостанавливает работу приложения до тех пор, пока оператор не нажмет клавишу подтверждения. PAUSE выводит
(рис 9.1) Вывод сообщения на экран.
(рис 9.2) Сообщение команды PAUSEmessage('Сообщение 1');
PAUSE;
Что касается ограничений, то здесь нужно заметить, что длина выводимого сообщения не может превышать 200 символов. Не злоупотребляйте сообщениями и не забывайте комментировать отладочные сообщения. Так, например, сообщение, забытое в цикле, может привести к большим неудобствам. Чрезмерное количество сообщений опасно тем, что возникшая ошибка может быть перекрыта вашим сообщением, хотя этого можно избежать, если использовать MESSAGE совместно с командой .
WHEN-BUTTON-PRESSED триггер вызвал необработанное исключение ORA - 01476". Ниже приведен рисунок, на котором изображен результат ошибочного действия пользователя, а также сам оператор, возбуждающий
BEGIN :result:=:delimoe/:delitel; END;
(рис 9.3) Деление на ноль
В вышеописанном примере мы вызываем ошибку ZERO_DIVIDE делением 10 на 0. В этом случае мы получаем сообщение "ORA-01476" без описания причины. Для обработки этой EXCEPTION. В случае возникновения EXCEPTION. BEGIN-END.
BEGIN :result:=:delimoe/:delitel; EXCEPTION WHEN ZERO_DIVIDE THEN :delitel:=1; END;
Вы также можете существенно сократить время на поиск причины ошибки, если обработаете
BEGIN :result:=:delimoe/:delitel; EXCEPTION WHEN ZERO_DIVIDE THEN message(sqlerrm); END;
(рис 9.4) Сообщение об ошибке
Сообщение об ошибке типа "ORA-01476:
DECLARE
myexcept exception;
BEGIN
IF :delitel =0 THEN
RAISE myexcept;
ELSE :result:=:delimoe/:delitel;
END IF;
EXCEPTION
WHEN myexcept THEN
message('Деление на ноль. Делитель должен иметь значение, отличное от нуля');
END;
(рис 9.5) Пользовательская исключительная ситуация
Сервер Oracle может связывать определенные EXCEPTION_INIT. Ниже приведен пример, в котором показан пример объявления прагмы.
DECLARE
myexcept exception;
pragma exception_init(myexcept,-1476);
BEGIN
:result:=:delimoe/:delitel;
EXCEPTION
WHEN myexcept THEN
message('Деление на ноль. Делитель должен иметь значение, отличное от нуля');
END;
Как вы уже успели заметить, прагма EXCEPTION_INIT в качестве параметров принимает имя
Процедура RAISE_APPLICATION_ERROR - это еще один способ возбуждения EXCEPTION_INIT. Ниже приведен синтаксис процедуры и пример ее использования.
RAISE_APPLICATION_ERROR (номер_ошибки, сообщение, TRUE|FALSE]);
Номер_ошибки - любое отрицательное число, которое лежит в диапазоне от [-20999, -20000].
Сообщение - это сообщение, выводимое при возбуждении
TRUE | FALSE - этот параметр является необязательным; если его значение истинно, то ошибка добавляется к стеку ошибок, иначе все предыдущие ошибки будут заменены.
Неименованные OTHERS. OTHERS - это обработчик OTHERS.
(рис 9.6) Обработчик OTHERS
Встроенные функции SQLERRM и SQLCODE возвращают текст и OTHERS, так как они позволяют установить причину возникновения ошибки.
(рис 9.7) Сообщение SQLERRM и SQLCODE
Эта функция возвращает номер последней ошибки, возникшей в базе данных. Эта функция не имеет ограничений в использовании. Для рекурсивных ошибок DBMS_ERROR_CODE возвращает код первого сообщения в стеке. Рассмотрим пример, в котором обработаем ошибку ORA-01438 is "value too large for column", но прежде чем приступить к выполнению примера, обратите внимание на синтаксис функции.
Пример 1. Триггер ON-ERROR. Обработка ошибки
DECLARE
eсode NUMBER := ERROR_CODE;
dbms_ecode NUMBER;
dbms_etext VARCHAR2(200);
BEGIN
IF ecode = 40508 THEN
Dbms_ecode := DBMS_ERROR_CODE;
Dbms_etext := DBMS_ERROR_TEXT;
IF dbms_ecode = -1438 THEN
Message('Введенное значение превышает допустимое! Введите заново!);
ELSE
Message('Вставка не выполнена, так как '||dbmserrtext);
END IF;
END IF;
Несмотря на то что обработчик OTHERS ловит все типичные
312
"Делитель" пустым, и вы увидите, что ничего не происходит. Обычно такие ситуации закрываются с помощью настройки определенных свойств элемента. Вы можете установить для поля делитель свойство "Required" равным "True", делая элемент обязательным для ввода. Но можно поступить и по-другому, воспользовавшись функцией NVL, как показано ниже (рис. 9.8).
DECLARE
myexcept exception;
pragma exception_init(myexcept,-1476);
BEGIN
:result:=:delimoe/NVL(:delitel,5);
EXCEPTION
WHEN myexcept THEN message('Деление на ноль. Делитель должен иметь значение, отличное от нуля');
END;
(рис 9.8) Обработка NULL-значенийПравильная обработка
В этом разделе мы познакомимся с более мощным инструментом
лизировать переменные, параметры,
(рис 9.9) Debug ConsoleДля того чтобы лучше понять принцип работы отладчика, рассмотрим все разделы на примере. Для выполнения примера выполните следующие действия:
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; result1 number; result2 number; result3 number; BEGIN value1:=1; value2:=2; :global.result1:=value1+value2; result2:=1/0; :parameter.result3:=value2-value1; END;
Для того чтобы вызвать Forms
Точка останова - это отметка, сообщающая форме, в каком месте нужно остановить выполнение программы и вызвать отладчик. Точки останова можно устанавливать только на begin, end, declare, if вызовут сообщение об ошибке. Точка останова имеет вид красной окружности и устанавливается слева от
Для того чтобы установить
Вы можете value1, value2, :global.result и запустите форму в режиме
(рис 9.10) Установка точки останова
(рис 9.11) Текущая точка остановаДля того чтобы приступить к
Приступим к рассмотрению разделов Debug Console и начнем с раздела Stack.
(рис 9.12) Окно "Стек"Нажатием кнопки мы инициировали событие WHEN-BUTTON-PRESSED, которое является точкой входа в
Имя_модуля.программная_единица.[имя_блока.имя_элемента]::номер_ строки
Окно Variables (рис. 9.13) предназначено для вывода значений переменных кадра стека. Для того чтобы активировать окно переменных, выполните команду Debug |
(рис 9.13) Окно "Переменные"Как видно на рисунке, окно отражает имя, значение и тип переменных стека, а также имя текущего кадра стека в поле "read only. Значения всех не
Для того чтобы добавить переменную в окно просмотра, выполните следующие действия:
(рис 9.14) Окно "Watch"Для того чтобы удалить переменную из окна просмотра, выполните следующие действия:
Окно "Form Values" отражает значения всех элементов и параметров
Как видно на рис. 9.15, окно содержит две вкладки - "Items" и "Parameters", а также имя текущего модуля в поле "Module". Вкладка "Items" отображает значение элементов блока, а вкладка "Parameters" отображает имя параметра и его значение. Вы можете изменять значения
(рис 9.15) Окно "Form Values"элементов, если они не относятся к числу read only, для тестирования возможных вариантов поведения программы. Например, значение элемента display item нельзя модифицировать.
Вы можете использовать окно "PL/SQL Packages" для просмотра выполняемого PL/SQL-пакета. В этом окне вы можете отслеживать только переменные пакета, все остальные значения, такие как возвращаемое значение функции и переменные, задействованные в методах тела пакета, будут отображены в окне переменных кадра стека DEB.SPECK_PACK.
Как показано на рис. 9.16, окно "PL/SQL Packages" состоит из двух столбцов, отображающих имя и значение переменной, и радиогруппы переключателей, управляющих отображением пакетов. Вы можете выбирать, какие пакеты отображать, а какие нет; так, например, выбирая переключатель "Client", вы получите возможность просматривать только клиентские пакеты, то есть те, которые определены непосредственно в модуле формы. Для того чтобы отобразить серверные и клиентские пакеты, нужно выбрать переключатель "All". В поле "Packages" отображается имя текущего пакета, значения переменных которого отображаются в области окна.
Для того чтобы посмотреть, как отображаются данные в этом окне, создайте простой пакет, скрипт которого приведен в листинге 1.
PACKAGE speck_pack IS X number:=2; FUNCTION a RETURN NUMBER; END; PACKAGE BODY speck_pack IS FUNCTION A RETURN NUMBER IS val number; BEGIN val:=1+2; RETURN X; END; END;
(рис 9.16) Окно "PL/SQL Packages"Добавьте в триггер WHEN-BUTTON-PRESSED новую переменную для вызова функции пакета. Ниже приведен листинг триггера, в котором новые строки выделены жирным шрифтом.
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; result1 number; result2 number; result4 number; BEGIN value1:=1; value2:=2; result4:=speck_pack.a; :global.result1:=value1+value2; --result2:=1/0; :parameter.result3:=value2-value1; END;
Теперь для того, чтобы просмотреть значения переменных пакета во время выполнения формы в режиме value1 и value2, и нажмите кнопку. После того как выполнение кода прервется на операторе value1, продолжите result4, отладчик перемещает вас в программный модуль пакета и помещает в
Используйте окно "Global/
Для того чтобы просмотреть значение глобальной переменной, нажимайте кнопку "Step Into" до тех пор, пока курсор не покинет оператор :global.result1. Значения глобальных переменных можно изменять, а вот значения переменных Command Line изменять нельзя, так как все они имеют статус read only. Все DATE_ TREASHOLD, EFFECTIVE_DATE, MESSAGE_LEVEL и SUPRESS_ WORKING являются теми самыми исключениями, значения которых можно изменять.
(рис 9.17) Окно "Global/System Variables"
Окно "
Как показано на рис. 9.18, вкладка "
Вкладка "Break On Exceptions" отображает типичные
(рис 9.18) Окно "Breakpoints"
(рис 9.19) Вкладка "Break On Exceptions".Для того чтобы понять, как установить флажок и вывести на экран сообщение, показанное на рисунке, требуется выбрать точку останова, а затем, перейдя на вкладку "Break On Exceptions", установить флажок на
рывания покинет оператор, возбуждающий
Вы также можете управлять
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; result1 number; result2 number; result4 number; BEGIN value1:=1; value2:=2; result4:=speck_pack.a; :global.result1:=value1+value2; IF Debug.Getn(value2) > 0 THEN raise Debug.Break; :parameter.result3:=value2-value1; END;
В этом случае, если значение переменой value2 окажется большим 0, выполнится прерывание.
Используя процедуру (рис. 9.20) пакета Debug, вы можете перевести форму из нормального режима в режим
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; BEGIN value1:=1; value2:=2; DEBUG.ATTACH; :global.result1:=value1+value2; :parameter.result3:=value2-value1; END;
(рис 9.20) Сообщение Debug.AttachДля того чтобы активизировать
(рис 9.21) Окно "Attach Debug to"Вы можете передать выполнение кода отладчику, подобно тому, как это делает точка останова, используя процедуру
(рис 9.22) Процедура Debug.SuspendУправление отладкой
Когда мы нажимали кнопку "Step Into", мы переходили к выполнению следующей строки кода, то есть отлаживали код построчно. Помимо кнопки "Step Into" на панели инструментов Debug имеется еще несколько кнопок для управления ходом
(рис 9.23) Панель DebugРазрабатывая приложение, вы так или иначе сталкиваетесь с ошибками выполнения и проектирования формы, идентифицировать которые бывает иногда просто, а иногда очень проблематично. Каждый разработчик знает, что
Под методами
Комментарии помогают не только оставлять пояснения к тексту программы, но и комментировать фрагменты программы, помечая ее как невыполнимую часть кода. Комментарии относятся к очень простому методу
DECLARE Val1 number; Val2 number; BEGIN Val1:=1/0; Val2:=2+3; Message(val2); END;
Если вы попробуете выполнить вышеописанный пример, то получите ошибку "ORA-01476". Для того чтобы узнать, какой оператор его вызвал, val1 или val2, вам достаточно закомментировать оператор val1 и попробовать выполнить программу снова.
DECLARE Val1 number; Val2 number; BEGIN -- Val1:=1/0; -- место предполагаемой ошибки закомментировано. Val2:=2+3; Message(val2); END;
Выполнив этот пример, вы увидите, как после комментирования оператора val1 ошибка исчезнет и на экране появится сообщение со значением val2. Вам станет сразу ясно, какая из строк возбуждает
Сообщение - это еще один способ отслеживания выполняемого кода программы. Встроенная процедура MESSAGE позволяет вам выводить любое сообщение на экран. Расположив процедуру под наблюдаемым оператором и передав его в качестве параметра, вы можете узнать его значение в ходе выполнения программы. Сообщения могут выводиться в статусной строке формы, для этого свойство "Console Window" формы должно быть правильно настроено, или на экран. В предыдущем примере мы использовали сообщение для вывода на экран значения переменной.
Сообщения - это одна из самых часто используемых процедур, так как применяется она не только для вывода тематических сообщений пользователю, но и ошибок. Процедура MESSAGE дает гораздо больший эффект, если используется совместно с процедурами и PAUSE.
синхронизирует экран терминала и внутреннее состояние формы, то есть обновляет вывод на экран (рис. 9.1) для отображения информации, которую Forms имеет в своем внутреннем представлении экрана. Другими словами, гарантирует вывод сообщения на экран в требуемой точке кода. Ниже приведен пример использования процедуры.
message('Сообщение 1');
synchronize;
message('Сообщение 2');
synchronize;
message('Сообщение 3');
synchronize;
PAUSE синхронизирует вывод на экран и приостанавливает работу приложения до тех пор, пока оператор не нажмет клавишу подтверждения. PAUSE выводит
(рис 9.1) Вывод сообщения на экран.
(рис 9.2) Сообщение команды PAUSEmessage('Сообщение 1');
PAUSE;
Что касается ограничений, то здесь нужно заметить, что длина выводимого сообщения не может превышать 200 символов. Не злоупотребляйте сообщениями и не забывайте комментировать отладочные сообщения. Так, например, сообщение, забытое в цикле, может привести к большим неудобствам. Чрезмерное количество сообщений опасно тем, что возникшая ошибка может быть перекрыта вашим сообщением, хотя этого можно избежать, если использовать MESSAGE совместно с командой .
WHEN-BUTTON-PRESSED триггер вызвал необработанное исключение ORA - 01476". Ниже приведен рисунок, на котором изображен результат ошибочного действия пользователя, а также сам оператор, возбуждающий
BEGIN :result:=:delimoe/:delitel; END;
(рис 9.3) Деление на ноль
В вышеописанном примере мы вызываем ошибку ZERO_DIVIDE делением 10 на 0. В этом случае мы получаем сообщение "ORA-01476" без описания причины. Для обработки этой EXCEPTION. В случае возникновения EXCEPTION. BEGIN-END.
BEGIN :result:=:delimoe/:delitel; EXCEPTION WHEN ZERO_DIVIDE THEN :delitel:=1; END;
Вы также можете существенно сократить время на поиск причины ошибки, если обработаете
BEGIN :result:=:delimoe/:delitel; EXCEPTION WHEN ZERO_DIVIDE THEN message(sqlerrm); END;
(рис 9.4) Сообщение об ошибке
Сообщение об ошибке типа "ORA-01476:
DECLARE
myexcept exception;
BEGIN
IF :delitel =0 THEN
RAISE myexcept;
ELSE :result:=:delimoe/:delitel;
END IF;
EXCEPTION
WHEN myexcept THEN
message('Деление на ноль. Делитель должен иметь значение, отличное от нуля');
END;
(рис 9.5) Пользовательская исключительная ситуация
Сервер Oracle может связывать определенные EXCEPTION_INIT. Ниже приведен пример, в котором показан пример объявления прагмы.
DECLARE
myexcept exception;
pragma exception_init(myexcept,-1476);
BEGIN
:result:=:delimoe/:delitel;
EXCEPTION
WHEN myexcept THEN
message('Деление на ноль. Делитель должен иметь значение, отличное от нуля');
END;
Как вы уже успели заметить, прагма EXCEPTION_INIT в качестве параметров принимает имя
Процедура RAISE_APPLICATION_ERROR - это еще один способ возбуждения EXCEPTION_INIT. Ниже приведен синтаксис процедуры и пример ее использования.
RAISE_APPLICATION_ERROR (номер_ошибки, сообщение, TRUE|FALSE]);
Номер_ошибки - любое отрицательное число, которое лежит в диапазоне от [-20999, -20000].
Сообщение - это сообщение, выводимое при возбуждении
TRUE | FALSE - этот параметр является необязательным; если его значение истинно, то ошибка добавляется к стеку ошибок, иначе все предыдущие ошибки будут заменены.
Неименованные OTHERS. OTHERS - это обработчик OTHERS.
(рис 9.6) Обработчик OTHERS
Встроенные функции SQLERRM и SQLCODE возвращают текст и OTHERS, так как они позволяют установить причину возникновения ошибки.
(рис 9.7) Сообщение SQLERRM и SQLCODE
Эта функция возвращает номер последней ошибки, возникшей в базе данных. Эта функция не имеет ограничений в использовании. Для рекурсивных ошибок DBMS_ERROR_CODE возвращает код первого сообщения в стеке. Рассмотрим пример, в котором обработаем ошибку ORA-01438 is "value too large for column", но прежде чем приступить к выполнению примера, обратите внимание на синтаксис функции.
Пример 1. Триггер ON-ERROR. Обработка ошибки
DECLARE
eсode NUMBER := ERROR_CODE;
dbms_ecode NUMBER;
dbms_etext VARCHAR2(200);
BEGIN
IF ecode = 40508 THEN
Dbms_ecode := DBMS_ERROR_CODE;
Dbms_etext := DBMS_ERROR_TEXT;
IF dbms_ecode = -1438 THEN
Message('Введенное значение превышает допустимое! Введите заново!);
ELSE
Message('Вставка не выполнена, так как '||dbmserrtext);
END IF;
END IF;
Несмотря на то что обработчик OTHERS ловит все типичные
312
"Делитель" пустым, и вы увидите, что ничего не происходит. Обычно такие ситуации закрываются с помощью настройки определенных свойств элемента. Вы можете установить для поля делитель свойство "Required" равным "True", делая элемент обязательным для ввода. Но можно поступить и по-другому, воспользовавшись функцией NVL, как показано ниже (рис. 9.8).
DECLARE
myexcept exception;
pragma exception_init(myexcept,-1476);
BEGIN
:result:=:delimoe/NVL(:delitel,5);
EXCEPTION
WHEN myexcept THEN message('Деление на ноль. Делитель должен иметь значение, отличное от нуля');
END;
(рис 9.8) Обработка NULL-значенийПравильная обработка
В этом разделе мы познакомимся с более мощным инструментом
лизировать переменные, параметры,
(рис 9.9) Debug ConsoleДля того чтобы лучше понять принцип работы отладчика, рассмотрим все разделы на примере. Для выполнения примера выполните следующие действия:
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; result1 number; result2 number; result3 number; BEGIN value1:=1; value2:=2; :global.result1:=value1+value2; result2:=1/0; :parameter.result3:=value2-value1; END;
Для того чтобы вызвать Forms
Точка останова - это отметка, сообщающая форме, в каком месте нужно остановить выполнение программы и вызвать отладчик. Точки останова можно устанавливать только на begin, end, declare, if вызовут сообщение об ошибке. Точка останова имеет вид красной окружности и устанавливается слева от
Для того чтобы установить
Вы можете value1, value2, :global.result и запустите форму в режиме
(рис 9.10) Установка точки останова
(рис 9.11) Текущая точка остановаДля того чтобы приступить к
Приступим к рассмотрению разделов Debug Console и начнем с раздела Stack.
(рис 9.12) Окно "Стек"Нажатием кнопки мы инициировали событие WHEN-BUTTON-PRESSED, которое является точкой входа в
Имя_модуля.программная_единица.[имя_блока.имя_элемента]::номер_ строки
Окно Variables (рис. 9.13) предназначено для вывода значений переменных кадра стека. Для того чтобы активировать окно переменных, выполните команду Debug |
(рис 9.13) Окно "Переменные"Как видно на рисунке, окно отражает имя, значение и тип переменных стека, а также имя текущего кадра стека в поле "read only. Значения всех не
Для того чтобы добавить переменную в окно просмотра, выполните следующие действия:
(рис 9.14) Окно "Watch"Для того чтобы удалить переменную из окна просмотра, выполните следующие действия:
Окно "Form Values" отражает значения всех элементов и параметров
Как видно на рис. 9.15, окно содержит две вкладки - "Items" и "Parameters", а также имя текущего модуля в поле "Module". Вкладка "Items" отображает значение элементов блока, а вкладка "Parameters" отображает имя параметра и его значение. Вы можете изменять значения
(рис 9.15) Окно "Form Values"элементов, если они не относятся к числу read only, для тестирования возможных вариантов поведения программы. Например, значение элемента display item нельзя модифицировать.
Вы можете использовать окно "PL/SQL Packages" для просмотра выполняемого PL/SQL-пакета. В этом окне вы можете отслеживать только переменные пакета, все остальные значения, такие как возвращаемое значение функции и переменные, задействованные в методах тела пакета, будут отображены в окне переменных кадра стека DEB.SPECK_PACK.
Как показано на рис. 9.16, окно "PL/SQL Packages" состоит из двух столбцов, отображающих имя и значение переменной, и радиогруппы переключателей, управляющих отображением пакетов. Вы можете выбирать, какие пакеты отображать, а какие нет; так, например, выбирая переключатель "Client", вы получите возможность просматривать только клиентские пакеты, то есть те, которые определены непосредственно в модуле формы. Для того чтобы отобразить серверные и клиентские пакеты, нужно выбрать переключатель "All". В поле "Packages" отображается имя текущего пакета, значения переменных которого отображаются в области окна.
Для того чтобы посмотреть, как отображаются данные в этом окне, создайте простой пакет, скрипт которого приведен в листинге 1.
PACKAGE speck_pack IS X number:=2; FUNCTION a RETURN NUMBER; END; PACKAGE BODY speck_pack IS FUNCTION A RETURN NUMBER IS val number; BEGIN val:=1+2; RETURN X; END; END;
(рис 9.16) Окно "PL/SQL Packages"Добавьте в триггер WHEN-BUTTON-PRESSED новую переменную для вызова функции пакета. Ниже приведен листинг триггера, в котором новые строки выделены жирным шрифтом.
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; result1 number; result2 number; result4 number; BEGIN value1:=1; value2:=2; result4:=speck_pack.a; :global.result1:=value1+value2; --result2:=1/0; :parameter.result3:=value2-value1; END;
Теперь для того, чтобы просмотреть значения переменных пакета во время выполнения формы в режиме value1 и value2, и нажмите кнопку. После того как выполнение кода прервется на операторе value1, продолжите result4, отладчик перемещает вас в программный модуль пакета и помещает в
Используйте окно "Global/
Для того чтобы просмотреть значение глобальной переменной, нажимайте кнопку "Step Into" до тех пор, пока курсор не покинет оператор :global.result1. Значения глобальных переменных можно изменять, а вот значения переменных Command Line изменять нельзя, так как все они имеют статус read only. Все DATE_ TREASHOLD, EFFECTIVE_DATE, MESSAGE_LEVEL и SUPRESS_ WORKING являются теми самыми исключениями, значения которых можно изменять.
(рис 9.17) Окно "Global/System Variables"
Окно "
Как показано на рис. 9.18, вкладка "
Вкладка "Break On Exceptions" отображает типичные
(рис 9.18) Окно "Breakpoints"
(рис 9.19) Вкладка "Break On Exceptions".Для того чтобы понять, как установить флажок и вывести на экран сообщение, показанное на рисунке, требуется выбрать точку останова, а затем, перейдя на вкладку "Break On Exceptions", установить флажок на
рывания покинет оператор, возбуждающий
Вы также можете управлять
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; result1 number; result2 number; result4 number; BEGIN value1:=1; value2:=2; result4:=speck_pack.a; :global.result1:=value1+value2; IF Debug.Getn(value2) > 0 THEN raise Debug.Break; :parameter.result3:=value2-value1; END;
В этом случае, если значение переменой value2 окажется большим 0, выполнится прерывание.
Используя процедуру (рис. 9.20) пакета Debug, вы можете перевести форму из нормального режима в режим
WHEN-BUTTON-PRESSED DECLARE value1 number; value2 number; BEGIN value1:=1; value2:=2; DEBUG.ATTACH; :global.result1:=value1+value2; :parameter.result3:=value2-value1; END;
(рис 9.20) Сообщение Debug.AttachДля того чтобы активизировать
(рис 9.21) Окно "Attach Debug to"Вы можете передать выполнение кода отладчику, подобно тому, как это делает точка останова, используя процедуру
(рис 9.22) Процедура Debug.SuspendУправление отладкой
Когда мы нажимали кнопку "Step Into", мы переходили к выполнению следующей строки кода, то есть отлаживали код построчно. Помимо кнопки "Step Into" на панели инструментов Debug имеется еще несколько кнопок для управления ходом
(рис 9.23) Панель DebugДля получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.