Выходные параметры
Для хранимых процедур список выходных параметров задаётся в необязательное предложение RETURNS.
Для хранимых функций в обязательном предложении RETURNS задаётся тип возвращаемого значения.
Для хранимых процедур список выходных параметров задаётся в необязательное предложение RETURNS.
Для хранимых функций в обязательном предложении RETURNS задаётся тип возвращаемого значения.
В качестве типа параметра можно указать имя домена.В этом случае параметр будет наследовать все характеристики домена.
Если перед названием домена дополнительно используется предложение TYPE OF, то используется только тип данных домена — не проверяются его ограничения NOT NULL и CHECK (если они есть), а также не используется значение по умолчанию.Если домен текстового типа, то всегда используется его набор символов и порядок сортировки.
Входные и выходные параметры можно объявлять, используя тип данных столбцов существующих таблиц и представлений.Для этого используется предложение TYPE OF COLUMN, после которого указывается имя таблицы или представления и через точку имя столбца.
При использовании TYPE OF COLUMN наследуется только тип данных, а в случае строковых типов ещё и набор символов, и порядок сортировки.Ограничения и значения по умолчанию столбца никогда не используются.
Необязательное предложение DETERMINISTIC в объявлении функции указывает, что функция детерминированная.Детерминированные функции каждый раз возвращают один и тот же результат, если предоставлять им один и тот же набор входных значений.Недетерминированные функции могут возвращать каждый раз разные результаты, даже если предоставлять им один и тот же набор входных значений.Если для функции указано, что она является детерминированной, то такая функция не вычисляется заново, если она уже была вычислена однажды с данным набором входных аргументов, а берет свои значения из кэша метаданных (если они там есть).
|
Note
|
На самом деле в текущей версии Firebird, не существует кэша хранимых функций с маппингом входных аргументов на выходные значения. Указание инструкции |
Выполнить оператор CREATE PACKAGE могут:
Пользователи с привилегией CREATE PACKAGE.
Пользователь, создавший заголовок пакета становится владельцем пакета.
CREATE PACKAGE APP_VAR
AS
BEGIN
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC;
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC;
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE DEFAULT CURRENT_DATE);
END
То же самое, но процедуры и функции пакета будут выполняться с правами определяющего пользователя (владельца пакета).
CREATE PACKAGE APP_VAR
SQL SECURITY DEFINER
AS
BEGIN
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC;
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC;
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE DEFAULT CURRENT_DATE);
END
ALTER PACKAGEИзменение заголовка пакета.
DSQL
ALTER PACKAGE package_name
[<rights clause>]
AS
BEGIN
[<package_item> ...]
END
<package_item> ::=
<function_decl>;
| <procedure_decl>;
<function_decl> ::=
FUNCTION func_name [(<in_params>)]
RETURNS <type> [COLLATE collation]
[DETERMINISTIC]
<procedure_decl> ::=
PROCEDURE proc_name [(<in_params>)]
[RETURNS (<out_params>)]
Подробнее см. CREATE PACKAGE
Оператор ALTER PACKAGE изменяет заголовок пакета.Позволяется изменять количество и состав процедур и функций, их входных и выходных параметров.При этом исходный код тела пакета сохраняется.Состояние соответствия тела пакета его заголовку отображается в столбце RDB$PACKAGES.RDB$VALID_BODY_FLAG.
Выполнить оператор ALTER PACKAGE могут:
Владелец пакета;
Пользователи с привилегией ALTER ANY PACKAGE.
ALTER PACKAGE APP_VAR
AS
BEGIN
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC;
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC;
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE DEFAULT CURRENT_DATE);
END
CREATE OR ALTER PACKAGEСоздание нового или изменение существующего заголовка пакета.
DSQL
CREATE OR ALTER PACKAGE package_name
[<rights clause>]
AS
BEGIN
[<package_item> ...]
END
<package_item> ::=
<function_decl>;
| <procedure_decl>;
<function_decl> ::=
FUNCTION func_name [(<in_params>)]
RETURNS <type> [COLLATE collation]
[DETERMINISTIC]
<procedure_decl> ::=
PROCEDURE proc_name [(<in_params>)]
[RETURNS (<out_params>)]
Подробнее см. CREATE PACKAGE
Оператор CREATE OR ALTER PACKAGE создаёт новый или изменяет существующий заголовок пакета.Если заголовок пакета не существует, то он будет создан с использованием предложения CREATE PACKAGE.Если он уже существует, то он будет изменен и перекомпилирован, при этом существующие привилегии и зависимости сохраняются.
CREATE OR ALTER PACKAGE APP_VAR
AS
BEGIN
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC;
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC;
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE DEFAULT CURRENT_DATE);
END
DROP PACKAGEУдаление заголовка пакета.
DSQL
DROP PACKAGE package_name
| Параметр | Описание |
|---|---|
package_name |
Имя пакета. |
Оператор DROP PACKAGE удаляет существующий заголовок пакета.Перед удалением заголовка пакета (DROP PACKAGE), необходимо выполнить удаление тела пакета (DROP PACKAGE BODY), иначе будет выдана ошибка.Если от заголовка пакета существуют зависимости, то при попытке удаления такого заголовка будет выдана соответствующая ошибка.
Выполнить оператор DROP PACKAGE могут:
Владелец пакета;
Пользователи с привилегией DROP ANY PACKAGE.
DROP PACKAGE APP_VAR;
RECREATE PACKAGEСоздание нового или пересоздание существующего заголовка пакета.
DSQL
RECREATE PACKAGE package_name
[<rights clause>]
AS
BEGIN
[<package_item> ...]
END
<package_item> ::=
<function_decl>;
| <procedure_decl>;
<function_decl> ::=
FUNCTION func_name [(<in_params>)]
RETURNS <type> [COLLATE collation]
[DETERMINISTIC]
<procedure_decl> ::=
PROCEDURE proc_name [(<in_params>)]
[RETURNS (<out_params>)]
Подробнее см. CREATE PACKAGE
Оператор RECREATE PACKAGE создаёт новый или пересоздаёт существующий заголовок пакета.Если заголовок пакета с таким именем уже существует, то оператор попытается удалить его и создать новый заголовок пакета.Пересоздать заголовок пакета невозможно, если у существующей заголовка пакета имеются зависимости или существует тело этого пакета.После пересоздания заголовка пакета привилегии на выполнение подпрограмм пакета и привилегии самого пакета не сохраняются.
RECREATE PACKAGE APP_VAR
AS
BEGIN
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC;
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC;
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE DEFAULT CURRENT_DATE);
END