From af8b384a6661be637c7b747c32b304ae79d276b3 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 4 Dec 2018 23:57:24 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83?= =?UTF-8?q?=D1=80=D0=B0=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B8=20=D0=BE=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B8=20(QUEUE=5FMSG=5FSET),=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=D0=B0?= =?UTF-8?q?=20=D0=B2=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20=D0=B8=D1=81=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D1=8F=D1=89=D0=B8=D1=85=20=D1=81=D0=BE=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B8=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D1=83=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?(=D0=BE=D1=82=D0=B4=D0=B0=D1=91=D0=BC=20=D0=B8=20=D1=82=D0=B5,?= =?UTF-8?q?=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20=D1=83=D1=81?= =?UTF-8?q?=D0=BF=D0=B5=D1=88=D0=BD=D0=BE=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=BD=D1=8B=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BE=D0=BC=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9,=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BD=D0=B8=D1=85=20=D0=B7=D0=B0=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=D0=BB=D1=81=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=20=D0=91=D0=94,=20=D0=B0?= =?UTF-8?q?=20=D1=82=D0=B0=D0=BA=20=D0=B6=D0=B5=20=D1=83=D1=87=D0=B8=D1=82?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D0=B5=D0=BC=20=D0=B4=D0=B0=D1=82=D1=83=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=D0=B4=D0=BD=D0=B5=D0=B9=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_EXS.pck | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/db/PKG_EXS.pck b/db/PKG_EXS.pck index 807eff1..3a283cb 100644 --- a/db/PKG_EXS.pck +++ b/db/PKG_EXS.pck @@ -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); /* Если были ошибки - скажем об этом */