From 3625b4a095da26a3a1413a873de7c35e58614a5d Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 23 Dec 2025 16:20:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D0=94:=20=D0=9E=D1=82=D0=B2=D1=8F=D0=B7?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D1=82=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BD=D1=8B=D1=85=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20"=D0=A1=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D0=B0=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D0=B8"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_BASE.pck | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) 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 ||