с Firebird 3.0 ваша версия: любая

CREATE PACKAGE

Версии сервера

2.53.04.05.06.0
−ДаДаДаДа

Доступно в

DSQL

Формат

CREATE PACKAGE package_name
  [SQL SECURITY {INVOKER | DEFINER}]
AS
BEGIN
  [<package_item declarations>]
  [<module function declarations>]
END

CREATE PACKAGE BODY package_name
AS
BEGIN
  [<package_item declarations>]
  [<module function implementations>]
  [<module procedure implementations>]
END

Описание

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

Необязательное предложение SQL SECURITY задаёт контекст привилегий выполнения для всех процедур и функций пакета: INVOKER (по умолчанию) выполняет подпрограммы с правами вызывающего пользователя, а DEFINER — с правами владельца пакета, дополненными привилегиями, выданными самому пакету через GRANT. Переопределять контекст для отдельных подпрограмм внутри пакета запрещено.

В отличие от отдельных хранимых процедур и функций, существующих в глобальном пространстве имён базы данных, пакет позволяет логически объединять связанные подпрограммы. Процедуры и функции, объявленные в заголовке пакета, доступны извне через составное имя вида package_name.proc_name / package_name.func_name. Механизм пакетов разделяет заголовок и тело (CREATE PACKAGE BODY): подпрограммы, определённые только в теле и не объявленные в заголовке, остаются приватными и недоступными снаружи. Если имя подпрограммы пакета совпадает с именем глобальной процедуры или функции, внутри пакета всегда вызывается локальная подпрограмма пакета.

Тело пакета создаётся оператором CREATE PACKAGE BODY; заголовок и тело компилируются вместе, поэтому изменение тела требует прав на изменение и заголовка.

Пример

CREATE PACKAGE APP_SECURITY
  SQL SECURITY DEFINER
AS
BEGIN
  FUNCTION CHECK_USER_ACCESS(
    USER_NAME VARCHAR(63) NOT NULL,
    ROLE_NAME VARCHAR(63) DEFAULT 'GUEST'
  ) RETURNS BOOLEAN DETERMINISTIC;

  PROCEDURE LOG_EVENT(
    EVENT_TYPE VARCHAR(32) NOT NULL,
    DETAILS BLOB SUB_TYPE TEXT
  );
END

См. также

CREATE FUNCTION, CREATE PROCEDURE, GRANT

Источник

Руководство по языку SQL СУБД Firebird 5.0 (sim1984 / ibase.ru, Public Documentation License)

Обсуждение