diff --git a/db/PKG_P8PANELS_BASE.pck b/db/PKG_P8PANELS_BASE.pck index 1313512..de1d2fa 100644 --- a/db/PKG_P8PANELS_BASE.pck +++ b/db/PKG_P8PANELS_BASE.pck @@ -228,6 +228,35 @@ create or replace package body PKG_P8PANELS_BASE as end if; end UTL_SEARCH_PREPARE; + /* Разбор ссылки на вызываемый хранимый объект */ + procedure UTL_STORED_PARSE_LINK + ( + SSTORED in varchar2, -- Ссылка на вызываемый хранимый объект + SPROCEDURE out varchar2, -- Имя процедуры + SPACKAGE out varchar2 -- Имя пакета + ) + is + NDELIMITER PKG_STD.TNUMBER; -- Позиция разделителя имени пакета в наименовании хранимого объекта + begin + /* Если есть что разбирать */ + if (SSTORED is not null) then + /* Проверим наличие разделителя */ + NDELIMITER := INSTR(SSTORED, '.'); + /* Если разделитель есть */ + if (NDELIMITER <> 0) then + /* Всё что справа от него - это имя процедуры */ + SPROCEDURE := UPPER(SUBSTR(SSTORED, NDELIMITER + 1)); + /* Всё что слева от него - это имя пакета */ + SPACKAGE := UPPER(SUBSTR(SSTORED, 1, NDELIMITER - 1)); + else + /* Разделителя нет - это просто имя хранимой процедуры */ + SPROCEDURE := UPPER(SSTORED); + /* Без указания пакета */ + SPACKAGE := null; + end if; + end if; + end UTL_STORED_PARSE_LINK; + /* Формирование сообщения об отсутствии значения */ function MSG_NO_DATA_MAKE ( @@ -621,12 +650,12 @@ create or replace package body PKG_P8PANELS_BASE as 'Хранимая процедура/функция "' || SSTORED_ || '" не определена.'); else /* Проверим, что в имени нет ссылки на пакет */ - PKG_EXS.UTL_STORED_PARSE_LINK(SSTORED => SSTORED_, SPROCEDURE => SPROCEDURE, SPACKAGE => SPACKAGE); + UTL_STORED_PARSE_LINK(SSTORED => SSTORED_, SPROCEDURE => SPROCEDURE, SPACKAGE => SPACKAGE); /* Если в имени есть ссылка на пакет - сначала проверим его состояние */ if (SPACKAGE is not null) then RPACKAGE := PKG_OBJECT_DESC.DESC_PACKAGE(SPACKAGE_NAME => SPACKAGE, BRAISE_ERROR => false); end if; - /* Если есть ссылка на пакет, или он не валиден - это ошибка */ + /* Если есть ссылка на пакет, и он невалиден - это ошибка */ if ((SPACKAGE is not null) and (RPACKAGE.STATUS <> SDB_OBJECT_STATE_VALID)) then P_EXCEPTION(0, 'Пакет "' || SPACKAGE ||