(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Работаем с PL/SQL

Сью Хапер,

член Oracle ACE

Источник: журнал Otacle Magazine, #6, 2007г.

Редактирование, компиляция, запуск и отладка PL/SQL-кода легко выполняются в Oracle SQL Developer.

Наряду с другими возможностями Oracle SQL Developer предоставляет разработчикам баз данных и администраторам разнообразную среду для создания, редактирования, компиляции, выполнения и отладки PL/SQL-программ. Его возможности редактирования включают пользовательскую подсветку синтаксиса, закладки, завершитель кода, развертку кода и поиск/замену. Возможности отладчика особенно полезны для работы с более сложными пакетами, выполнения отладки с пропусками серии процедур, удаленной отладки (отладка инициализируется внешним клиентом или программой).

Эта статья знакомит с основными возможностями SQL Developer для работы с PL/SQL базы данных Oracle. Примеры статьи используют демонстрационную схему HR и пакет EMP_FETCHER - и то, и другое доступно при установке базы данных по умолчанию - и объектный тип EMP_REC, который будет создан. В ходе работы с примерами:

* выполняются PL/SQL-процедуры, функции и пакеты;

* редактирование PL/SQL-кода;

* компиляция PL/SQL-кода;

* отладка (как локально, так и удаленно) скомпилированного PL/SQL-кода.

С чего начать

Выполните следующие действия, чтобы установить примеры, используемые в этой статье:

1. На стартованной базе данных Oracle запустите Oracle SQL Developer.

2. Создайте новое соединение со схемой HR и назовите его HR_ORCL. (Более подробная информация о создании соединения приводится во врезке "Следующие шаги".)

3. Откройте редактор SQL (Tools -> SQL Worksheet) для HR_ORCL. (Он открывается автоматически, когда вы первый раз создаете новое соединение)

4. Введите код Листинга 1 в текстовом окне Enter SQL Statement.

Листинг 1: Скрипт для создания объектного типа EMP_REC:

CREATE OR REPLACE TYPE EMP_REC AS

OBJECT(EMPLOYEE_ID NUMBER(6),

LAST_NAME VARCHAR2(25),

JOB_ID VARCHAR2(10),

MANAGER_ID NUMBER(6),

HIRE_DATE DATE,

SALARY NUMBER(8, 2),

COMMISSION_PCT NUMBER(2,2),

DEPARTMENT_ID NUMBER(4));

5. Нажмите F5 (или кнопку Run Script) для создания объектного типа EMP_REC.

6. Нажмите кнопку Clear или Ctrl-D, чтобы очистить текстовое окно Enter SQL Statement.

7. Создайте спецификацию пакета и его тело, используя, соответственно, код Листингов 2 и 3 в текстовом окне Enter SQL Statement и выполнив каждый из скриптов. (Другой способ создать новый пакет - раскрыть узел HR_ORCL в Connections Navigator, выбрать Packages, и нажать правой кнопкой мыши по пункту меню New Package...).

Листинг 2: Скрипт для создания спецификации пакета EMP_FETCHER

CREATE OR REPLACE PACKAGE EMP_FETCHER AS

FUNCTION GET_EMP(EMP_NO IN NUMBER) RETURN EMP_REC;

Листинг 3: Скрипт для создания тела пакета EMP_FETCHER

CREATE OR REPLACE PACKAGE BODY EMP_FETCHER AS

FUNCTION GET_EMP(EMP_NO IN NUMBER) RETURN

EMP_REC IS EMP_FOUND EMPLOYEES % ROWTYPE;

EMP_RTN EMP_REC;

BEGIN

SELECT *

INTO EMP_FOUND

FROM EMPLOYEES

WHERE EMPLOYEES.EMPLOYEE_ID = EMP_NO;

EMP_RTN := EMP_REC(EMP_FOUND.EMPLOYEE_ID,

EMP_FOUND.LAST_NAME,

EMP_FOUND.JOB_ID,

EMP_FOUND.MANAGER_ID,

EMP_FOUND.HIRE_DATE,

EMP_FOUND.SALARY,

EMP_FOUND.COMMISSION_PCT,

EMP_FOUND.DEPARTMENT_ID);

RETURN EMP_RTN;

END;

END;

Чтобы увидеть новый пакет в Connections Navigator, раскройте узел HR_ORCL, а затем раскройте узел Packages. Рис. 1 показывает как выглядят SQL-редактор (worksheet) и Connections Navigator после завершения описанных шагов.

Запуск PL/SQL-процедур, функций, пакетов

Для запуска любой PL/SQL-процедуры, функции или пакета выберите объект в Connections Navigator, нажмите на него правой кнопкой мыши и выберите Run. Запустим пакет EMP_FETCHER. Откроется диалоговое окно Run PL/SQL, отображающее анонимный PL/SQL-блок и возвращаемое значение. Вы увидите это диалоговое окно при запуске любого PL/SQL-кода в Oracle SQL Developer. Оно показывает детали параметров - и, для функций, возвращаемого значения - для выбранного объекта. Если выбранный объект - пакет, диалоговое окно покажет список процедур и функций, определенных в спецификации пакета. Вы можете выбрать одну из этих процедур или функций для запуска.

В PL/SQL-блоке измените EMP_NO := NULL; на EMP_NO := 201; и нажмите OK. В таблице EMPLOYEES 201 - это

Рис. 1: Connections Navigator и SQL-редактор

существующий сотрудник, поэтому пакет выполняется и завершается с минимальной ответной реакцией. Для сравнения запустите пакет опять для EMP_NO := 2001; (несуществующий сотрудник). После завершения вы увидите сообщение об ошибке "no data found".

В этом примере функция извлекает информацию, которая может использоваться в процедуре. Вы можете использовать анонимный блок в диалоговом окне Run PL/SQL, чтобы увидеть детали. Блок содержит строки

-- Модифицируйте код для вывода переменной

-- DBMS_OUTPUT.PUT_LINE("v_Return = " // v_Return);

Если раскомментировать и модифицировать вторую из этих двух строк, можно будет увидеть результат. Функция возвращает запись, или набор элементов, поэтому необходимо указать, какое значение(я) требуется отображать. Можно выбрать и все значения записи. Этот пример использует значения LAST_NAME, HIRE_DATE и SALARY. Раскройте узел Types в Connections Navigator и выберите EMP_REC. Проверьте код. Вернитесь к пакету EMP_FETCHER, и запустите его опять. Измените EMP_NO := 2001 обратно на EMP_NO := 201. Затем замените строку

--DBMS_OUTPUT.PUT_LINE("v_Return = " // v_Return);

на

DBMS_OUTPUT.PUT_LINE("Employee "// emp_no // " is " // v_return.LAST_NAME);

DBMS_OUTPUT.PUT_LINE("Hired on the "// v_return.HIRE_DATE // " and earns "// v_return.salary);

Нажмите OK, и посмотрите результат в окне Running - Log.

Редактирование и компиляция PL/SQL

Раскройте пакет EMP_FETCHER в Connections Navigator, чтобы открыть редактор PL/SQL-кода, и дважды щелкните по узлу EMP_FETCHER Body, чтобы открыть две новые группы закладок. Первая группа, только для чтения, легко распознается перечнем закладок в верхней части. Вторая группа - это редактор кода.

В Oracle SQL Developer есть завершитель кода (Code Insight), который включает как завершитель параметров (Parameter Insight), так и завершитель вызова (Completion Insight). Завершитель параметров отображает контекстно-зависимое всплывающее меню, которое показывает список процедур или функций пакета. Завершитель вызова отображает контекстно-зависимое всплывающее меню, которое показывает список возможных способов продолжения написания кода от места нахождения курсора, который можно использовать для автозавершения редактируемого кода, где бы он ни редактировался, в редакторе кода или в редакторе SQL. По умолчанию, если нажать точку (.) и подождать чуть больше секунды, завершитель вызова включается автоматически (Вы можете изменить время задержки в настройках предпочтений). Для вызова подсказки вручную, нажмите Ctrl-space. Для проверки работы завершителя вызова наберите: SELECT HR. в редакторе кода Oracle PL/SQL, и подождите. Завершитель вызова покажет всплывающее меню, которое отображает все объекты схемы HR. Нажмите на объект списка, чтобы добавить его в код после курсора.

Более полезной может быть функция поиска, предусмотренная во всплывающем завершителе, например, по алиасу таблицы. Наберите

SELECT FROM EMPLOYEES e

в редакторе кода. Затем наберите e между SELECT и FROM и нажмите Ctrl-space. После паузы, список столбцов таблицы EMPLOYEES будет показан во всплывающем меню.

Полное обсуждение возможностей редактирования в Oracle SQL Developer было бы слишком долгим для этой статьи. Я призываю вас самих поэкспериментировать с завершителем кода и другими возможностями редактора кода Oracle PL/SQL, например, сопоставление круглых скобок (кликните на одной скобке и смотрите на подсветку), используемыми до компиляции кода.

Когда вы будете готовы компилировать, нажмите кнопку Compile или Ctrl-Shift-F9. Все ошибки компиляции отображаются в окне Compiler-Log. Щелкните дважды по ошибке и перейдите к источнику ошибки.

Отладка PL/SQL-кода

Даже если PL/SQL-код успешно компилируется и запускается, это не означает, что он работает так, как хотелось бы. Это как раз тот случай, когда необходима отладка.

Для отладки кода необходимо установить одну или несколько точек останова, а затем выбрать Compile for Debug. В результате PL/SQL-код будет откомпилирован с отладочной информацией. Если затем запустить этот код в режиме отладки, он выполнится до точки останова. Точки останова могут настраиваться; например, можно связать точки останова с любым необработанным исключением или с предопределенным исключением Oracle Database (Если вы отлаживаете PL/SQL в базе данных версии до Oracle9IDatabase Release 2, то для отладки PL/SQL необходимо установить предпочтение Migration -> PL/SQL Debugger в Use Probe Debugger).

Основные возможности отладки в Oracle SQL Developer позволяют контролировать выполнение программы. Например, можно переходить по каждой строке кода или через процедуру или функцию. Oracle SQL Developer отображает значения переменных и данных на каждом шаге кода. Пошаговое выполнение кода полезно при отладке процедуры, которая вызывает функцию. Не обязательно проходить по всем строкам функции, так как можно перескочить через неё и вернуться в отлаживаемую процедуру.

Локальная и удаленная отладка в Oracle SQL Developer

Использование Oracle SQL Developer для локальной отладки PL/SQL означает, что вы выбираете и присоединяетесь к PL/SQL-программе, используя SQL Developer Connections Navigator. Вы устанавливаете точку останова в том месте, где отладчик должен сделать паузу, и затем нажимаете кнопку Debug. Oracle SQL Developer стартует отладочный сеанс, соединяется с ним, и останавливается, когда достигнет точки останова. При локальной отладке Oracle SQL Developer - это клиент, который инициирует отладку.

Удаленная отладка PL/SQL-кода в Oracle SQL Developer означает, что вы инициируете отладочную акцию с клиента, внешнего по отношению к Oracle SQL Developer. Внешние клиенты могут быть PL/SQL Web-приложениями, приложениями Oracle Application Express или сессиями SQL*Plus. Удаленная отладка требует некоторых ручных действий: запуск отладочного листенера Oracle SQL Developer и присоединение к этому листенеру через сессию базы данных, которую требуется отладить (Удаленная отладка недоступна для баз данных, версия которых ниже Oracle9I Database Release 2).

Следующие шаги описывают пример удаленной отладочной сессии:

1. В Oracle SQL Developer присоединитесь к базе данных, где находится PL/SQL-код. Используйте ту же строку соединения HR_ORCL и пакет EMP_FETCHER, которые использовались ранее.

2. Выберите соединение HR_ORCL в Connections Navigator, и затем щелкните правой кнопкой мыши и выберите Remote Debug. Откроется диалоговое окно Listen for JPDA.

3. Введите порт и IP-адрес сервера. Теперь вы видите новое окно Run Manager, на котором отображается информация о сервере Debug Listener. (Можно установить Tools -> Preferences -> Debugger -> Prompt for Debugger Host для отладки, когда соединение выполняется через бранмауэр или сессии виртуальных частных сетей [virtual private network - VPN] ).

4. В Connections Navigator выберите тело пакета EMP_FETCHER, затем щелкните правой кнопкой мыши и выберите Edit..., чтобы открыть редактор кода Oracle PL/SQL. Кликните в левом поле на FUNCTION GET_EMP..., чтобы установить точку останова.

5. Кликните Compile for Debug как показано на Рис. 2.

6. Теперь вы готовы к тому, чтобы начать удаленный процесс отладки со стороны Oracle SQL Developer. Для этого необходимо, чтобы был готов внешний клиент, в

Рис. 2: Компиляция с отладочной информацией

данном случае SQL*Plus. Запустите сессию в SQL*Plus для того же самого пользователя базы данных, и введите IP-адрес и порт, заменив на ваши собственные, которые использовались для удаленного подключения в Oracle SQL Developer:

exec DBMS_DEBUG_JDWP.CONNECT_TCP ("127.0.0.1", 4000)

7. В SQL*Plus используйте анонимный блок для вызова функции:

DECLARE

EMP_NO NUMBER;

v_Return HR.EMP_REC;

BEGIN

v_Return := EMP_FETCHER.GET_EMP(201);

END;

/

8. Теперь управление передано Oracle SQL Developer и вы можете выполнять код по шагам. Начиная с этого момента процесс такой же, как при локальной отладке.

Стали активны различные отладочные окна. Все они имеют свое назначение, однако важными сразу же становятся:

• Окно Debugging, которое позволяет управлять выполнением программы. Начните отладку, нажимая пиктограмму Step Into.

• Редактор кода, который показывает точку выполнения. Когда отладка выполняется по шагам, при перемещении мыши всплывающие подсказки отображают название и значение переменной под указателем. Продолжайте нажимать Step Into до тех пор пока не достигните строки EMP_RTN:= EMP_REC.... В этой точке дайте мыши переместиться к переменной EMP_FOUND, чтобы увидеть всплывающую подсказку, как показано на Рис. 3.

• Окно Data отображает все переменные, которые действительны в текущем контексте. Перейдя на точку выполнения EMP_RTN := EMP_REC..., выберите закладку Data и раскройте узел EMP_FOUND. Теперь запись заполнена. В этой точке можно просматривать и модифицировать переменные, чтобы увидеть их влияние на процедуру.

9. Продолжайте шаги до тех пор, когда процедура завершится, управление будет передано внешнему клиенту, и отладочная сессия завершится.

117

Рис. 3: Использование Step Into и всплывающей подсказки

 Заключение

В Oracle SQL Developer можно просматривать и редактировать объекты базы данных, данные запросов и выпускать отчеты. Одна из полезных возможностей Oracle SQL Developer - это способность редактирования, компиляции, выполнения и отладки PL/SQL. Oracle SQL Developer поддерживает как локальную так и удаленную отладку; возможности удаленной отладки позволяют подхватить отладочную сессию PL/SQL в Oracle SQL Developer от внешних клиентов (таких, как SQL*Plus).

Ссылки по теме


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Oracle »
Написать редактору 
 Рекомендовать » Дата публикации: 11.03.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Allround Automation PL/SQL Developer - Annual Service Contract - Single user
Oracle Database Standard Edition 2 Processor License
Allround Automation PL/SQL Developer - Unlimited license
Oracle Database Personal Edition Named User Plus Software Update License & Support
Allround Automation PL/SQL Developer - Annual Service Contract - 5 users
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Мир OLAP и Business Intelligence: новости, статьи, обзоры
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Ищу интересные проекты для разработки (1)
Мы — команда опытных разработчиков, которые вместе работают уже более 5 лет (тим лид / аналитик,...
 
Уроки по JavaScript для новичков (3)
Всем привет! Вот хочу поделиться классным сайтом для начинающих изучать программирование на ...
 
Пишу программы на заказ профессионально (2164)
Пишу программы на заказ на языках Pascal (численные методы, списки, деревья, прерывания) под...
 
Настройка меню "Пуск" Windows 7 при помощи реестра (1)
Скажите пожалуйста, а как можно закрепить ярлыки программ с помощью твиков реестра в левой части...
 
Пишу программы на заказ для студентов (170)
Пишу для студентов на с, с++, паскаль в средах ms visual studio, qt, builder, borland c, delphi....
 
 
 



    
rambler's top100 Rambler's Top100