Программирование >>  Sql: полное руководство 

1 ... 196 197 198 [ 199 ] 200 201 202 ... 264


ситуация, задаваемая пользователем - ситуация, профаммируемая непосредственно в хранимой процедуре.

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

declare bad err condition for sqlstate 12345; declare my err condition

После описания ситуации о ней можно просигнализировать в хранимой процедуре с помощью инструкции signal:

signal bad err;

signal sqlstate 12345;

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

continue - когда обработчик завершит свою работу, управление будет передано инсфукции, следующей за той, при выполнении которой возникла исключительная ситуация; таким образом, выполнение процедуры будет продолжено со следующей сфОки;

exit - когда обработчик завершит свою работу, управление будет передано в конец блока инструкций, при выполнении которого возникла исключительная ситуация; таким образом, будет осуществлен выход из текущего блока;

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

Вот несколько примеров обработчиков:

/* Обработать предупреждение SQL и продолжить */ declare continue handler for sqlwarnmg call my warn routine() ;

/* Обработать ошибку и отменить изменения */ declare undo handler for user disaster begin

/* Исправляем последствия ошибки */

Текст обработчика может быть довольно сложным, и в ходе его вьтолнения могут возникать новые ошибки. Чтобы избежать бесконечной обработки ошибок, можно воспользоваться инструкцией resignal, которая подобна описанной выше инсфукции signal, но передает управление обработчику более высокого уровня.



Перегрузка имен подпрограллм

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

create function combo(а, b) а integer; b integer; returns integer; as return (a+b)

create function combo(a, b, c) a integer; b integer; с integer; returns integer; as return (a+b+c)

create function combo(a, b) a varchar (255) ; b varchar(255); returns varchar(255); as return (a I I b)

Первая функция combo складывает два целых числа, а вторая - три. Третья функция комбинирует две символьные строки путем их конкатенации. Стандарт SQL/PSM позволяет назвать все три функции одним именем и сохранить их в одной базе данных. Когда СУБД встречает вызов функции combo, она анализирует количество и типы переданных функции аргументов и определяет, какую из версий этой функции ей нужно вызвать. Таким образом, механизм перегрузки позволяет программисту создать семейство подпрограмм с общим именем для выполнения одной и той же логической функции, но для данных различных типов.

Чтобы упростить управление семействами подпрограмм, имеющих одинаковые имена, стандарт SQL/PSM вводит концепцию уникальных имен. Уникальное имя - это второе имя подпрограммы, которое должно быть уникальным в схеме базы данных или в модуле. Оно однозначно идентифицирует подпрограмму. Уникальное имя используется при удалении подпрограммы из базы данных и отражается в Представлениях информационной схемы базы данных, описывающих хранимые процедуры. При вызове подпрограммы уникальное имя не используется, поскольку это противоречит основному назначению перегрузки. Поддержка перегрузки только начинает появляться в коммерческих реляционных СУБД с объектно-ориентированными расщирениями, например в Informix Universal Server.

Дополнительные элементы SQL/PSM, связанные с хранимыми процедурами

к набору привилегий, существующих в SQL2, стандартом SQL/PSM была добавлена еще одна - привилегия execute, позволяющая пользователю выполнять хранимую процедуру. Эта привилегия назначается и отменяется инструкциями grant и revoke так же, как и все остальные привилегии.



в соответствии со стандартом SQL/PSM, хранимая процедура принадлежит схеме базы данных, а поскольку в одной базе данных может быть множество схем, то при вызове хранимой процедуры ее имя должно быть задано с указанием конкретной схемы, чтобы однозначно идентифицировать процедуру Стандарт SQL/PSM предлагает альтернативный метод поиска определения процедуры, для которой не задано имя схемы Этот метод заключается в следующем С помощью инструкции patjj создается путь, представляющий собой последовательность имен схем, которые должны просматриваться в поисках хранимой процедуры Значение по умолчанию для этого параметра может быть задано как часть заголовка схемы в инструкции create schema Кроме того, его можно динамически модифицировать в ходе сеанса

SQL с помощью инструкции set path

Резюме

Хранимые процедуры и триггеры находят чрезвычайно щирокое применение в реляционных базах данных и приложениях, связанных с обработкой транзакций

Хранимая процедура представляет собой набор взаимосвязанных операций, которые будут выполняться при вызове процедуры Это повышает эффективность работы с базой данных и снижает вероятность ошибок

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

Хранимые функции являются специальной формой хранимых процедур они возвращают значения

Триггеры являются хранимыми процедурами, автоматически выполняемыми в ответ на попытки модификации таблиц, с которыми они связаны Триггер может

активизироваться операциями insert, delete и update

в ведущих СУБД для поддержки хранимых процедур и триггеров используются различные диалекты SQL

В настоящее время для хранимых процедур (но не для триггеров) уже существует международный стандарт Однако разработан он недавно и еще не полностью реализован в ведущих СУБД



1 ... 196 197 198 [ 199 ] 200 201 202 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика