FirebirdSQL logo

Пакет — группа процедур и функций, которая представляет собой один объект базы данных.

Пакеты Firebird состоят из двух частей: заголовка (ключевое слово PACKAGE) и тела (ключевые слова PACKAGE BODY). Такое разделение очень сильно напоминает модули Delphi, заголовок соответствует интерфейсной части, а тело — части реализации.

Сначала создаётся заголовок (CREATE PACKAGE), а затем — тело (CREATE PACKAGE BODY).

CREATE PACKAGE

Назначение

Создание заголовка пакета.

Доступно в

DSQL

Синтаксис
CREATE PACKAGE package_name
[<rights clause>]
AS
BEGIN
  [<package_item> ...]
END

<rights clause> ::=
  SQL SECURITY {DEFINER | INVOKER}

<package_item> ::=
    <function_decl>;
  | <procedure_decl>;

<function_decl> ::=
  FUNCTION func_name [(<in_params>)]
  RETURNS <type> [NOT NULL] [COLLATE collation]
  [DETERMINISTIC]

<procedure_decl> ::=
  PROCEDURE proc_name [(<in_params>)]
  [RETURNS (<out_params>)]

<in_params> ::= <inparam> [, <inparam> ...]

<inparam> ::= <param_decl> [{= | DEFAULT} <value>]

<value> ::=  {literal | NULL | context_var}

<out_params> ::= <outparam> [, <outparam> ...]

<outparam>  ::=  <param_decl>

<param_decl> ::= paramname <type> [NOT NULL] [COLLATE collation]

<type> ::= <datatype> | [TYPE OF] domain_name | TYPE OF COLUMN rel.col

<datatype> ::=
    <scalar_datatype> | <blob_datatype>

<scalar_datatype> ::=  См. Синтаксис скалярных типов данных

<blob_datatype> ::= См. Синтаксис типа данных BLOB
Table 1. Параметры оператора CREATE PACKAGE
Параметр Описание

package_name

Имя пакета.Может содержать до 63 символов.

function_decl

Объявление функции.

procedure_decl

Объявление процедуры.

proc_name

Имя процедуры.Может содержать до 63 символов.

func_name

Имя функции.Может содержать до 63 символов.

inparam

Описание входного параметра.

outparam

Описание выходного параметра.

literal

Литерал, совместимый по типу с параметром.

context_var

Любая контекстная переменная, тип которой совместим с типом параметра.

paramname

Имя входного или выходного параметра процедуры/функции.Может содержать до 63 символов.Имя параметра должно быть уникальным среди входных и выходных параметров процедуры/функции, а также её локальных переменных.

datatype

Тип данных SQL.

collation

Порядок сортировки.

domain_name

Имя домена.

rel

Имя таблицы или представления.

col

Имя столбца таблицы или представления.

Оператор CREATE PACKAGE создаёт новый заголовок пакета.Имя пакета должно быть уникальным среди имён всех пакетов.

Процедуры и функции, объявленные в заголовке пакета, доступны вне тела пакета через полный идентификатор имён процедур и функций (package_name.procedure_name и package_name.function_name). Процедуры и функции, определенные в теле пакета, но не объявленные в заголовке пакета, не видны вне тела пакета.

Имена процедур и функций, объявленные в заголовке пакета, должны быть уникальны среди имён процедур и функций, объявленных в заголовке и теле пакета.

Note

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