Кто может удалить тело пакета?
Выполнить оператор DROP PACKAGE BODY
могут:
-
Владелец пакета;
-
Пользователи с привилегией
ALTER ANY PACKAGE
.
Выполнить оператор 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