Процедура получения информации о просроченных сообщениях очереди для сервиса
This commit is contained in:
parent
77a113238b
commit
3bcfb6d39c
@ -292,6 +292,13 @@ create or replace package PKG_EXS as
|
||||
RCSERVICE out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
||||
);
|
||||
|
||||
/* Получение информации о просроченных сообщениях очереди для сервиса */
|
||||
procedure SERVICE_QUEUE_EXPIRED_GET
|
||||
(
|
||||
NEXSSERVICE in number, -- Рег. номер записи сервиса
|
||||
RCSERVICE_QUEUE_EXPIRED out sys_refcursor -- Курсор со сведениями о просроченных сообщениях сервиса
|
||||
);
|
||||
|
||||
/* Ïîëó÷åíèå êîíòåêñòà ñåðâèñà */
|
||||
procedure SERVICE_CTX_GET
|
||||
(
|
||||
@ -1237,6 +1244,66 @@ create or replace package body PKG_EXS as
|
||||
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
||||
end SERVICE_GET;
|
||||
|
||||
/* Получение информации о просроченных сообщениях очереди для сервиса */
|
||||
procedure SERVICE_QUEUE_EXPIRED_GET
|
||||
(
|
||||
NEXSSERVICE in number, -- Рег. номер записи сервиса
|
||||
RCSERVICE_QUEUE_EXPIRED out sys_refcursor -- Курсор со сведениями о просроченных сообщениях сервиса
|
||||
)
|
||||
is
|
||||
/* Локальные константы */
|
||||
NMAX_SINFO_LIST_LEN constant PKG_STD.TNUMBER := 4000; -- Максимальная длинна списка с информацией о просроченных сообщениях
|
||||
SDELIM constant varchar2(10) := chr(10); -- Разделитель списка с информацией о просроченных сообщениях
|
||||
/* Локальные переменные */
|
||||
REXSSERVICE EXSSERVICE%rowtype; -- Запись сервиса
|
||||
NCNT PKG_STD.TNUMBER := 0; -- Количество просроченных сообщений
|
||||
SINFO_LIST PKG_STD.TSTRING; -- Список с информацией о просроченных сообщениях
|
||||
SPREF PKG_STD.TSTRING; -- Возвращаемый префикс списка с информацией о просроченных сообщениях
|
||||
SPREF_FULL PKG_STD.TSTRING; -- Префикс полного списка с информацией о просроченных сообщениях
|
||||
SPREF_SOME PKG_STD.TSTRING; -- Префикс неполного (если не вся информация вошла) списка с информацией о просроченных сообщениях
|
||||
begin
|
||||
/* Считаем запись сервиса */
|
||||
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => NEXSSERVICE);
|
||||
/* Инициализируем префексы */
|
||||
SPREF_FULL := 'Список просроченных сообщений обмена для сервиса "' || REXSSERVICE.CODE || '":' || CHR(10);
|
||||
SPREF_SOME := 'Наиболее поздние сообщения обмена из числа просроченных для сервиса "' || REXSSERVICE.CODE || '":' ||
|
||||
CHR(10);
|
||||
SPREF := SPREF_FULL;
|
||||
/* Обходим все сообщения в любом статусе, кроме финальных, для которых установлен лимит нахождения в очереди и он превышен */
|
||||
for C in (select 'Р/н: ' || TO_CHAR(Q.RN) || ', ф-я: ' || FN.CODE || ', от ' ||
|
||||
TO_CHAR(Q.IN_DATE, 'dd.mm.yyyy hh24:mi:ss') SINFO
|
||||
from EXSSERVICEFN FN,
|
||||
EXSMSGTYPE MT,
|
||||
EXSQUEUE Q
|
||||
where FN.PRN = REXSSERVICE.RN
|
||||
and FN.EXSMSGTYPE = MT.RN
|
||||
and FN.RN = Q.EXSSERVICEFN
|
||||
and MT.MAX_IDLE > 0
|
||||
and Q.EXEC_STATE not in (NQUEUE_EXEC_STATE_OK, NQUEUE_EXEC_STATE_ERR)
|
||||
and ROUND(24 * 60 * (sysdate - Q.IN_DATE)) > MT.MAX_IDLE
|
||||
order by Q.IN_DATE)
|
||||
loop
|
||||
/* Инкремент количества */
|
||||
NCNT := NCNT + 1;
|
||||
/* Собираем информацию в список */
|
||||
if ((NVL(LENGTH(SINFO_LIST), 0) + LENGTH(C.SINFO) + LENGTH(SDELIM) +
|
||||
GREATEST(NVL(LENGTH(SPREF_FULL), 0), NVL(LENGTH(SPREF_SOME), 0))) <= NMAX_SINFO_LIST_LEN) then
|
||||
if (SINFO_LIST is null) then
|
||||
SINFO_LIST := C.SINFO;
|
||||
else
|
||||
SINFO_LIST := SINFO_LIST || SDELIM || C.SINFO;
|
||||
end if;
|
||||
else
|
||||
SPREF := SPREF_SOME;
|
||||
end if;
|
||||
end loop;
|
||||
/* Возвращаем ответ в виде курсора */
|
||||
open RCSERVICE_QUEUE_EXPIRED for
|
||||
select NCNT "nCnt",
|
||||
DECODE(NCNT, 0, null, SPREF || SINFO_LIST) "sInfoList"
|
||||
from DUAL;
|
||||
end SERVICE_QUEUE_EXPIRED_GET;
|
||||
|
||||
/* Ïîëó÷åíèå êîíòåêñòà ñåðâèñà */
|
||||
procedure SERVICE_CTX_GET
|
||||
(
|
||||
|
Loading…
x
Reference in New Issue
Block a user