Процедура установки сообщения записи очереди (QUEUE_MSG_SET), корректировка алгоритма вадачи исходящих сообщений очереди серверу приложений (отдаём и те, которые успешно обработаны сервером приложений, чтобы для них запускался обработчик БД, а так же учитываем дату последней обработки при формировании очереди)
This commit is contained in:
parent
f683f44bca
commit
af8b384a66
@ -353,6 +353,14 @@ create or replace package PKG_EXS as
|
||||
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
||||
);
|
||||
|
||||
/* Óñòàíîâêà ñîîáùåíèÿ çàïèñè î÷åðåäè */
|
||||
procedure QUEUE_MSG_SET
|
||||
(
|
||||
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
||||
BMSG in blob, -- Ðåçóëüòàò îáðàáîòêè
|
||||
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
||||
);
|
||||
|
||||
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
||||
procedure QUEUE_PUT
|
||||
(
|
||||
@ -1363,8 +1371,11 @@ create or replace package body PKG_EXS as
|
||||
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.PRN);
|
||||
/* Ïðîâåðèì óñëîâèÿ èñïîëíåíèÿ - èñõîäÿùåå, íåäîèñïîëíåíî, è îñòàëèñü ïîïûòêè */
|
||||
if ((REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) and
|
||||
(REXSQUEUE.EXEC_STATE in
|
||||
(NQUEUE_EXEC_STATE_INQUEUE, NQUEUE_EXEC_STATE_APP_ERR, NQUEUE_EXEC_STATE_DB_ERR, NQUEUE_EXEC_STATE_ERR)) and
|
||||
(REXSQUEUE.EXEC_STATE in (NQUEUE_EXEC_STATE_INQUEUE,
|
||||
NQUEUE_EXEC_STATE_APP_OK,
|
||||
NQUEUE_EXEC_STATE_APP_ERR,
|
||||
NQUEUE_EXEC_STATE_DB_ERR,
|
||||
NQUEUE_EXEC_STATE_ERR)) and
|
||||
(((REXSSERVICEFN.RETRY_SCHEDULE <> NRETRY_SCHEDULE_UNDEF) and
|
||||
(REXSQUEUE.EXEC_CNT < REXSSERVICEFN.RETRY_ATTEMPTS)) or
|
||||
((REXSSERVICEFN.RETRY_SCHEDULE = NRETRY_SCHEDULE_UNDEF) and (REXSQUEUE.EXEC_CNT = 0))) and
|
||||
@ -1399,7 +1410,7 @@ create or replace package body PKG_EXS as
|
||||
from (select T.RN
|
||||
from EXSQUEUE T
|
||||
where QUEUE_SRV_TYPE_SEND_EXEC_CHECK(T.RN) = NQUEUE_EXEC_YES
|
||||
order by T.IN_DATE)
|
||||
order by NVL(T.EXEC_DATE, T.IN_DATE))
|
||||
where ROWNUM <= NPORTION_SIZE)
|
||||
loop
|
||||
/* Çàïîìèíàåì èõ ðåã. íîìåðà â áóôåðå */
|
||||
@ -1483,6 +1494,24 @@ create or replace package body PKG_EXS as
|
||||
/* Âåðíåì èçìåíåííóþ ïîçèöèþ î÷åðåäè */
|
||||
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
|
||||
end QUEUE_RESP_SET;
|
||||
|
||||
/* Óñòàíîâêà ñîîáùåíèÿ çàïèñè î÷åðåäè */
|
||||
procedure QUEUE_MSG_SET
|
||||
(
|
||||
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
||||
BMSG in blob, -- Ðåçóëüòàò îáðàáîòêè
|
||||
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Âûñòàâèì ñîîáùåíèå */
|
||||
update EXSQUEUE T set T.MSG = BMSG where T.RN = NEXSQUEUE;
|
||||
if (sql%rowcount = 0) then
|
||||
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NEXSQUEUE, SUNIT_TABLE => 'EXSQUEUE');
|
||||
end if;
|
||||
/* Âåðíåì èçìåíåííóþ ïîçèöèþ î÷åðåäè */
|
||||
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
|
||||
end QUEUE_MSG_SET;
|
||||
|
||||
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
||||
procedure QUEUE_PUT
|
||||
@ -1592,10 +1621,6 @@ create or replace package body PKG_EXS as
|
||||
PKG_SQL_CALL.EXECUTE_STORED(SSTORED_NAME => UTL_STORED_MAKE_LINK(SPACKAGE => REXSMSGTYPE.PKG_RESP,
|
||||
SPROCEDURE => REXSMSGTYPE.PRC_RESP),
|
||||
RPARAM_CONTAINER => PRMS);
|
||||
/*
|
||||
TODO: owner="mikha" created="15.11.2018"
|
||||
text="Протестировать что будет если процедура не установила параметр перед завершением и вообще - как эту ситуацию отловить, чтобы ругаться, мол не установлено значение"
|
||||
*/
|
||||
/* Çàáèðàåì ïàðàìåòð ñ îøèáêàìè îáðàáîò÷èêà */
|
||||
SERR := PRC_RESP_ARG_STR_GET(NIDENT => NIDENT, SARG => SCONT_FLD_SERR);
|
||||
/* Åñëè áûëè îøèáêè - ñêàæåì îá ýòîì */
|
||||
|
Loading…
x
Reference in New Issue
Block a user