В своей исходной форме SQL не был полноценным языком программирования. Он задумывался и создавался как язык, предназначенный для выполнения операций над базами данных – создания их структуры, ввода и обновления данных – и особенно для выполнения запросов. SQL может использоваться как интерактивный командный язык: пользователь по очереди вводит инструкции SQL с клавиатуры, а СУБД их выполняет. В этом случае последовательность операций над базой данных определяется ее пользователем.
С появлением хранимых процедур и триггеров язык SQL обогатился рядом дополнительных базовых возможностей, обеспечиваемых практически всеми языками программирования, что позволило писать на “расширенном SQL” настоящие программы и процедуры. (Хранимые процедуры позволяют переносить часть прикладных функций, связанных с обработкой данных, в саму базу данных, триггеры служат для автоматического выполнения хранимых процедур при возникновении в базе данных определенных условий.)
Набор элементов, реализующих возможности процедурного языка, составляет язык хранимых процедур (SPL — Stored Procedure Language).
PL/SQL — процедурный язык программирования, встроенный в большинство продуктов ORACLE. С помощью PL/SQL можно создавать программы, в которых объединяются операторы PL/SQL, предназначенные для управления выполнением программ, и SQL-операторы, с помощью которых можно обращаться к базам данных и обрабатывать информацию. Ниже приведен пример очень простой программы на языке PL/SQL, с помощью которой обновляется цена единицы продукции, когда известен идентификационный номер этой единицы.
procedure update_part_unitprice (part_id in integer, new_price in number)
is
invalid_part exception;
begin
-- UPDATE – ОПЕРАТОР ДЛЯ ОБНОВЛЕНИЯ ЗАПИСИ В БАЗЕ ДАННЫХ
update sales.parts
set unit_price = new_price
where id = part_id;
-- ОПЕРАТОР ДЛЯ ПРОВЕРКИ ОШИБОК
if sql %notfound then
raise invalid_part;
endif;
exception
-- ПОДПРОГРАММА ОБРАБОТКИ ИСКЛЮЧИТЕЛЬНОЙ СИТУАЦИИ
when invalid_part then
raise_application_error(-20000, ‘Invalid Part ID’);
end update_part_unitprice;
Программа, приведенная в этом примере, является процедурой (PROCEDURE). С помощью PL/SQL можно строить различные программные единицы для доступа к базам данных, в том числе процедуры, функции и модули. В настоящем разделе приведено множество примеров программ PL/SQL, однако для самостоятельного создания программных конструкций на PL/SQL необходимо иметь четкое представление о базовых конструкциях этого языка.
PL/SQL – это процедурный язык, очень похожий на язык программирования Ada. В PL/SQL имеются операторы, дающие возможность объявлять переменные и константы, управлять выполнением программы, определять данные и манипулировать ими, а также выполнять многие другие функции.
Блоки
Программа PL/SQL структурируется при помощи отдельных блоков, в которых группируются связанные объявления и операторы. Каждый блок программы PL/SQL имеет специальное назначение и решает определенную задачу. Следовательно, программу PL/SQL можно организовать таким образом, чтобы ее легче было понять.
Блок PL/SQL может включать три раздела: объявления, тело основной программы и обработчики исключительных ситуаций.
• Раздел объявлений блока PL/SQL – это часть блока, где объявляются переменные, константы, исключительные ситуации и т.д., которые затем становятся доступны во всех других частях блока.
• В теле основной программы содержатся исполняемые операторы блока. Другими словами, тело – это часть блока PL/SQL, в которой определяются его функциональные возможности.
• В разделе исключительных ситуаций находятся обработчики исключительных ситуаций, т.е. подпрограммы обработки ошибок. Когда оператор в теле блока определяет исключительную ситуацию (обнаруживает ошибку), он передает управление программой обработчику соответствующей исключительной ситуации, находящемуся в разделе обработчиков исключительных ситуаций.
Таким образом, структуру блока PL/SQL можно представить в следующем виде:
declare
/*раздел объявлений (переменные, типы, курсоры и др.)*/
begin
/*Основной раздел блока, называемый выполняемым. Содержит процедурные и SQL – операторы*/
exception
/*Раздел обработки исключительных ситуаций. Содержит операторы обработки ошибок*/
end;
Вообще говоря, обязательным в блоке является только выполняемый раздел, кроме того, он должен содержать, по крайней мере, один выполняемый оператор.
Программы PL/SQL не ограничены одним блоком. Для лучшей организации выполнения подзадач в программе PL/SQL можно создать вложенные блоки в теле программы и в разделе исключительных ситуаций блока. Вообще говоря, объявления блока видны всем операторам тела блока и раздела обработки исключительных ситуаций, в том числе и операторам “вложенных подблоков”.