Кто может создать тело пакета?
Выполнить оператор CREATE PACKAGE BODY могут:
-
Владелец пакета;
-
Пользователи с привилегией
ALTER ANY PACKAGE.
Выполнить оператор CREATE PACKAGE BODY могут:
Владелец пакета;
Пользователи с привилегией ALTER ANY PACKAGE.
CREATE PACKAGE BODY APP_VAR
AS
BEGIN
-- Возвращает дату начала периода
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC
AS
BEGIN
RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEBEGIN');
END
-- Возвращает дату окончания периода
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC
AS
BEGIN
RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEEND');
END
-- Устанавливает диапазон дат рабочего периода
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE)
AS
BEGIN
RDB$SET_CONTEXT('USER_SESSION', 'DATEBEGIN', ADATEBEGIN);
RDB$SET_CONTEXT('USER_SESSION', 'DATEEND', ADATEEND);
END
END
DROP PACKAGE BODYУдаление тела пакета.
DSQL
DROP PACKAGE BODY package_name
| Параметр | Описание |
|---|---|
package_name |
Имя пакета. |
Оператор DROP PACKAGE BODY удаляет тело пакета.
Выполнить оператор DROP PACKAGE BODY могут:
Владелец пакета;
Пользователи с привилегией ALTER ANY PACKAGE.
DROP PACKAGE BODY APP_VAR;
RECREATE PACKAGE BODYСоздание нового и пересоздание существующего тела пакета.
DSQL
RECREATE PACKAGE BODY package_name
AS
BEGIN
[<package_item> ...]
[<package_body_item> ...]
END
<package_item> ::=
<function_decl>;
| <procedure_decl>;
<function_decl> ::=
FUNCTION func_name [(<in_params>)]
RETURNS <type> [COLLATE collation]
[<function_options>]
<procedure_decl> ::=
PROCEDURE proc_name [(<in_params>)]
[RETURNS (<out_params>)]
[<procedure_options>]
<package_body_item> ::=
<function_impl>
| <procedure_impl>
<function_impl> ::=
FUNCTION func_name [(<in_impl_params>)]
RETURNS <type> [COLLATE collation]
[DETERMINISTIC]
<routine-body>
<procedure_impl> ::=
PROCEDURE proc_name [(<in_impl_params>)]
[RETURNS (<out_params>)]
<routine-body>
Подробнее см. CREATE PACKAGE BODY.
Оператор RECREATE PACKAGE BODY создаёт новое или пересоздаёт существующее тело пакета.Если тело пакета с таким именем уже существует, то оператор попытается удалить его и создать новое тело пакета.После пересоздания тела пакета привилегии на выполнение подпрограмм пакета и привилегии самого пакета сохраняются.
RECREATE PACKAGE BODY APP_VAR
AS
BEGIN
-- Возвращает дату начала периода
FUNCTION GET_DATEBEGIN() RETURNS DATE DETERMINISTIC
AS
BEGIN
RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEBEGIN');
END
-- Возвращает дату окончания периода
FUNCTION GET_DATEEND() RETURNS DATE DETERMINISTIC
AS
BEGIN
RETURN RDB$GET_CONTEXT('USER_SESSION', 'DATEEND');
END
-- Устанавливает диапазон дат рабочего периода
PROCEDURE SET_DATERANGE(ADATEBEGIN DATE, ADATEEND DATE)
AS
BEGIN
RDB$SET_CONTEXT('USER_SESSION', 'DATEBEGIN', ADATEBEGIN);
RDB$SET_CONTEXT('USER_SESSION', 'DATEEND', ADATEEND);
END
END