Процедура публикации выборки для прогноза

This commit is contained in:
Mikhail Chechnev 2025-04-01 15:43:45 +03:00
parent 962e3208ce
commit a895096dea

View File

@ -124,6 +124,13 @@ is
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
);
/* Публикация выборки для прогоноза */
procedure P_FORECAST_DATA
(
NIDENT in number, -- Идентификатор процесса
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
);
/* Инициализация настроек расширения для интеграции с фреймворк по прогнозированию ресурса оборудования */
procedure INIT_EQUIPDS
(
@ -391,7 +398,7 @@ is
NSTATUS PKG_STD.tNUMBER; -- состояния "Выборки данных оборудования (классы оборудования, файлы данных)"
SERR PKG_STD.tSTRING; -- Текст ошибки
SQUEUE_ID PKG_STD.tSTRING; -- Идентификатор очереди обработки
NPRECISION_F PKG_STD.tNUMBER; -- Точность Модели (факт)
NPRECISION PKG_STD.tNUMBER; -- Точность модели
begin
/* Поиск записи очереди обмена */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
@ -405,11 +412,11 @@ is
SPATH => 'message');
SQUEUE_ID := PKG_EXS.OPTIONS_READ(sOPTIONS => BLOB2CLOB(lbDATA => REXSQUEUE.MSG,
sCHARSET => PKG_CHARSET.CHARSET_UTF_),
sCHARSET => PKG_CHARSET.CHARSET_UTF_),
SPATH => 'queue_id');
NPRECISION_F := PKG_EXS.OPTIONS_READ(sOPTIONS => BLOB2CLOB(lbDATA => REXSQUEUE.MSG,
sCHARSET => PKG_CHARSET.CHARSET_UTF_),
SPATH => 'precision');
NPRECISION := PKG_EXS.OPTIONS_READ(sOPTIONS => BLOB2CLOB(lbDATA => REXSQUEUE.MSG,
sCHARSET => PKG_CHARSET.CHARSET_UTF_),
SPATH => 'precision');
case UPPER(SSTATE)
when 'OK' then
NSTATUS := UDO_PKG_EQUIPDS_BASE.NCMML_STATUS_PROCESSED;
@ -426,7 +433,7 @@ is
SERR => SERR);
if SERR is null then
/* Базовая установка фактической точности "Выборки данных оборудования (классы оборудования, модели)" */
UDO_PKG_EQUIPDS_BASE.CMML_SET_PRECISION_F(NRN => RCMML.RN, NPRECISION_F => ROUND(NPRECISION_F,0));
UDO_PKG_EQUIPDS_BASE.CMML_SET_PRECISION(NRN => RCMML.RN, NPRECISION => ROUND(NPRECISION,0));
end if;
end loop;
@ -444,6 +451,56 @@ is
end P_REQUIREMENTS_CB;
/* Публикация выборки для прогоноза */
procedure P_FORECAST_DATA
(
NIDENT in number, -- Идентификатор процесса
NEXSQUEUE in number -- Регистрационный номер обрабатываемой позиции очереди обмена
)
is
REXSQUEUE EXSQUEUE%rowtype; -- Запись позиции очереди
NDATASET_IDENT PKG_STD.TREF; -- Идентификатор данных выборки для прогноза
BRESP blob; -- Буфер для результата
SARG_DATASET_IDENT PKG_STD.TSTRING := 'NDATASET_IDENT'; -- Наименование аргумента запроса для идентификатора данных выборки для прогноза
begin
/* Считываем позицию очереди */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
/* Читаем параметры запроса - идентификатор файлового буфера с данными для прогноза */
begin
NDATASET_IDENT := TO_NUMBER(PKG_EXS.OPTIONS_READ(SOPTIONS => REXSQUEUE.OPTIONS,
SPATH => PKG_EXS.SMSG_OPTION_CODE_QS || '/' ||
SARG_DATASET_IDENT));
exception
when others then
P_EXCEPTION(0, 'Неверный формат числа (%s).', SARG_DATASET_IDENT);
end;
if (NDATASET_IDENT is null) then
P_EXCEPTION(0,
'Неуказан обязательный парметр запроса - %s.',
SARG_DATASET_IDENT);
end if;
/* Читаем данные из файлового буфера */
for C in (select T.BDATA from FILE_BUFFER T where T.IDENT = NDATASET_IDENT)
loop
if (BRESP is not null) then
P_EXCEPTION(0, 'Найдено более одного набора сведений о наработках.');
end if;
BRESP := C.BDATA;
end loop;
if (BRESP is null) then
P_EXCEPTION(0, 'Сведений о наработках не найдено.');
end if;
/* Возвращаем ответ */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK, BRESP => BRESP);
exception
when others then
/* Вернём ошибку - это фатальная */
PKG_STATE.DIAGNOSTICS_STACKED();
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT,
SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR,
SMSG => PKG_STATE.SQL_ERRM());
end P_FORECAST_DATA;
/* Инициализация настроек расширения для интеграции с фреймворк по прогнозированию ресурса оборудования */
procedure INIT_EQUIPDS
(