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

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

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

Свойства хранимых процедур:

  • хранимые процедуры, как и другие объекты БД, принадлежат владельцу (создателю), и должны иметь уникальное имя в схеме;

  • владелец процедуры может предоставить право ее запуска другим пользователям (в том числе с правами владельца);

  • способны обрабатывать атомарные данные всех типов данных, поддерживаемых СУБД ЛИНТЕР;

  • способны обрабатывать выборки данных (курсоры), полученные как результат выполнения SELECT-запроса;

  • могут принимать входные и выходные параметры атомарных типов данных;

  • могут возвращать значение атомарного типа данных или выборку (курсор);

  • обеспечивают возможность работы с глобальными переменными хранимых процедур;

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

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

  • обеспечивают обработку ошибочных ситуаций при помощи механизма исключений;

  • явно вызываются на выполнение пользователем при помощи SQL-запроса или по имени внутри другой хранимой процедуры или триггера;

  • могут быть созданы с поддержкой отладочной информации, что позволяет создателю процедуры отлаживать ее выполнение на сервере СУБД с использованием входящего в состав СУБД ЛИНТЕР отладчика триггеров и хранимых процедур.

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

Список поддерживаемых хранимыми процедурами СУБД ЛИНТЕР типов данных приведен в таблице 1.

Таблица 1. Типы данных, поддерживаемые хранимыми процедурами
Тип данныхЗначение
INT или INTEGER4-х байтовое целое
SMALLINT2-х байтовое целое
BIGINT8-ми байтовое целое
REAL4-х байтовое с плавающей точкой
DOUBLE8-ми байтовое с плавающей точкой
NUMERIC (DECIMAL)Число с фиксированной точкой
CHAR(размер)Строки фиксированной длины (до 4000 символов), при работе с объектами БД дополняются пробелами до заданной длины
VARCHAR(размер)Строки переменной длины (до 4000 символов), пробелами не дополняются
NCHAR(размер)Строки фиксированной длины 2-х байтных UNICODE-символов (до 2000 символов), при работе с объектами БД дополняются пробелами до заданной длины
NVARCHAR(размер)Строки переменной длины 2-х байтных UNICODE-символов (до 2000 символов), пробелами не дополняются
DATEДата и время
BOOLEANЛогическое (TRUE/FALSE)
BYTE(размер)Последовательность байт фиксированной длины (до 3919 байт), при работе с объектами БД дополняются двоичными нулями до заданной длины
VARBYTE(размер)Последовательность байт переменной длины (до 3919 байт), двоичными нулями не дополняются
CURSORПредставление результата поискового запроса
BLOBПоддержка BLOB-данных выполняется с помощью встроенных функций

При создании хранимой процедуры ядро СУБД ЛИНТЕР вызывает специальный процесс TSP – транслятор хранимых процедур, который транслирует исходный текст процедуры в промежуточный байт-код, пригодный для эффективного исполнения.

Для поддержки хранимых процедур в БД должны быть системные таблицы $$$PROC и $$$PRCD, которые создаются при выполнении SQL-скрипта systab.sql, расположенного в подкаталоге \dict установочного каталога СУБД ЛИНТЕР.

Примеры создания процедур можно найти в каталоге samples\sp дистрибутива СУБД ЛИНТЕР.