Хранимые процедуры
Хранимой процедурой называется некоторый алгоритм, записанный на процедурном языке, сохраненный в БД и способный исполняться СУБД. Хранимые процедуры сочетают легкость и гибкость языка SQL с процедурными возможностями языка структурного программирования.
Хранимые процедуры можно использовать для реализации части логики приложения, выполнение которой перекладывается с клиентского приложения на сервер БД. Как правило, эта логика касается доступа к БД, что позволяет унифицировать определенные алгоритмы обработки данных, переведя их однажды на сторону сервера и контролируя на сервере.
Свойства хранимых процедур:
-
хранимые процедуры, как и другие объекты БД, принадлежат владельцу (создателю), и должны иметь уникальное имя в схеме;
-
владелец процедуры может предоставить право ее запуска другим пользователям (в том числе с правами владельца);
-
способны обрабатывать атомарные данные всех типов данных, поддерживаемых СУБД ЛИНТЕР;
-
способны обрабатывать выборки данных (курсоры), полученные как результат выполнения SELECT-запроса;
-
могут принимать входные и выходные параметры атомарных типов данных;
-
могут возвращать значение атомарного типа данных или выборку (курсор);
-
обеспечивают возможность работы с глобальными переменными хранимых процедур;
-
обеспечивают реализацию последовательных, ветвящихся и циклических алгоритмов;
-
допускают использование в качестве элементов процедурного языка выражения различных типов и SQL-запросы к БД;
-
обеспечивают обработку ошибочных ситуаций при помощи механизма исключений;
-
явно вызываются на выполнение пользователем при помощи SQL-запроса или по имени внутри другой хранимой процедуры или триггера;
-
могут быть созданы с поддержкой отладочной информации, что позволяет создателю процедуры отлаживать ее выполнение на сервере СУБД с использованием входящего в состав СУБД ЛИНТЕР отладчика триггеров и хранимых процедур.
В качестве входных параметров можно использовать любые выражения.
Список поддерживаемых хранимыми процедурами СУБД ЛИНТЕР типов данных приведен в таблице 1.
Тип данных | Значение |
---|---|
INT или INTEGER | 4-х байтовое целое |
SMALLINT | 2-х байтовое целое |
BIGINT | 8-ми байтовое целое |
REAL | 4-х байтовое с плавающей точкой |
DOUBLE | 8-ми байтовое с плавающей точкой |
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
дистрибутива СУБД ЛИНТЕР.