oldi

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

Владимир Пржиялковский

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

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

 

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

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

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

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

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

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

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

Здесь же я хочу ознакомить вас с SQL-Station на примере того, как в данной системе может выглядеть отладка программ. Для этого воспользуюсь программой для выявления возможных и реальных пустот в сегментах, описанной в моей статье «Невидимые миру дыры» на сайте http://www.interface.ru/. В данном случае это будет не хранимая в БД процедура, а сценарий из файла с названием freespace.sql, но для SQL-Station это не имеет значения. На рис. 1 показано, как выглядит текст, прочитанный в SQL-Station.

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

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

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

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

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

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

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

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

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

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

В начало В начало

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

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

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

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

Таким образом, «сердце» SQL-Station — это диалоговый отладчик, который мы наблюдали в действии, помимо этого вокруг него сформирована еще некоторая среда для обустройства коллективной работы программистов с программным комплексом на PL/SQL. В условиях отсутствия аналогичного по функциям инструмента у самой фирмы Oracle эта система может послужить хорошим организатором и катализатором, средством повышения производительности труда. Более подробную информацию о ManageIT SQL-Station можно найти по адресу: http://www.cai.ru/.

Ознакомительная версия ManageIT SQL-Station и некоторые дополнительные материалы об этом продукте находятся на нашем CD-ROM.

КомпьютерПресс 8'2001