Последовательное управление

1. ВВЕДЕНИЕ

 

PL/SQL — это собственный язык Oracle, предназначенный для разработки приложений баз данных. В дополнение ко всем SQL-операциям, поддерживаемым в Oracle SQL, PL/SQL расширен такими программными средствами, как обработка условных операторов, циклы, переменные, операции с курсорами, абстрактные типы данных, модуляризация, инкапсуляция, переопределение и др.

Достоинства PL/SQL:

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

PL/SQL особенно удобен для обработки крупных блоков данных. В Oracle PL/SQL существует специальная конструкция cursor for, которая позволяет запросить несколько строк данных, а затем обработать каждую из них по очереди. Благодаря этому можно обрабатывать большие объемы информации.

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

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

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

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

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

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

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

 

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

Децентрализация вычислений повысила возможности организаций по предостав­лению быстродействующих и простых в применении приложений для своих клиентов. Однако изменить схемы бизнес-логики, хранимые в клиентском приложении, можно, только запрограммировав эти изменения, перекомпилировав клиентское приложение (возможно, на нескольких различных платформах) и установив его новые исполняемые версии на рабочем столе каждого пользователя. Кроме того, следует учесть и накладные расходы на связь и техническую поддержку, гарантирующие правильность версии приложения у всех пользователей.

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

На рис. 1 приведен пример, демонстрирующий различия между централизован­ным и децентрализованным способами управления программными схемами бизнес-логики.

 

 


Рис. 1. Сравнение централизованного и децентрализованного управления программными схемами бизнес-логики