Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
work_4.doc
Скачиваний:
4
Добавлен:
09.11.2019
Размер:
158.72 Кб
Скачать

2ХранимыЕ процедурЫ

2.1Создание хранимых процедур

Функции языка запросов или хранимые процедуры (Stored Procedure  SP)  набор заранее скомпилированных операторов SQL и операторов управления программой, который хранится как физические объекты базы данных. Любой набор SQL-инструкций, содержащий SELECT, INSERT, UPDATE, DELETE и др., кроме BEGIN, COMMIT, ROLLBACK и SAVEPOINT, отделенные друг от друга точкой с запятой, может быть определен как SP. Они расширяют стандартные возможности SQL, позволяя использовать входные и выходные параметры, операторы принятия решения и объявления переменных. SP может состоять из одной инструкции SELECT, а может включать целый набор операторов SQL и операторов управления программой, которые позволяют реализовать достаточно сложные операции над данными. SP допускают вложенность, т.е. одна SP может вызвать другую, которая, в свою очередь, может вызвать еще одну, и т.д.

По сравнению со стандартными операторами SQL SP обеспечивают значительный выигрыш в быстродействии, поскольку содержащиеся в них операторы SQL заранее скомпилированы. После первого выполнения SP создается план ее выполнения, который сохраняется в процедурном КЭШе, и поэтому все последующие выполнения протекают намного быстрее по сравнению с эквивалентным набором операторов SQL.

SP следует использовать во всех случаях, когда необходимо получить максимальное быстродействие и свести код SQL в единую программу. Чаще всего используются SP, выполняющие вставку, удаление и обновление данных, а также формирующие данные для отчетов.

SP также можно использовать в качестве механизма защиты. К ним прибегают, например, в тех случаях, когда по каким-то причинам нельзя предоставлять прямой доступ пользователям к таблицам и представлениям БД, чтобы не допустить случайной их модификации. Тогда пользователям предоставляется доступ к таблицам только по чтению, а для выполнения таких операций, как UPDATE и DELETE, создаются соответствующие SP, на выполнение которых пользователи и получают права, т.е. пользователи получают доступ к таблицам БД только путем выполнения SP.

В отличие от представлений, для использования которых пользователь должен иметь права на все заявленные в представлении объекты БД, пользователь может выполнять SP не зависимо от того, имеет ли он доступ к таблицам, представлениям или другим функциям, содержащимся в описании SP. Соответствующие права доступа на объекты, используемые в SP, нужны только ее владельцу, который может предоставить другим пользователям разрешение на ее запуск.

Для SP существуют ограничения на применение некоторых инструкций SQL внутри тела SP. Внутри SP нельзя выполнять такие инструкции, как CREATE TABLE, CREATE VIEW, CREATE FUNCTION. Обмен данными между SP осуществляется посредством параметров или временных таблиц.

Примеры:

/* SP, возвращающие скалярное значение */

CREATE OR REPLACE FUNCTION suppliers()

RETURNS bigint

AS $$ SELECT count(*) FROM "Заказы"; $$

LANGUAGE sql;

CREATE OR REPLACE FUNCTION customers()

RETURNS character varying

AS $$ SELECT "Заказчик" FROM "Заказы";$$

LANGUAGE sql;

/* SP, возвращающие набор записей */

CREATE OR REPLACE FUNCTION orders()

RETURNS "Заказы"

AS $$ SELECT * FROM "Заказы" ; $$

LANGUAGE sql;

CREATE OR REPLACE FUNCTION delivery()

RETURNS TABLE (a integer, b character varying(40), c timestamp without time zone, d boolean)

AS $$ SELECT * FROM "Доставка"; $$

LANGUAGE sql;

Для вызова SP надо ввести ее имя в том месте программы, в котором ожидается возвращаемое функцией значение. Для прямого запуска SP обычно используется SELECT или команда EXECUTE, например

PREPARE orders AS SELECT orders();

EXECUTE orders;

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