create or replace package UDO_PKG_EQUIPDS_BASE as /* Считывание записи "Выборки данных оборудования" по регистрационному номеру */ function GET ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NRN in number -- Регистрационный номер ) return UDO_T_EQUIPDS%rowtype; -- Запись выборки данных оборудования /* Поиск "Выборки данных оборудования" по мнемокоду */ procedure FIND_BY_CODE ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NCOMPANY in number, -- Организация SCODE in varchar2, -- Мнемокод NRN out number -- Регистрационный номер ); /* Базовое добавление "Выборки данных оборудования" */ procedure INS ( NCOMPANY in number, -- Организация SCODE in varchar2, -- Мнемокод SNAME in varchar2, -- Наименование NRN out number -- Регистрационный номер ); /* Базовое исправление "Выборки данных оборудования" */ procedure UPD ( NRN in number, -- Регистрационный номер NCOMPANY in number, -- Организация SCODE in varchar2, -- Мнемокод SNAME in varchar2 -- Наименование ); /* Базовое удаление "Выборки данных оборудования" */ procedure DEL ( NRN in number, -- Регистрационный номер NCOMPANY in number -- Организация ); /* Считывание записи "Выборки данных оборудования (классы оборудования)" по регистрационному номеру */ function CM_GET ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NRN in number -- Регистрационный номер ) return UDO_T_EQUIPDSCM%rowtype; -- Запись класса оборудования выборки данных /* Поиск "Выборки данных оборудования (классы оборудования)" по классу оборудования */ procedure CM_FIND_BY_EQOBJKIND ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NPRN in number, -- Родитель SEQOBJKIND in varchar2, -- Класс оборудования NRN out number -- Регистрационный номер ); /* Разыменование словарей "Выборки данных оборудования (классы оборудования)" */ procedure CM_JOINS ( NCOMPANY in number, -- Организация SEQOBJKIND in varchar2, -- Класс оборудования SDICMUNTS in varchar2, -- Единица измерения выборки SUSERPROCS_DATA in varchar2, -- Процедура формирования SEXSSERVICE_UPLOAD in varchar2, -- Сервис обмена для выгрузки данных SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой NEQOBJKIND out number, -- Рег. номер класса оборудования NDICMUNTS out number, -- Рег. номер единицы измерения выборки NUSERPROCS_DATA out number, -- Рег. номер процедуры формирования NEXSSERVICEFN_UPLOAD out number, -- Рег. номер функции обмена для выгрузки данных NEXSSERVICEFN_SEND_MD out number, -- Рег. номер Функции обмена для передачи внешней системе NEXSSERVICEFN_SEND_RQ out number -- Рег. номер функции обмена для обработки внешней системой ); /* Базовое добавление "Выборки данных оборудования (классы оборудования)" */ procedure CM_INS ( NPRN in number, -- Родитель NEQOBJKIND in number, -- Класс оборудования NDICMUNTS in number, -- Единица измерения выборки NUSERPROCS_DATA in number, -- Процедура формирования NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе NEXSSERVICEFN_SEND_RQ in number, -- Функция обмена для обработки внешней системой NRN out number -- Регистрационный номер ); /* Базовое исправление "Выборки данных оборудования (классы оборудования)" */ procedure CM_UPD ( NRN in number, -- Регистрационный номер NEQOBJKIND in number, -- Класс оборудования NDICMUNTS in number, -- Единица измерения выборки NUSERPROCS_DATA in number, -- Процедура формирования NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе NEXSSERVICEFN_SEND_RQ in number -- Функция обмена для обработки внешней системой ); /* Базовое удаление "Выборки данных оборудования (классы оборудования)" */ procedure CM_DEL ( NRN in number -- Регистрационный номер ); /* Базовое добавление "Выборки данных оборудования (классы оборудования, файлы данных)" */ procedure CMFL_INS ( NPRN in number, -- Родитель SFILE_NAME in varchar2, -- Имя файла SDESCR in varchar2, -- Описание NRN out number -- Регистрационный номер ); /* Базовое удаление "Выборки данных оборудования (классы оборудования, файлы данных)" */ procedure CMFL_DEL ( NRN in number -- Регистрационный номер ); /* Базовая установка имени файла "Выборки данных оборудования (классы оборудования, файлы данных)" */ procedure CMFL_SET_FILE_NAME ( NRN in number, -- Регистрационный номер SFILE_NAME in varchar2 -- Имя файла ); /* Базовая установка состояния "Выборки данных оборудования (классы оборудования, файлы данных)" */ procedure CMFL_SET_STATUS ( NRN in number, -- Регистрационный номер NSTATUS in number, -- Состояние (0 - зарегистрирован, 1 - загружается на сервер, 2 - успешно загружен на сервер, 3 - ошибка загрузки на сервер, 4 - загружается во внешнюю систему, 5 - успешно загружен во внешнюю систему, 6 - при загрузке во внешнюю систему произошла ошибка) SQUEUE_ID in varchar2, -- Идентификатор очереди обработки SERR in varchar2 -- Сообщение об ошибке ); /* Поиск "Выборки данных оборудования (классы оборудования, модели)" по задаче */ procedure CMML_FIND_BY_TASK ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NPRN in number, -- Родитель STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */ NPRECISION_P in number, -- Точность (план) NRN out number -- Регистрационный номер ); /* Базовое добавление "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_INS ( NPRN in number, -- Родитель STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */ NPRECISION_P in number, -- Точность (план) NRN out number -- Регистрационный номер ); /* Базовое исправление "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_UPD ( NRN in number, -- Регистрационный номер STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */ NPRECISION_P in number -- Точность (план) ); /* Базовое удаление "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_DEL ( NRN in number -- Регистрационный номер ); /* Базовая установка фактической точности "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_SET_PRECISION_F ( NRN in number, -- Регистрационный номер NPRECISION_F in number -- Точность (факт) ); /* Базовая установка состояния "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_SET_STATUS ( NRN in number, -- Регистрационный номер NSTATUS in number, -- Состояние (0 - зарегистрирована, 1 - обрабатывается внешней системой, 2 - успешно обработана внешней системой, 3 - при обработке внешней системой произошла ошибка) SQUEUE_ID in varchar2, -- Идентификатор очереди обработки SERR in varchar2 -- Сообщение об ошибке ); /* Формирование наименования для задачи "Выборки данных оборудования (классы оборудования, модели)" */ function CMML_TASK_NAME ( STASK in varchar2 -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */ ) return varchar2; -- Наименование задачи /* Формирование подсказки для задачи "Выборки данных оборудования (классы оборудования, модели)" */ function CMML_TASK_HINT return varchar2; -- Подсказка для задачи /* Вычисление вероятности выхода из строя на дату по RUL-прогнозу */ function CMML_RUL_BREAKDOWN_PROB ( NFORECAST in number, -- RUL-прогноз (интервалов до перехода в предельное состояние) DFORECAST_DATE in date, -- Дата прогноза DDATE in date -- Дата на ) return number; -- Значение вероятности /* Базовое добавление "Выборки данных оборудования (классы оборудования, модели, история запросов)" */ procedure CMMLH_INS ( NPRN in number, -- Родитель NEQCONFIG in number, -- Рег. номер технического объекта SRQ_AUTHID in varchar2, -- Пользователь, выполнивший запрос DRQ_DATE in date, -- Дата/время запроса BRQ in blob, -- Параметры запроса NRN out number -- Регистрационный номер ); /* Базовое удаление "Выборки данных оборудования (классы оборудования, модели, история запросов)" */ procedure CMMLH_DEL ( NRN in number -- Регистрационный номер ); /* Базовая установка данных прогноза "Выборки данных оборудования (классы оборудования, файлы данных, история запросов)" */ procedure CMMLH_SET_FORECAST ( NRN in number, -- Регистрационный номер BFORECAST in blob -- Данные прогноза ); /* Базовая установка идентификатора очереди обмена "Выборки данных оборудования (классы оборудования, файлы данных, история запросов)" */ procedure CMMLH_SET_EXSQUEUE ( NRN in number, -- Регистрационный номер NEXSQUEUE in number -- Идентификатор очереди обмена ); end UDO_PKG_EQUIPDS_BASE; / create or replace package body UDO_PKG_EQUIPDS_BASE as /* Считывание записи "Выборки данных оборудования" по регистрационному номеру */ function GET ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NRN in number -- Регистрационный номер ) return UDO_T_EQUIPDS%rowtype -- Запись выборки данных оборудования is RES UDO_T_EQUIPDS%rowtype; -- Буфер для результата begin /* Считывание записи */ begin select T.* into RES from UDO_T_EQUIPDS T where T.RN = NRN; exception when NO_DATA_FOUND then PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => NFLAG_SMART, NDOCUMENT => NRN, SUNIT_TABLE => 'UDO_T_EQUIPDS'); end; /* Возврат результата */ return RES; end GET; /* Поиск "Выборки данных оборудования" по мнемокоду */ procedure FIND_BY_CODE ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NCOMPANY in number, -- Организация SCODE in varchar2, -- Мнемокод NRN out number -- Регистрационный номер ) is begin /* Поиск записи */ begin select RN into NRN from UDO_T_EQUIPDS T where T.COMPANY = NCOMPANY and T.CODE = SCODE; exception when NO_DATA_FOUND then P_EXCEPTION(NFLAG_SMART, 'Выборка данных оборудования "%s" не определёна.', SCODE); end; end FIND_BY_CODE; /* Базовое добавление "Выборки данных оборудования" */ procedure INS ( NCOMPANY in number, -- Организация SCODE in varchar2, -- Мнемокод SNAME in varchar2, -- Наименование NRN out number -- Регистрационный номер ) is begin /* Формируем рег. номер */ NRN := GEN_ID(); /* Добавляем запись */ insert into UDO_T_EQUIPDS (RN, COMPANY, CODE, name) values (NRN, NCOMPANY, SCODE, SNAME); end INS; /* Базовое исправление "Выборки данных оборудования" */ procedure UPD ( NRN in number, -- Регистрационный номер NCOMPANY in number, -- Организация SCODE in varchar2, -- Мнемокод SNAME in varchar2 -- Наименование ) is begin /* Исправим данные */ update UDO_T_EQUIPDS T set T.CODE = SCODE, T.NAME = SNAME where T.RN = NRN and T.COMPANY = NCOMPANY; end UPD; /* Базовое удаление "Выборки данных оборудования" */ procedure DEL ( NRN in number, -- Регистрационный номер NCOMPANY in number -- Организация ) is begin /* Удалим запись */ delete from UDO_T_EQUIPDS T where T.RN = NRN and T.COMPANY = NCOMPANY; end DEL; /* Считывание записи "Выборки данных оборудования (классы оборудования)" по регистрационному номеру */ function CM_GET ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NRN in number -- Регистрационный номер ) return UDO_T_EQUIPDSCM%rowtype -- Запись класса оборудования выборки данных is RES UDO_T_EQUIPDSCM%rowtype; -- Буфер для результата begin /* Считывание записи */ begin select T.* into RES from UDO_T_EQUIPDSCM T where T.RN = NRN; exception when NO_DATA_FOUND then PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => NFLAG_SMART, NDOCUMENT => NRN, SUNIT_TABLE => 'UDO_T_EQUIPDSCM'); end; /* Возврат результата */ return RES; end CM_GET; /* Поиск "Выборки данных оборудования (классы оборудования)" по классу оборудования */ procedure CM_FIND_BY_EQOBJKIND ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NPRN in number, -- Родитель SEQOBJKIND in varchar2, -- Класс оборудования NRN out number -- Регистрационный номер ) is begin /* Поиск записи */ begin select T.RN into NRN from UDO_T_EQUIPDSCM T, EQOBJKIND OK where T.PRN = NPRN and T.EQOBJKIND = OK.RN and OK.CODE = SEQOBJKIND; exception when NO_DATA_FOUND then P_EXCEPTION(NFLAG_SMART, 'Класс оборудования "%s" в выборке данных "%s" не определён.', SEQOBJKIND, TO_CHAR(NPRN)); end; end CM_FIND_BY_EQOBJKIND; /* Разыменование словарей "Выборки данных оборудования (классы оборудования)" */ procedure CM_JOINS ( NCOMPANY in number, -- Организация SEQOBJKIND in varchar2, -- Класс оборудования SDICMUNTS in varchar2, -- Единица измерения выборки SUSERPROCS_DATA in varchar2, -- Процедура формирования SEXSSERVICE_UPLOAD in varchar2, -- Сервис обмена для выгрузки данных SEXSSERVICEFN_UPLOAD in varchar2, -- Функция обмена для выгрузки данных SEXSSERVICE_SEND_MD in varchar2, -- Сервис обмена для передачи внешней системе SEXSSERVICEFN_SEND_MD in varchar2, -- Функция обмена для передачи внешней системе SEXSSERVICE_SEND_RQ in varchar2, -- Сервис обмена для обработки внешней системой SEXSSERVICEFN_SEND_RQ in varchar2, -- Функция обмена для обработки внешней системой NEQOBJKIND out number, -- Рег. номер класса оборудования NDICMUNTS out number, -- Рег. номер единицы измерения выборки NUSERPROCS_DATA out number, -- Рег. номер процедуры формирования NEXSSERVICEFN_UPLOAD out number, -- Рег. номер функции обмена для выгрузки данных NEXSSERVICEFN_SEND_MD out number, -- Рег. номер Функции обмена для передачи внешней системе NEXSSERVICEFN_SEND_RQ out number -- Рег. номер функции обмена для обработки внешней системой ) is NEXSSERVICE PKG_STD.TREF; -- Рег. номер сервиса обмена begin /* Класс оборудования */ FIND_EQOBJKIND_FULLCODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, NCOMPANY => NCOMPANY, SCODE => SEQOBJKIND, NRN => NEQOBJKIND); /* Единица измерения */ FIND_DICMUNTS_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, NCOMPANY => NCOMPANY, SMEAS_MNEMO => SDICMUNTS, NRN => NDICMUNTS); /* Процедура формирования */ if (SUSERPROCS_DATA is not null) then FIND_USERPROCS_CODE(NFLAG_SMART => 0, SCODE => SUSERPROCS_DATA, NRN => NUSERPROCS_DATA); else P_EXCEPTION(0, 'Не указана процедура формирования данных выборки.'); end if; /* Функция обмена для выгрузки данных */ FIND_EXSSERVICE_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, SCODE => SEXSSERVICE_UPLOAD, NRN => NEXSSERVICE); FIND_EXSSERVICEFN_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, NEXSSERVICE => NEXSSERVICE, SCODE => SEXSSERVICEFN_UPLOAD, NRN => NEXSSERVICEFN_UPLOAD); /* Функция обмена для передачи внешней системе */ FIND_EXSSERVICE_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, SCODE => SEXSSERVICE_SEND_MD, NRN => NEXSSERVICE); FIND_EXSSERVICEFN_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, NEXSSERVICE => NEXSSERVICE, SCODE => SEXSSERVICEFN_SEND_MD, NRN => NEXSSERVICEFN_SEND_MD); /* Функция обмена для обработки внешней системой */ FIND_EXSSERVICE_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, SCODE => SEXSSERVICE_SEND_RQ, NRN => NEXSSERVICE); FIND_EXSSERVICEFN_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, NEXSSERVICE => NEXSSERVICE, SCODE => SEXSSERVICEFN_SEND_RQ, NRN => NEXSSERVICEFN_SEND_RQ); end CM_JOINS; /* Базовое добавление "Выборки данных оборудования (классы оборудования)" */ procedure CM_INS ( NPRN in number, -- Родитель NEQOBJKIND in number, -- Класс оборудования NDICMUNTS in number, -- Единица измерения выборки NUSERPROCS_DATA in number, -- Процедура формирования NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе NEXSSERVICEFN_SEND_RQ in number, -- Функция обмена для обработки внешней системой NRN out number -- Регистрационный номер ) is begin /* Формируем рег. номер */ NRN := GEN_ID(); /* Добавляем запись */ insert into UDO_T_EQUIPDSCM (RN, PRN, EQOBJKIND, DICMUNTS, DATA_CONFIG, USERPROCS_DATA, EXSSERVICEFN_UPLOAD, EXSSERVICEFN_SEND_MD, EXSSERVICEFN_SEND_RQ) values (NRN, NPRN, NEQOBJKIND, NDICMUNTS, null, NUSERPROCS_DATA, NEXSSERVICEFN_UPLOAD, NEXSSERVICEFN_SEND_MD, NEXSSERVICEFN_SEND_RQ); end CM_INS; /* Базовое исправление "Выборки данных оборудования (классы оборудования)" */ procedure CM_UPD ( NRN in number, -- Регистрационный номер NEQOBJKIND in number, -- Класс оборудования NDICMUNTS in number, -- Единица измерения выборки NUSERPROCS_DATA in number, -- Процедура формирования NEXSSERVICEFN_UPLOAD in number, -- Функция обмена для выгрузки данных NEXSSERVICEFN_SEND_MD in number, -- Функция обмена для передачи внешней системе NEXSSERVICEFN_SEND_RQ in number -- Функция обмена для обработки внешней системой ) is begin /* Исправим данные */ update UDO_T_EQUIPDSCM T set T.EQOBJKIND = NEQOBJKIND, T.DICMUNTS = NDICMUNTS, T.USERPROCS_DATA = NUSERPROCS_DATA, T.EXSSERVICEFN_UPLOAD = NEXSSERVICEFN_UPLOAD, T.EXSSERVICEFN_SEND_MD = NEXSSERVICEFN_SEND_MD, T.EXSSERVICEFN_SEND_RQ = NEXSSERVICEFN_SEND_RQ where T.RN = NRN; end CM_UPD; /* Базовое удаление "Выборки данных оборудования (классы оборудования)" */ procedure CM_DEL ( NRN in number -- Регистрационный номер ) is begin /* Удалим файлы */ for C in (select T.RN from UDO_T_EQUIPDSCMFL T where T.PRN = NRN) loop CMFL_DEL(NRN => C.RN); end loop; /* Удалим модели */ for C in (select T.RN from UDO_T_EQUIPDSCMML T where T.PRN = NRN) loop CMML_DEL(NRN => C.RN); end loop; /* Удалим запись */ delete from UDO_T_EQUIPDSCM T where T.RN = NRN; end CM_DEL; /* Базовое добавление "Выборки данных оборудования (классы оборудования, файлы данных)" */ procedure CMFL_INS ( NPRN in number, -- Родитель SFILE_NAME in varchar2, -- Имя файла SDESCR in varchar2, -- Описание NRN out number -- Регистрационный номер ) is begin /* Формируем рег. номер */ NRN := GEN_ID(); /* Добавляем запись */ insert into UDO_T_EQUIPDSCMFL (RN, PRN, FILE_NAME, DESCR, QUEUE_ID, STATUS, ERR) values (NRN, NPRN, SFILE_NAME, SDESCR, null, 0, null); end CMFL_INS; /* Базовое удаление "Выборки данных оборудования (классы оборудования, файлы данных)" */ procedure CMFL_DEL ( NRN in number -- Регистрационный номер ) is begin /* Удалим запись */ delete from UDO_T_EQUIPDSCMFL T where T.RN = NRN; end CMFL_DEL; /* Базовая установка имени файла "Выборки данных оборудования (классы оборудования, файлы данных)" */ procedure CMFL_SET_FILE_NAME ( NRN in number, -- Регистрационный номер SFILE_NAME in varchar2 -- Имя файла ) is begin /* Установим имя файла */ update UDO_T_EQUIPDSCMFL T set T.FILE_NAME = SFILE_NAME where T.RN = NRN; end CMFL_SET_FILE_NAME; /* Базовая установка состояния "Выборки данных оборудования (классы оборудования, файлы данных)" */ procedure CMFL_SET_STATUS ( NRN in number, -- Регистрационный номер NSTATUS in number, -- Состояние (0 - зарегистрирован, 1 - загружается на сервер, 2 - успешно загружен на сервер, 3 - ошибка загрузки на сервер, 4 - загружается во внешнюю систему, 5 - успешно загружен во внешнюю систему, 6 - при загрузке во внешнюю систему произошла ошибка) SQUEUE_ID in varchar2, -- Идентификатор очереди обработки SERR in varchar2 -- Сообщение об ошибке ) is begin /* Установим состояние и сопутствующие ему атрибуты */ update UDO_T_EQUIPDSCMFL T set T.STATUS = NSTATUS, T.QUEUE_ID = SQUEUE_ID, T.ERR = SERR where T.RN = NRN; end CMFL_SET_STATUS; /* Поиск "Выборки данных оборудования (классы оборудования, модели)" по задаче */ procedure CMML_FIND_BY_TASK ( NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке (0 - выдавать, 1 - не выдавать) NPRN in number, -- Родитель STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */ NPRECISION_P in number, -- Точность (план) NRN out number -- Регистрационный номер ) is begin /* Поиск записи */ begin select T.RN into NRN from UDO_T_EQUIPDSCMML T where T.PRN = NPRN and T.TASK = STASK and T.PRECISION_P = NPRECISION_P; exception when NO_DATA_FOUND then P_EXCEPTION(NFLAG_SMART, 'Модель с задачей "%s" и точностью "%s" в классе оборудования "%s" не определёна.', STASK, TO_CHAR(NPRECISION_P), TO_CHAR(NPRN)); end; end CMML_FIND_BY_TASK; /* Базовое добавление "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_INS ( NPRN in number, -- Родитель STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */ NPRECISION_P in number, -- Точность (план) NRN out number -- Регистрационный номер ) is begin /* Формируем рег. номер */ NRN := GEN_ID(); /* Добавляем запись */ insert into UDO_T_EQUIPDSCMML (RN, PRN, TASK, PRECISION_P, PRECISION_F, QUEUE_ID, STATUS, ERR) values (NRN, NPRN, STASK, NPRECISION_P, null, null, 0, null); end CMML_INS; /* Базовое исправление "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_UPD ( NRN in number, -- Регистрационный номер STASK in varchar2, -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */ NPRECISION_P in number -- Точность (план) ) is begin /* Исправим данные */ update UDO_T_EQUIPDSCMML T set T.TASK = STASK, T.PRECISION_P = NPRECISION_P where T.RN = NRN; end CMML_UPD; /* Базовое удаление "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_DEL ( NRN in number -- Регистрационный номер ) is begin /* Удалим историю */ for C in (select T.RN from UDO_T_EQUIPDSCMMLH T where T.PRN = NRN) loop CMMLH_DEL(NRN => C.RN); end loop; /* Удалим запись */ delete from UDO_T_EQUIPDSCMML T where T.RN = NRN; end CMML_DEL; /* Базовая установка фактической точности "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_SET_PRECISION_F ( NRN in number, -- Регистрационный номер NPRECISION_F in number -- Точность (факт) ) is begin /* Установим фактическую точность */ update UDO_T_EQUIPDSCMML T set T.PRECISION_F = NPRECISION_F where T.RN = NRN; end CMML_SET_PRECISION_F; /* Базовая установка состояния "Выборки данных оборудования (классы оборудования, модели)" */ procedure CMML_SET_STATUS ( NRN in number, -- Регистрационный номер NSTATUS in number, -- Состояние (0 - зарегистрирована, 1 - обрабатывается внешней системой, 2 - успешно обработана внешней системой, 3 - при обработке внешней системой произошла ошибка) SQUEUE_ID in varchar2, -- Идентификатор очереди обработки SERR in varchar2 -- Сообщение об ошибке ) is begin /* Установим состояние и сопутствующие ему атрибуты */ update UDO_T_EQUIPDSCMML T set T.STATUS = NSTATUS, T.QUEUE_ID = SQUEUE_ID, T.ERR = SERR where T.RN = NRN; end CMML_SET_STATUS; /* Формирование наименования для задачи "Выборки данных оборудования (классы оборудования, модели)" */ function CMML_TASK_NAME ( STASK in varchar2 -- Задача (TCF - оценка технического состояния (Technical Condition Forecast), RUL - прогнозирование остаточного ресурса (Remaining Useful Life), FP - Прогнозирование отказа (Failure Predict)) */ ) return varchar2 -- Наименование задачи is begin case STASK when 'TCF' then return 'Оценка технического состояния'; when 'RUL' then return 'Прогноз остаточного ресурса'; when 'FP' then return 'Прогноз отказа'; else return 'Вид задачи оценки не поддерживается'; end case; end CMML_TASK_NAME; /* Формирование подсказки для задачи "Выборки данных оборудования (классы оборудования, модели)" */ function CMML_TASK_HINT return varchar2 -- Подсказка для задачи is begin return 'TCF - ' || CMML_TASK_NAME(STASK => 'TCF') || ' (Technical Condition Forecast)
' || 'RUL - ' || CMML_TASK_NAME(STASK => 'RUL') || ' (Remaining Useful Life)
' || 'FP - ' || CMML_TASK_NAME(STASK => 'FP') || ' (Failure Predict)'; end CMML_TASK_HINT; /* Вычисление вероятности выхода из строя на дату по RUL-прогнозу */ function CMML_RUL_BREAKDOWN_PROB ( NFORECAST in number, -- RUL-прогноз (интервалов до перехода в предельное состояние) DFORECAST_DATE in date, -- Дата прогноза DDATE in date -- Дата на ) return number -- Значение вероятности is NRES PKG_STD.TNUMBER; -- Буфер для результата begin /* Проверим параметры */ if ((NFORECAST is null) or (DFORECAST_DATE is null) or (DDATE is null) or (DDATE < DFORECAST_DATE) or (DFORECAST_DATE > sysdate) or (DDATE < sysdate)) then return null; end if; /* Проверяем пограничные значения */ if (NFORECAST = 0) or ((DDATE - sysdate) = 0) then return 100; end if; if (sysdate + NFORECAST > DDATE) then return 0; end if; /* Вычисляем */ NRES := 100 - ROUND((NFORECAST - (TRUNC(sysdate) - TRUNC(DFORECAST_DATE))) / (DDATE - sysdate) * 100); /* Корректируем флуктуации */ if (NRES > 100) then NRES := 100; end if; if (NRES < 0) then NRES := 0; end if; /* Возвращаем результат */ return NRES; end CMML_RUL_BREAKDOWN_PROB; /* Базовое добавление "Выборки данных оборудования (классы оборудования, модели, история запросов)" */ procedure CMMLH_INS ( NPRN in number, -- Родитель NEQCONFIG in number, -- Рег. номер технического объекта SRQ_AUTHID in varchar2, -- Пользователь, выполнивший запрос DRQ_DATE in date, -- Дата/время запроса BRQ in blob, -- Параметры запроса NRN out number -- Регистрационный номер ) is begin /* Формируем рег. номер */ NRN := GEN_ID(); /* Добавляем запись */ insert into UDO_T_EQUIPDSCMMLH (RN, PRN, EQCONFIG, RQ_AUTHID, RQ_DATE, RQ, FORECAST, EXSQUEUE) values (NRN, NPRN, NEQCONFIG, SRQ_AUTHID, DRQ_DATE, BRQ, null, null); end CMMLH_INS; /* Базовое удаление "Выборки данных оборудования (классы оборудования, модели, история запросов)" */ procedure CMMLH_DEL ( NRN in number -- Регистрационный номер ) is begin /* Удалим запись */ delete from UDO_T_EQUIPDSCMMLH T where T.RN = NRN; end CMMLH_DEL; /* Базовая установка данных прогноза "Выборки данных оборудования (классы оборудования, файлы данных, история запросов)" */ procedure CMMLH_SET_FORECAST ( NRN in number, -- Регистрационный номер BFORECAST in blob -- Данные прогноза ) is begin /* Установим данные ответа */ update UDO_T_EQUIPDSCMMLH T set T.FORECAST = BFORECAST where T.RN = NRN; end CMMLH_SET_FORECAST; /* Базовая установка идентификатора очереди обмена "Выборки данных оборудования (классы оборудования, файлы данных, история запросов)" */ procedure CMMLH_SET_EXSQUEUE ( NRN in number, -- Регистрационный номер NEXSQUEUE in number -- Идентификатор очереди обмена ) is begin /* Установим идентификатор очереди обмена */ update UDO_T_EQUIPDSCMMLH T set T.EXSQUEUE = NEXSQUEUE where T.RN = NRN; end CMMLH_SET_EXSQUEUE; end UDO_PKG_EQUIPDS_BASE; /