Процедурный язык запросов PL/SQL – это процедурное расширение языка запросов SQL, разработанное фирмой Oracle. SQL является непроцедурным языком, т.к. пользователь просто отправляет на сервер базы данных команду SQL, а способ выполнения команды выбирает сам сервер. PL/SQL требует пошаговых инструкций для выполнения требуемых действий.
PL/SQL является языком третьего поколения, и имеет языковые элементы для объявления переменных, присвоения значений, проверки условий и ветвлений. Кроме того, он позволяет включать команды манипулирования данными (DML) и запросы в программные единицы, что позволяет контролировать выполнение транзакций с помощью PL/SQL.
PL/SQL блочно-ориентирован, это позволяет группировать логические единицы в блоки, каждый из которых может быть разбит на более мелкие подблоки. Сложная задача, таким образом, разбивается на отдельные легко управляемые модули, реализуемые в программной логике с помощью блоков.
PL/SQL позволяет описывать переменные простых и составных типов, константы, курсоры, исключения и использовать их в командах SQL и PL/SQL. Типы переменных могут быть описаны динамически, на основе типов данных столбцов таблицы базы данных. Типы данных PL/SQL и SQL совместимы и могут быть явно или неявно преобразованы друг в друга.
PL/SQL имеет управляющие структуры, позволяющие организовывать условное выполнение и цикличность обработки команд. Кроме того, PL/SQL имеет средства для обработки строк, возвращенных многострочным запросом SQL из базы данных.
PL/SQL имеет обработчик исключительных ситуаций (Exception Handler) для обработки ошибок и исключений, которые могут возникнуть во время выполнения кода PL/SQL. Таким образом могут быть обработаны, как ошибки сервера базы данных, так и исключения, определенные пользователем.
PL/SQL легко переносим, т.к. стандартизован для всех серверов фирмы Oracle, независимо от платформы. Программа, написанная на языке PL/SQL, может быть откомпилирована и выполнена на любом сервере Oracle без модификаций.
PL/SQL группирует команды SQL в единый блок и передает их серверу Oracle за одно обращение, снижая сетевой трафик.
Программы, написанные на языке PL/SQL, обрабатываются ядром PL/SQL, которое может быть частью сервера Oracle или частью инструментального средства, в зависимости от того, как вызывается PL/SQL.
Если код PL/SQL запускается из SQL*Plus, oн обрабатывается ядром PL/SQL на сервере Oracle. Код сканируется, разбирается и компилируется. SQL, содержащийся в блоке, разделяется на отдельные команды, которые передаются Исполнителю команд SQL (SQL Statement Executor) на сервере Oracle. Набор данных, полученный в результате выполнения команды SQL, поступает в ядро PL/SQL для дальнейшей обработки. Процедурные выражения, не являющиеся командами SQL, передаются на выполнение Исполнителю процедурных команд (Procedure Statement Executor), который является частью ядра PL/SQL.
Одним из преимуществ использования блоков PL/SQL по сравнению с индивидуальным выполнением каждого оператора SQL является уменьшение загрузки сети, т.к. для передачи блока из приложения на сервер базы данных достаточно одной операции (Рисунок 1).
Рисунок 1 Выполнение блока PL/SQL и отдельных предложений SQL сервером Oracle
Процедурный язык PL/SQL блочно-ориентирован. Каждая программная единица PL/SQL состоит из одного или более блоков, которые могут быть полностью независимыми или вложенными друг в друга. Основной блок кода PL/SQL может содержать до трех частей
DECLARE
– декларативная необязательная секция
содержит объявление переменных, констант, курсоров, пользовательских исключений
BEGIN – обязательная секция
выполняемого кода
содержит команды SQL для манипулирования данными в базе
и команды PL/SQL для манипулирования
данными в блоке
EXCEPTION – необязательная секция
обработки исключений (ошибок или предупреждений)
определяет действия, связанные с обработкой ошибок сервера или пользовательских
исключений, возникших в секции выполняемого кода
END;
Основной блок кода PL/SQL может использоваться в различных программных конструкциях:
Программная конструкция |
Описание |
Анонимный блок |
Неименованный блок PL/SQL, встроенный в приложение или выполняемый интерактивно (например, из SQL*Plus). Описывается в той точке приложения, где будет выполняться и передается на выполнение ядру PL/SQL во время выполнения приложения |
Хранимая процедура или функция |
Именованный блок PL/SQL, который позволяет задавать параметры и может выполняться многократно на стороне сервера |
Процедура или функция приложения |
Именованный блок PL/SQL, который позволяет задавать параметры и может выполняться многократно на стороне клиента |
Пакет |
Именованный модуль PL/SQL, который группирует связанные процедуры, функции, идентификаторы |
Триггер базы данных |
Блок PL/SQL, связанный с таблицей базы данных и выполняемый автоматически |
Триггер приложения |
Блок PL/SQL, связанный с событием в приложении и выполняемый автоматически |
Именованные блоки PL/SQL
называются программными единицами. Программные единицы делятся на
три категории:
§ Процедуры, позволяющие задавать параметры и выполняющие заданные действия
§ Функции, позволяющие задавать параметры, вычисляющие и возвращающие значения
§ Пакеты, объединяющие логически связанные процедуры и функции
Программные единицы подразделяются на хранимые и прикладные подпрограммы (подпрограммы приложения):
Хранимая подпрограмма |
Прикладная подпрограмма |
|
Хранится |
В базе данных |
В приложении |
Выполняется |
Из любого приложения или инструментального средства базы данных |
Только из данного приложения |
Подпрограмма может содержать до четырех секций:
§ Обязательная секция заголовка – определяет имя, тип и аргументы подпрограммы
§ Декларативная необязательная секция – содержит объявление локальных переменных, констант, курсоров, пользовательских исключений
§ Обязательная секция выполняемого кода – содержит команды SQL для манипулирования данными в базе и команды PL/SQL для манипулирования данными в блоке
§ Необязательная секция обработки исключений – определяет действия, связанные с обработкой ошибок сервера или пользовательских исключений, возникших в секции выполняемого кода
· Идентификаторы могут содержать до 30 символов и должны начинаться с буквы
· Зарезервированные слова могут использоваться в качестве идентификаторов только в том случае, если они заключены в кавычки (“SELECT”)
· Не выбирайте для идентификатора имя, совпадающее с именем столбца таблицы базы данных, используемой в блоке. При выполнении команды SQL Oracle всегда предполагает, что используется ссылка на столбец
· Предложение может занимать несколько строк, но ключевые слова переносить нельзя
· Лексические единицы (идентификаторы или литералы) могут быть разделены пробелами
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.