Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KL_2010_14.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
28.97 Mб
Скачать

6.1.Хранимые процедуры или функции

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

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

Во-вторых, сетевой трафик в этом случае меньше, чем в случае передачи SQL-запроса, т.к. по сети передается меньшее количество данных.

Хранимые процедуры автоматически перекомпилируются, если с объектами, на которые они влияют, про­изведены какие-либо изменения; иными словами, они всегда актуальны. Хранимые процедуры обычно исполь­зуются для поддержки ссылочной целостности данных и реализации бизнес-правил. В по­следнем случае достигается дополнительная гибкость, поскольку если бизнес-правила изме­няются, можно изменить только текст хранимой процедуры, не изменяя клиентские приложения.

В данном учебном пособии в качестве примера средства написания хранимых процедур будем рассматривать язык PL/pgSQL, который используется в СУБД PostgreSQL. Язык PL/pgSQL позволяет группировать на сервере код SQL и программные команды, что приводит к снижению затрат сетевых и коммуникационных ресурсов, обусловленных частыми запросами данных со стороны клиентских приложений и выполнением логической обработки этих данных на удаленных хостах.

В программах PL/pgSQL могут использоваться все типы данных, операторы и функции PostgreSQL. SQL в название PL/pgSQL указывает на то, что программист может напрямую использовать команды языка SQL в своих программах. Использование SQL в коде PL/pgSQL расширяет возможности, а также повышает гибкость и быстродействие программ. Несколько команд SQL в программном блоке PL/pgSQL выполняются за одну операцию вместо обычной обработки каждой команды.

6.1.1.Структура языка

Язык PL/pgSQL имеет относительно простую структуру, что объясняется в основном тем, что каждый логически обособленный фрагмент кода существует в виде функции. Хотя на первый взгляд PL/pgSQL мало похож на другие языки программирования (такие, как язык С), сходство все же существует: логические фрагменты создаются и выполняются в виде функций, все переменные обязательно объявляются перед использованием, функции получают аргументы при вызове и возвращают некоторое значение в конце своей работы.

Регистр символов в именах функций PL/pgSQL не учитывается. В ключевых словах и идентификаторах допускается использование произвольных комбинаций символов верхнего и нижнего регистров. Также обратите внимание на частое удвоение апострофов во многих местах этой главы  всюду, где обычно используются одиночные апострофы. Удвоение экранирует апострофы в определениях функций, поскольку определение функции в действительности представляет собой большую строковую константу в команде CREATE FUNCTION.

В этом разделе рассматривается блочная структура программ PL/pgSQL, комментарии, структура выражений PL/pgSQL и использование команд.

Блоки

Программы PL/pgSQL состоят из блоков. Такой метод организации программного кода обычно называется блочной структурой.

Команда CREATE FUNCTION. Функция (или хранимая процедура) вводится с помощью команды SQL CREATE FUNCTION, которая используются для определения функций PL/pgSQL в базах данных PostgreSQL. Команда CREATE FUNCTION определяет имя функции, типы ее аргументов и возвращаемого значения.

Блок DECLARE. Основной блок функции начинается с секции объявлений. Все переменные объявляются (а также могут инициализироваться значениями по умолчанию) в секции объявлений программного блока. В объявлении указывается имя и тип переменной. Секция объявлений обозначается ключевым словом DECLARE, а каждое объявление завершается символом точки с запятой (;).

Основной программный блок. После объявления переменных следует ключевое слово BEGIN, обозначающее начало основного программного блока. За ключевым словом BEGIN находятся команды, входящие в блок. Конец программного блока обозначается ключевым словом END.

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

Структура программного блока PL/pgSQL приведена в листинге 6.1.

Листинг 6.1. Структура программного блока PL/pgSQL

CREATE FUNCTION идентификатор (аргументы) RETURNS тип AS '

DECLARE

объявление: [...]

BEGIN команда: [...]

. . .

END;

' LANGUAGE 'plpgsql':

Программный блок PL/pgSQL может содержать неограниченное количество вложенных блоков, которые читаются и интерпретируются по тем же правилам, что и обычные блоки. В свою очередь, они могут содержать свои вложенные блоки.

Вложенные блоки упрощают структуру кода в больших функциях PL/pgSQL. Структура вложенных блоков не отличается от структуры обычных блоков: они также начинаются с ключевого слова DECLARE, за которым следует ключевое слово BEGIN и последовательность команд, а затем ключевое слово END.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]