При помощи представлений можно написать не любую обработку базовых отношений, например, в представлениях нет понятия параметров (найти доход продавца, номер которого передается как параметр). Кроме того, отнюдь не любое действие можно описать с помощью операторов реляционной алгебры.
Хранимые процедуры в реляционных СУБД позволяют соединить достоинства реляционной алгебры и операторов императивного языка программирования. На язык хранимых процедур в настоящий момент не существует стандарта, поэтому он специфичен в разных СУБД. Разница заключается не только в синтаксисе, но и в возможностях.
Преимущества использования такие же, как и у представлений, однако можно еще уменьшить возможность работы пользователя с данными так, что они не смогут вообще писать запросы, а будут пользоваться строго определенными способами обработки.
Еще одним преимуществом является перенос обработки данных с рабочей станции на сервер (уменьшается загрузка сети). Хранимые процедуры также позволяют применять модульное проектирование, то есть они могут использоваться несколькими приложениями для доступа к одним и тем же данным. Синтаксис:
В interbase присутствуют следующие возможности: при декларации используется просто имя переменной и тип. Если переменной присваивается какое-либо значение, пишется так:
<имя переменной>=<значение>
Если идет обращение к значению переменной или ей присваивается результат выполнения запроса, то перед именем переменной ставится двоеточие.
Операторы:
- запросы модификации данных (insert, update, delete)
- запросы select, результаты выполнения которых присваиваются переменным:
Select имя, номер from продавец into :name, :num
Создавать объекты и разрушать внутри хранимых процедур в Interbase нельзя, то есть нельзя использовать операторы create, drop и alter.
- оператор условия if () then () [else ()]. В условии можно использовать операторы сравнения и логические связки
- операторы цикла:
o while <условие> do <оператор>
o for <select_инструкция> do <оператор> Для каждого кортежа select-инструкции выполняется заданное действие.
- suspend – возврат из хранимой процедуры выходных параметров и продолжение работы процедуры. Процедура закончит работу, когда выполнит все операторы. Если есть необходимость прервать выполнение процедуры, то в зависимости от желаемого результата можно воспользоваться одним из следующих операторов:
- exit – корректный выход из процедуры, то есть работа прерывается, но все действия, выполненные хранимой процедурой, остаются в силе и ошибка не появляется.
- exception <имя объекта> - порождение исключительной ситуации. После выполнения этого оператора работа хранимой процедуры прекращается, а все действия, выполненные в ее рамках, отменяются. Для того, чтобы была возможность вызвать исключительную ситуацию, нужно до создания хранимой процедуры создать соответствующий объект:
Create exception <имя> <текст сообщения>
В Interbase хранимая процедура представляет собой законченную транзакцию, действия которой либо все принимаются, либо все отвергаются.