Вы находитесь на страницах старой версии сайта.
Переходите на новую версию Interface.Ru

Программирование на PL/SQL в среде SQL-Station

 Владимир Пржиялковский,
координатор Евро-Азиатской Группы Пользователей Oracle,
преподаватель УКЦ Interface Ltd.

Содержание

Введение

Как известно, основным языком для написания хранимых процедур в Oracle является PL/SQL. На нем пишутся триггеры, процедурыв том числе для запуска встроенным в СУБД планировщиком заданий DBMS_JOB. Многие разработчики приложений используют PL/SQL очень широко, создавая тысячи и десятки тысяч строк кода, который описывает хранимые в базе данных “бизнес-правила” – делается так по той причине, что декларативных правил SQL практически всегда не хватает для описания прикладной модели.

Правда, последнее время у PL/SQL появился “знатный двойник”: начиная с версии 8i Oracle позволяет работать и с хранимыми процедурами на Java. В Oracle PL/SQL и Java функционально почти равносильны и вопрос выбора одного из них в качестве языка для разработки – вопрос пристрастия разработчиков, удобства и эффективности. Все эти три фактора в каждой ситуации индивидуальны и универсального для всех случаев разработки ответа нет. На стороне PL/SQL, и об этом заявляется самой фирмой Oracle, стоит лучшая эффективность выполнения обращений к БД. Так что роль PL/SQL при создании прикладных систем на Oracle по-прежнему чрезвычайно велика.

Тем удивительнее, что развитых сред программирования на PL/SQL фирма Oracle не поставляет. Конечно, вы можете набрать код процедуры или пакета в текстовом редакторе, запустить на трансляцию или исполнение, и потом спрашивать в SQL*Plus SHOW ERRORS. Этого достаточно для единичных программ, но не для промышленного программирования, ведомого коллективом специалистов с использованием больших объемов текстов. На помощь могут придти системные пакеты для отладки PL/SQL, поставляемые фирмой Oracle: это пакеты DBMS_OUTPUT (отладочная выдача на экран), DBMS_PROFILER, DBMS_TRACE, DBMS_UTILITY (частично) а также DBMS_DEBUG. Они – весьма хорошее подспорье и позволяют организовывать много чего полезного, но все они низкого уровня. А можно ли на их основе построить графическую среду разработки и отладки, соответствующую современному уровню? Как вы догадались, вопрос задан риторически, единственно для того, чтобы прозвучал ответ: можно.

Так и поступают некоторые фирмы, возводя из этого собственный бизнес. Не Oracle, которая такого рода разработками – так уж сложилось – не славится. В этой статье вы познакомитесь с одной такой фирмой, Computer Associates, а точнее, с ее продуктом SQL-Station.

Система SQL-Station имеет хорошую репутацию среди разработчиков на PL/SQL и долгую историю. Своему нынешнему владельцу она досталась от также хорошо известной в свое время Platinum technology, а той – тоже, кажется, от кого-то еще, но каждая из фирм вносила собственную лепту в развитие продукта.

Пример диалоговой отладки

Повествовательный рассказ об SQL-Station занял бы слишком много времени и места, потому что возможностей в этой системе очень много. С другой стороны она имеет встроенные руководства разработчика (tutorials) и, имея графический интерфейс, обладает определенным потенциалом самопредставления сообразительному пользователю. Полнофункциональную версию с ключом, действующим в течение месяца, можно получить здесь или от распростанителей системы в России.

Здесь я хочу познакомить вас с SQL-Station на примере того, как в этой системе может выглядеть отладка программ. Для этого воспользуюсь программой для выявления возможных и реальных пустот в сегментах, опубликованной в статье “Невидимые миру дыры”  в “Мастерской Oracle. В данном случае это будет не хранимая в БД процедура, а сценарий из файла с названием freespace.sql, но для SQL-Station это не важно. Вот как выглядит текст, прочитанный в SQL-Station:

 

Это вид, в котором текст программы поступил для опубликования в статье (выделения ключевых слов PL/SQL, констант, имен процедур и функций и комментариев цветом и шрифтом SQL-Station выполнил сам). В правой части экрана видно меню с одной из позиций “Format Text”. Эту же позицию я могу обнаружить в одном из раскрывающихся списков верхнего меню, но сейчас мне удобнее нажать ее сразу на экране:


Вот результат: текст автоматически отформатировался по алгоритму, пожалуй, самого знаменитого преподавателя программированию на PL/SQL в мире Стивена Фойерстина (Steven Feuerstein). Если сейчас посмотреть на первую строку текста программы, увидим там вставленную запись

/* Formatted by PL/Formatter v3.0.5.0 on 2001/06/20 19:28 */

Это еще только прелюдия к отладке; мы увидели, как работает встроенное в систему форматирование, помогающее “причесать” внешний вид текстов, что безусловно облегчает с ними работу. Тут же можно провести автоматический синтаксический анализ программы и посмотреть статистику. Естественно, тут же можно запустить текст на исполнение, но нас сейчас интересует не это.

Собственно для отладки нужно включить режим Debug с помощью меню. Вот что я получил:

Теперь с помощью клавиши F9 можно расставить контрольные точки и другими клавишами запустить все варианты отладки: пошаговую с проходом вызываемых процедур, пошаговую с обходом вызываемых процедур и безусловный прогон (до попадания в контрольную точку):

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

В нижнем бирюзовом окне в положенное время появится выдача.

Так в общих чертах выглядит процесс диалоговой отладки в SQL-Station. Не оценить такую возможность программист, искусавший не один десяток ногтей в попытках найти ошибку в собственных текстах вычислениями на основе подсчета номеров строк карандашом и раскодированием сообщений об ошибках, безусловно, не может. Повторюсь: на нижнем уровне все это реализовано с помощью API из пакета DBMS_DEBUG; в этом можно убедиться, запросив в SQL*Plus из консольного окошка:

SQL> select username,osuser,process,machine, program from v$session;
 
USERNAME    OSUSER          PROCESS   MACHINE         PROGRAM
----------- --------------- --------- --------------- ---------------
            SYSTEM          145       WSA46           ORACLE.EXE
            SYSTEM          80        WSA46           ORACLE.EXE
            SYSTEM          177       WSA46           ORACLE.EXE
            SYSTEM          178       WSA46           ORACLE.EXE
            SYSTEM          228       WSA46           ORACLE.EXE
            SYSTEM          229       WSA46           ORACLE.EXE
SYS         Administrator   144:256   OFFICE\WSA46    SQLPLUS.EXE
SCOTT       Administrator   264:150   OFFICE\WSA46    Station.exe
DBSNMP      SYSTEM          83:171    OFFICE\WSA46    dbsnmp.exe
SCOTT       Administrator   264:150   OFFICE\WSA46    Station.exe
SCOTT       Administrator   264:150   OFFICE\WSA46    Station.exe
SCOTT       Administrator   264:150   OFFICE\WSA46    Station.exe
 
12 rows selected.

Видно, что в соответствии с правилами работы этого пакета автоматически запущены дополнительные отладочные сеансы от имени SCOTT (у меня всего только одно собственное подключение от имени SCOTT). Так что, кому не лень, могут повторить подвиг разработчиков SQL-Station, но большинство, уверен, предпочтут не повторять уже сделанное.

Не только отладка

Отладка и анализ программ – не единственная помощь со стороны SQL-Station разработчику на PL/SQL. Здесь же имеются естественные для такого рода продукта средства организации проекта. Тексты в рамках проекта отдельные программисты могут брать в работу, оставив об этом отметку, и заблокировав, таким образом, от изменений со стороны остальных. Время от времени можно формировать версии программ в проекте.

Иногда при отладке бывает полезно выбросить зациклившийся, зависший или “не туда забредший” сеанс работы. Только что выше я просматривал текущие сеансы с помощью SQL*Plus. Но посмотреть их можно и в специальных окошках SQL-Station, а необходимые и убить нажатием клавиши.

В случае, если исходные тексты исчезли, SQL-Station позволяет восстановить описание пакетов и тел пакетов на основе информации из словаря-справочника. Как мы знаем, при всякой трансляции программы на PL/SQL заносятся в словарь-справочник системы, но у этого подхода в Oracle есть одно потребительски неважное качество: лежат эти тексты в неудобном для чтения виде. SQL-Station извлекает их из словаря-справочника в удобном виде. С его помощью я восстановил (выполнил “reverse engineering”, в терминах системы) описания ряда системных пакетов Oracle.

Таким образом, “сердце” SQL-Station – это диалоговый отладчик, который мы наблюдали в действии, но вокруг него сформирована еще некоторая среда для обустройства коллективной работы программистов с программным комплексом на PL/SQL. В условиях отсутствия функционально аналогичного инструмента у самой фирмы Oracle эта система может послужить хорошим организатором и катализатором, средством повышения производительности труда.

За дополнительной информацией обращайтесь в компанию Interface Ltd.

Обсудить на форуме

Рекомендовать страницу

INTERFACE Ltd.
Телефон/Факс: +7 (495) 925-0049
Отправить E-Mail
http://www.interface.ru
Rambler's Top100
Ваши замечания и предложения отправляйте редактору
По техническим вопросам обращайтесь к вебмастеру