forked from CITKParus/P8-ExchangeService
1647 lines
72 KiB
Plaintext
1647 lines
72 KiB
Plaintext
create or replace package PKG_EXS as
|
|
|
|
/* Êîíñòàíòû - èäåíòèôèêàöèÿ ñåðâåðà ïðèëîæåíèé â ñåññèÿõ ýêçåìïëÿðà ÁÄ */
|
|
SAPPSRV_PROGRAMM_NAME constant PKG_STD.TSTRING := 'node.exe'; -- Íàèìåíîâàíèå èñïîëíÿåìîãî ôàéëà
|
|
SAPPSRV_MODULE_NAME constant PKG_STD.TSTRING := 'PARUS$ExchangeServer'; -- Íàèìåíîâàíèå ìîäóëÿ
|
|
|
|
/* Êîíñòàíòû - êîíòåéíåðû êîíòåêñòà è ïðîöåññîâ ðàñ÷¸òà */
|
|
SCONT_MAIN constant PKG_STD.TSTRING := 'EXSCONT'; -- Ãëîáàëüíûé ïðåôèêñ êîíòåéíåðà
|
|
SCONT_PRC constant PKG_STD.TSTRING := 'PRC'; -- Íàèìåíîâàíèå êîíòåéíåðà äëÿ ïàðàìåòðîâ ïðîöåññà
|
|
|
|
/* Êîíñòàíòû - ïîëÿ êîíòåéíåðîâ */
|
|
SCONT_FLD_SERR constant PKG_STD.TSTRING := 'SERR'; -- Íàèìåíîâàíèå ïîëÿ êîíòåéíåðà äëÿ îøèáêè
|
|
SCONT_FLD_BRESP constant PKG_STD.TSTRING := 'BRESP'; -- Íàèìåíîâàíèå ïîëÿ êîíòåéíåðà äëÿ ðåçóëüòàòà îáðàáîòêè
|
|
|
|
/* Êîíñòàíòû - òèïû ñåðâèñîâ */
|
|
NSRV_TYPE_SEND constant EXSSERVICE.SRV_TYPE%type := 0; -- Îòïðàâêà ñîîáùåíèé
|
|
NSRV_TYPE_RECIVE constant EXSSERVICE.SRV_TYPE%type := 1; -- Ïîëó÷åíèå ñîîáùåíèé
|
|
SSRV_TYPE_SEND constant varchar2(40) := 'SEND'; -- Îòïðàâêà ñîîáùåíèé (ñòðîêîâûé êîä)
|
|
SSRV_TYPE_RECIVE constant varchar2(40) := 'RECIVE'; -- Ïîëó÷åíèå ñîîáùåíèé (ñòðîêîâûé êîä)
|
|
|
|
/* Êîíñòàíòû - òèïû ôóíêöèé ñåðâèñà */
|
|
NFN_TYPE_DATA constant EXSSERVICEFN.FN_TYPE%type := 0; -- Îáìåí äàííûìè
|
|
NFN_TYPE_LOGIN constant EXSSERVICEFN.FN_TYPE%type := 1; -- Íà÷àëî ñåàíñà
|
|
NFN_TYPE_LOGOUT constant EXSSERVICEFN.FN_TYPE%type := 2; -- Çàâåðøåíèå ñåàíñà
|
|
SFN_TYPE_DATA constant varchar2(40) := 'DATA'; -- Îáìåí äàííûìè (ñòðîêîâûé êîä)
|
|
SFN_TYPE_LOGIN constant varchar2(40) := 'LOGIN'; -- Íà÷àëî ñåàíñà (ñòðîêîâûé êîä)
|
|
SFN_TYPE_LOGOUT constant varchar2(40) := 'LOGOUT'; -- Çàâåðøåíèå ñåàíñà (ñòðîêîâûé êîä)
|
|
|
|
/* Êîíñòàíòû - ñïîñîáû ïåðåäà÷è ïàðàìåòðîâ ôóíêöèÿì ñåðâèñà */
|
|
NFN_PRMS_TYPE_POST constant EXSSERVICEFN.FN_PRMS_TYPE%type := 0; -- POST-çàïðîñ
|
|
NFN_PRMS_TYPE_GET constant EXSSERVICEFN.FN_PRMS_TYPE%type := 1; -- GET-çàïðîñ
|
|
SFN_PRMS_TYPE_POST constant varchar2(40) := 'POST'; -- POST-çàïðîñ
|
|
SFN_PRMS_TYPE_GET constant varchar2(40) := 'GET'; -- GET-çàïðîñ
|
|
|
|
/* Êîíñòàíòû - ðàñïèñàíèå ïîâòîðíîãî èñïîëíåíèÿ ôóíêöèè */
|
|
NRETRY_SCHEDULE_UNDEF constant EXSSERVICEFN.RETRY_SCHEDULE%type := 0; -- Íå îïðåäåëåíî
|
|
NRETRY_SCHEDULE_SEC constant EXSSERVICEFN.RETRY_SCHEDULE%type := 1; -- Ñåêóíäà
|
|
NRETRY_SCHEDULE_MIN constant EXSSERVICEFN.RETRY_SCHEDULE%type := 2; -- Ìèíóòà
|
|
NRETRY_SCHEDULE_HOUR constant EXSSERVICEFN.RETRY_SCHEDULE%type := 3; -- ×àñ
|
|
NRETRY_SCHEDULE_DAY constant EXSSERVICEFN.RETRY_SCHEDULE%type := 4; -- Ñóòêè
|
|
NRETRY_SCHEDULE_WEEK constant EXSSERVICEFN.RETRY_SCHEDULE%type := 5; -- Íåäåëÿ
|
|
NRETRY_SCHEDULE_MONTH constant EXSSERVICEFN.RETRY_SCHEDULE%type := 6; -- Ìåñÿö
|
|
SRETRY_SCHEDULE_UNDEF constant varchar2(40) := 'UNDEFINED'; -- Íå îïðåäåëåíî (ñòðîêîâûé êîä)
|
|
SRETRY_SCHEDULE_SEC constant varchar2(40) := 'SEC'; -- Ñåêóíäà (ñòðîêîâûé êîä)
|
|
SRETRY_SCHEDULE_MIN constant varchar2(40) := 'MIN'; -- Ìèíóòà (ñòðîêîâûé êîä)
|
|
SRETRY_SCHEDULE_HOUR constant varchar2(40) := 'HOUR'; -- ×àñ (ñòðîêîâûé êîä)
|
|
SRETRY_SCHEDULE_DAY constant varchar2(40) := 'DAY'; -- Ñóòêè (ñòðîêîâûé êîä)
|
|
SRETRY_SCHEDULE_WEEK constant varchar2(40) := 'WEEK'; -- Íåäåëÿ (ñòðîêîâûé êîä)
|
|
SRETRY_SCHEDULE_MONTH constant varchar2(40) := 'MONTH'; -- Ìåñÿö (ñòðîêîâûé êîä)
|
|
|
|
/* Êîíñòàíòû - ïðèçíàê îïîâåùåíèÿ î ïðîñòîå óäàëåííîãî ñåðâèñà */
|
|
NUNAVLBL_NTF_SIGN_NO constant EXSSERVICE.UNAVLBL_NTF_SIGN%type := 0; -- Íå îïîâåùàòü î ïðîñòîå
|
|
NUNAVLBL_NTF_SIGN_YES constant EXSSERVICE.UNAVLBL_NTF_SIGN%type := 1; -- Îïîâåùàòü î ïðîñòîå
|
|
SUNAVLBL_NTF_SIGN_NO constant varchar2(40) := 'UNAVLBL_NTF_NO'; -- Íå îïîâåùàòü î ïðîñòîå (ñòðîêîâûé êîä)
|
|
SUNAVLBL_NTF_SIGN_YES constant varchar2(40) := 'UNAVLBL_NTF_YES'; -- Îïîâåùàòü î ïðîñòîå (ñòðîêîâûé êîä)
|
|
|
|
/* Êîíñòàíòû - ñîñòîÿíèÿ çàïèñåé æóðíàëà ðàáîòû ñåðâèñà */
|
|
NLOG_STATE_INF constant EXSLOG.LOG_STATE%type := 0; -- Èíôîðìàöèÿ
|
|
NLOG_STATE_WRN constant EXSLOG.LOG_STATE%type := 1; -- Ïðåäóïðåæäåíèå
|
|
NLOG_STATE_ERR constant EXSLOG.LOG_STATE%type := 2; -- Îøèáêà
|
|
SLOG_STATE_INF constant varchar2(40) := 'INF'; -- Èíôîðìàöèÿ (ñòðîêîâûé êîä)
|
|
SLOG_STATE_WRN constant varchar2(40) := 'WRN'; -- Ïðåäóïðåæäåíèå (ñòðîêîâûé êîä)
|
|
SLOG_STATE_ERR constant varchar2(40) := 'ERR'; -- Îøèáêà (ñòðîêîâûé êîä)
|
|
|
|
/* Êîíñòàíòû - ñîñòîÿíèÿ èñïîëíåíèÿ çàïèñåé î÷åðåäè îáìåíà */
|
|
NQUEUE_EXEC_STATE_INQUEUE constant EXSQUEUE.EXEC_STATE%type := 0; -- Ïîñòàâëåíî â î÷åðåäü
|
|
NQUEUE_EXEC_STATE_APP constant EXSQUEUE.EXEC_STATE%type := 1; -- Îáðàáàòûâàåòñÿ ñåðâåðîì ïðèëîæåíèé
|
|
NQUEUE_EXEC_STATE_APP_OK constant EXSQUEUE.EXEC_STATE%type := 2; -- Óñïåøíî îáðàáîòàíî ñåðâåðîì ïðèëîæåíèé
|
|
NQUEUE_EXEC_STATE_APP_ERR constant EXSQUEUE.EXEC_STATE%type := 3; -- Îøèáêà îáðàáîòêè ñåðâåðîì ïðèëîæåíèé
|
|
NQUEUE_EXEC_STATE_DB constant EXSQUEUE.EXEC_STATE%type := 4; -- Îáðàáàòûâàåòñÿ ÑÓÁÄ
|
|
NQUEUE_EXEC_STATE_DB_OK constant EXSQUEUE.EXEC_STATE%type := 5; -- Óñïåøíî îáðàáîòàíî ÑÓÁÄ
|
|
NQUEUE_EXEC_STATE_DB_ERR constant EXSQUEUE.EXEC_STATE%type := 6; -- Îøèáêà îáðàáîòêè ÑÓÁÄ
|
|
NQUEUE_EXEC_STATE_OK constant EXSQUEUE.EXEC_STATE%type := 7; -- Îáðàáîòàíî óñïåøíî
|
|
NQUEUE_EXEC_STATE_ERR constant EXSQUEUE.EXEC_STATE%type := 8; -- Îáðàáîòàíî ñ îøèáêàìè
|
|
SQUEUE_EXEC_STATE_INQUEUE constant varchar2(40) := 'INQUEUE'; -- Ïîñòàâëåíî â î÷åðåäü
|
|
SQUEUE_EXEC_STATE_APP constant varchar2(40) := 'APP'; -- Îáðàáàòûâàåòñÿ ñåðâåðîì ïðèëîæåíèé
|
|
SQUEUE_EXEC_STATE_APP_OK constant varchar2(40) := 'APP_OK'; -- Óñïåøíî îáðàáîòàíî ñåðâåðîì ïðèëîæåíèé
|
|
SQUEUE_EXEC_STATE_APP_ERR constant varchar2(40) := 'APP_ERR'; -- Îøèáêà îáðàáîòêè ñåðâåðîì ïðèëîæåíèé
|
|
SQUEUE_EXEC_STATE_DB constant varchar2(40) := 'DB'; -- Îáðàáàòûâàåòñÿ ÑÓÁÄ
|
|
SQUEUE_EXEC_STATE_DB_OK constant varchar2(40) := 'DB_OK'; -- Óñïåøíî îáðàáîòàíî ÑÓÁÄ
|
|
SQUEUE_EXEC_STATE_DB_ERR constant varchar2(40) := 'DB_ERR'; -- Îøèáêà îáðàáîòêè ÑÓÁÄ
|
|
SQUEUE_EXEC_STATE_OK constant varchar2(40) := 'OK'; -- Îáðàáîòàíî óñïåøíî
|
|
SQUEUE_EXEC_STATE_ERR constant varchar2(40) := 'ERR'; -- Îáðàáîòàíî ñ îøèáêàìè
|
|
|
|
/* Êîíñòàíòû - ïðèçíàê èíêðåìåíòà êîëè÷åñòâà ïîïûòîê èñïîëíåíèÿ ïîçèöèè î÷åðåäè */
|
|
NINC_EXEC_CNT_NO constant number(1) := 0; -- Íå èíêðåìåíòèðîâàòü
|
|
NINC_EXEC_CNT_YES constant number(1) := 1; -- Èíêðåìåíòèðîâàòü
|
|
|
|
/* Êîíñòàíòû - ïðèçíàê èíêðåìåíòà êîëè÷åñòâà ïîïûòîê èñïîëíåíèÿ ïîçèöèè î÷åðåäè */
|
|
NQUEUE_EXEC_NO constant number(1) := 0; -- Íå èñïîëíÿòü
|
|
NQUEUE_EXEC_YES constant number(1) := 1; -- Èñïîëíÿòü
|
|
|
|
/* Êîíñòàíòû - îæèäàåìûé èíòåðôåéñ ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ î÷åðåäè íà ñòîðîíå ÁÄ */
|
|
SPRC_RESP_ARGS constant varchar2(80) := 'NIDENT,IN,NUMBER;NSRV_TYPE,IN,NUMBER;NEXSQUEUE,IN,NUMBER;'; -- Ñïèñîê ïàðàìåòðîâ ïðîöåäóðû îáðàáîòêè
|
|
|
|
/* Ïðîâåðêà àêòèâíîñòè ñåðâåðà ïðèëîæåíèé */
|
|
function UTL_APPSRV_IS_ACTIVE
|
|
return boolean; -- Ôëàã àêòèâíîñòè ñåðâåðà ïðèëîæåíèé
|
|
|
|
/* Ôîðìèðîâàíèå ññûëêè íà âûçûâàåìûé õðàíèìûé îáúåêò */
|
|
function UTL_STORED_MAKE_LINK
|
|
(
|
|
SPROCEDURE in varchar2, -- Èìÿ ïðîöåäóðû
|
|
SPACKAGE in varchar2 := null -- Èìÿ ïàêåòà
|
|
) return varchar2; -- Ññûëêà íà âûçûâàåìûé õðàíèìûé îáúåêò
|
|
|
|
/* Ïðîâåðêà èíòåðôåéñà õðàíèìîãî îáúåêòà */
|
|
procedure UTL_STORED_CHECK
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê ãåíåðàöèè èñêëþ÷åíèÿ (0 - äà, 1 - íåò)
|
|
SPKG in varchar2, -- Èìÿ ïàêåòà
|
|
SPRC in varchar2, -- Èìÿ ïðîöåäóðû
|
|
SARGS in varchar2, -- Ñïèñîê ïàðàìåòðîâ (";" - ðàçäåëèòåëü àðãóìåíòîâ, "," - ðàçäåëèòåëü àòðèáóòîâ àðãóìåíòà, ôîðìàò: <ÀÐÃÓÌÅÍÒ>,<IN|OUT|IN OUT>,<ÒÈÏ ÄÀÍÍÛÕ ORACLE>;)
|
|
NRESULT out number -- Ðåçóëüòàò ïðîâåðêè (0 - îøèáêà, 1 - óñïåõ)
|
|
);
|
|
|
|
/* Ôîðìèðîâàíèå ïîëíîãî íàèìåíîâàíèÿ êîíòåéíåðà äëÿ õðàíåíèÿ îêðóæåíèÿ âûçîâà ïðîöåäóðû */
|
|
function UTL_CONTAINER_MAKE_NAME
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SSUB_CONTAINER in varchar2 := null -- Íàèìåíîâàíèå êîíòåéíåðà âòîðîãî óðîâíÿ
|
|
)
|
|
return varchar2; -- Ïîëíîå íàèìåíîâàíèå êîíòåéíåðà
|
|
|
|
/* Î÷èñòêà êîíòåéíåðà äëÿ õðàíåíèÿ îêðóæåíèÿ âûçîâà ïðîöåäóðû */
|
|
procedure UTL_CONTAINER_PURGE
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SSUB_CONTAINER in varchar2 := null -- Íàèìåíîâàíèå êîíòåéíåðà âòîðîãî óðîâíÿ
|
|
);
|
|
|
|
/* Âû÷èñëåíèå äàòû ñëåäóþùåãî çàïóñêà ðàñïèñàíèÿ */
|
|
function UTL_SCHED_CALC_NEXT_DATE
|
|
(
|
|
DEXEC_DATE in date, -- Äàòà ïðåäûäóùåãî èñïîëíåíèÿ
|
|
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
|
NRETRY_STEP in number -- Øàã ãðàôèêà ïåðåçàïóñêà
|
|
)
|
|
return date; -- Äàòà ñëåäóþùåãî çàïóñêà
|
|
|
|
/* Âûÿñíåíèå íåîáõîäèìîñòè çàïóñêà ïî ðàñïèñàíèþ */
|
|
function UTL_SCHED_CHECK_EXEC
|
|
(
|
|
DEXEC_DATE in date, -- Äàòà ïðåäûäóùåãî èñïîëíåíèÿ
|
|
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
|
NRETRY_STEP in number, -- Øàã ãðàôèêà ïåðåçàïóñêà
|
|
DEXEC in date := sysdate -- Äàòà, îòíîñèòåëüíî êîòîðîé íåîáõîäèìî âûïîëíèòü ïðîâåðêó
|
|
)
|
|
return boolean; -- Ïðèçíàê íåîáõîäèìîñòè çàïóñêà
|
|
|
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà ñòðîêà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
procedure PRC_RESP_ARG_STR_SET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2, -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
SVALUE in varchar2 -- Çíà÷åíèå ïàðàìåòðà
|
|
);
|
|
|
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà ÷èñëî ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
procedure PRC_RESP_ARG_NUM_SET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2, -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
NVALUE in number -- Çíà÷åíèå ïàðàìåòðà
|
|
);
|
|
|
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà äàòà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
procedure PRC_RESP_ARG_DATE_SET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2, -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
DVALUE in date -- Çíà÷åíèå ïàðàìåòðà
|
|
);
|
|
|
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà BLOB ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
procedure PRC_RESP_ARG_BLOB_SET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2, -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
BVALUE in blob -- Çíà÷åíèå ïàðàìåòðà
|
|
);
|
|
|
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ òèïà ñòðîêà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
function PRC_RESP_ARG_STR_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2 -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
) return varchar2; -- Çíà÷åíèå ïàðàìåòðà
|
|
|
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ òèïà ÷èñëî ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
function PRC_RESP_ARG_NUM_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2 -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
) return number; -- Çíà÷åíèå ïàðàìåòðà
|
|
|
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ òèïà äàòà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
function PRC_RESP_ARG_DATE_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2 -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
) return date; -- Çíà÷åíèå ïàðàìåòðà
|
|
|
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ òèïà BLOB ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
function PRC_RESP_ARG_BLOB_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2 -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
) return blob; -- Çíà÷åíèå ïàðàìåòðà
|
|
|
|
/* Áàçîâîå äîáàâëåíèå â áóôåð îòáîðà äîêóìåíòîâ */
|
|
procedure RNLIST_BASE_INSERT
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
NDOCUMENT in number, -- Ðåã. íîìåð çàïèñè äîêóìåíòà
|
|
NRN out number -- Ðåã. íîìåð äîáàâëåííîé çàïèñè áóôåðà
|
|
);
|
|
|
|
/* Áàçîâîå óäàëåíèå èç áóôåðà îòáîðà äîêóìåíòîâ */
|
|
procedure RNLINST_BASE_DELETE
|
|
(
|
|
NRN in number -- Ðåã. íîìåð çàïèñè áóôåðà
|
|
);
|
|
|
|
/* Áàçîâàÿ î÷èñòêà áóôåðà îòáîðà äîêóìåíòîâ */
|
|
procedure RNLIST_BASE_CLEAR
|
|
(
|
|
NIDENT in number -- Èäåíòèôèêàòîð áóôåðà
|
|
);
|
|
|
|
/* Ïîëó÷åíèå ñåðâèñà */
|
|
procedure SERVICE_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
RCSERVICE out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
|
);
|
|
|
|
/* Ïîëó÷åíèå ñåðâèñà */
|
|
procedure SERVICE_GET
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
|
RCSERVICE out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
|
);
|
|
|
|
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
|
procedure SERVICES_GET
|
|
(
|
|
RCSERVICES out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
|
);
|
|
|
|
/* Ïîëó÷åíèå ôóíêöèè ñåðâèñà */
|
|
procedure SERVICEFN_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
RCSERVICEFN out sys_refcursor -- Êóðñîð ñî ñïèñêîì ôóíêöèé ñåðâèñà
|
|
);
|
|
|
|
/* Ïîëó÷åíèå ôóíêöèè ñåðâèñà */
|
|
procedure SERVICEFN_GET
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
|
NEXSSERVICEFN in number, -- Ðåã. íîìåð ôóíêöèè ñåðâèñà
|
|
RCSERVICEFN out sys_refcursor -- Êóðñîð ñî ñïèñêîì ôóíêöèé ñåðâèñà
|
|
);
|
|
|
|
/* Ïîëó÷åíèå ñïèñêà ôóíêöèé ñåðâèñà */
|
|
procedure SERVICEFNS_GET
|
|
(
|
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
|
RCSERVICEFNS out sys_refcursor -- Êóðñîð ñî ñïèñêîì ôóíêöèé
|
|
);
|
|
|
|
/* Ïîèñê ôóíêöèè ñåðâèñà îáìåíà ïî êîäó ôóíêöèè è êîäó ñåðâèñà */
|
|
function SERVICEFN_FIND_BY_SRVCODE
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê ãåíåðàöèè èñêëþ÷åíèÿ (0 - äà, 1 - íåò)
|
|
SEXSSERVICE in varchar2, -- Ìíåìîêîä ñåðâèñà äëÿ îáðàáîòêè
|
|
SEXSSERVICEFN in varchar2 -- Ìíåìîêîä ôóíêöèè ñåðâèñà äëÿ îáðàáîòêè
|
|
)
|
|
return number; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáìåíà
|
|
|
|
/* Ñ÷èòûâàíèå çàïèñè æóðíàëà ðàáîòû */
|
|
procedure LOG_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
RCLOG out sys_refcursor -- Êóðñîð ñî ñïèñêîì çàïèñåé æóðíàëà ðàáîòû
|
|
);
|
|
|
|
/* Ñ÷èòûâàíèå çàïèñè æóðíàëà ðàáîòû */
|
|
procedure LOG_GET
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
|
NEXSLOG in number, -- Ðåã. íîìåð çàïèñè æóðíàëà
|
|
RCLOG out sys_refcursor -- Êóðñîð ñî ñïèñêîì çàïèñåé æóðíàëà ðàáîòû
|
|
);
|
|
|
|
/* Äîáàâëåíèå çàïèñè â æóðíàë ðàáîòû */
|
|
procedure LOG_PUT
|
|
(
|
|
NLOG_STATE in number, -- Òèï çàïèñè (ñì. êîíñòíàòû NLOG_STATE*)
|
|
SMSG in varchar2, -- Ñîîáùåíèå
|
|
NEXSSERVICE in number := null, -- Ðåã. íîìåð ñâÿçàííîãî ñåðâèñà
|
|
NEXSSERVICEFN in number := null, -- Ðåã. íîìåð ñâÿçàííîé ôóíêöèè ñåðâèñà
|
|
NEXSQUEUE in number := null, -- Ðåã. íîìåð ñâÿçàííîé çàïèñè î÷åðåäè
|
|
RCLOG out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
|
);
|
|
|
|
/* Ñ÷èòûâàíèå ñîîáùåíèÿ î÷åðåäè */
|
|
procedure QUEUE_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ ïîçèöèåé î÷åðåäè
|
|
);
|
|
|
|
/* Ñ÷èòûâàíèå ñîîáùåíèÿ èç î÷åðåäè */
|
|
procedure QUEUE_GET
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ ïîçèöèåé î÷åðåäè
|
|
);
|
|
|
|
/* Ïðîâåðêà íåîáõîäèìîñòè èñïîëíåíèÿ èñõîäÿùåãî ñîîáùåíèÿ î÷åðåäè */
|
|
function QUEUE_SRV_TYPE_SEND_EXEC_CHECK
|
|
(
|
|
NEXSQUEUE in number -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
)
|
|
return number; -- Ôëàã íåîáõîäèìîñòè èñïîëíåíèÿ ïîçèöèè î÷åðåäè (ñì. êîíñòàíòû NQUEUE_EXEC_*)
|
|
|
|
/* Ñ÷èòûâàíèå î÷åðåäíîé ïîðöèè èñõîäÿùèõ ñîîáùåíèé èç î÷åðåäè */
|
|
procedure QUEUE_SRV_TYPE_SEND_GET
|
|
(
|
|
NPORTION_SIZE in number, -- Êîëè÷åñòâî âûáèðàåìûõ ñîîáùåíèé
|
|
RCQUEUES out sys_refcursor -- Êóðñîð ñî ñïèñêîì ïîçèöèé î÷åðåäè
|
|
);
|
|
|
|
/* Óñòàíîâêà ñîñòîÿíèå çàïèñè î÷åðåäè */
|
|
procedure QUEUE_EXEC_STATE_SET
|
|
(
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
NEXEC_STATE in number, -- Óñòàíàâëèâàåìîå ñîñòîÿíèå (ñì. êîíñòíàòû NQUEUE_EXEC_STATE_*, null - íå ìåíÿòü)
|
|
SEXEC_MSG in varchar2, -- Ñîîáùåíèå îáðàáîò÷èêà
|
|
NINC_EXEC_CNT in number, -- Ôëàã èíêðåìåíòà ñ÷¸ò÷èêà èñïîëíåíèé (ñì. êîíñòíàòû NINC_EXEC_CNT_*, null - íå ìåíÿòü)
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
|
);
|
|
|
|
/* Óñòàíîâêà ðåçóëüòàòà îáðàáîòêè çàïèñè î÷åðåäè */
|
|
procedure QUEUE_RESP_SET
|
|
(
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
BRESP in blob, -- Ðåçóëüòàò îáðàáîòêè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
|
);
|
|
|
|
/* Óñòàíîâêà ñîîáùåíèÿ çàïèñè î÷åðåäè */
|
|
procedure QUEUE_MSG_SET
|
|
(
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
BMSG in blob, -- Ðåçóëüòàò îáðàáîòêè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
|
);
|
|
|
|
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
|
procedure QUEUE_PUT
|
|
(
|
|
NEXSSERVICEFN in number, -- Ðåã. íîìåð ôóíêöèè îáðàáîòêè
|
|
BMSG in blob, -- Äàííûå
|
|
NEXSQUEUE in number := null, -- Ðåã. íîìåð ñâÿçàííîé ïîçèöèè î÷åðåäè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
|
);
|
|
|
|
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü (ïî êîäó ñåðâèñà è ôóíêöèè îáðàáîêè) */
|
|
procedure QUEUE_PUT
|
|
(
|
|
SEXSSERVICE in varchar2, -- Ìíåìîêîä ñåðâèñà äëÿ îáðàáîòêè
|
|
SEXSSERVICEFN in varchar2, -- Ìíåìîêîä ôóíêöèè ñåðâèñà äëÿ îáðàáîòêè
|
|
BMSG in blob, -- Äàííûå
|
|
NEXSQUEUE in number := null, -- Ðåã. íîìåð ñâÿçàííîé ïîçèöèè î÷åðåäè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
|
);
|
|
|
|
/* Èñïîëíåíèå îáðàáîò÷èêà äëÿ ñîîáùåíèÿ îáìåíà */
|
|
procedure QUEUE_PRC
|
|
(
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ îáðàáîòàííîé ïîçèöèåé î÷åðåäè
|
|
);
|
|
|
|
end;
|
|
/
|
|
create or replace package body PKG_EXS as
|
|
|
|
/* Ïðîâåðêà àêòèâíîñòè ñåðâåðà ïðèëîæåíèé */
|
|
function UTL_APPSRV_IS_ACTIVE
|
|
return boolean -- Ôëàã àêòèâíîñòè ñåðâåðà ïðèëîæåíèé
|
|
is
|
|
begin
|
|
/* Ïðîâåðèì íàëè÷èå ñåàíñà ñåðâåðà ïðèëîæåíèé â ñåññèÿõ */
|
|
for C in (select S.SID
|
|
from V$SESSION S
|
|
where UPPER(S.MODULE) = UPPER(SAPPSRV_MODULE_NAME)
|
|
and S.STATUS <> 'KILLED'
|
|
and UPPER(S.PROGRAM) = UPPER(SAPPSRV_PROGRAMM_NAME))
|
|
loop
|
|
return true;
|
|
end loop;
|
|
/* Ñåàíñà íåò */
|
|
return false;
|
|
end UTL_APPSRV_IS_ACTIVE;
|
|
|
|
/* Ôîðìèðîâàíèå ññûëêè íà âûçûâàåìûé õðàíèìûé îáúåêò */
|
|
function UTL_STORED_MAKE_LINK
|
|
(
|
|
SPROCEDURE in varchar2, -- Èìÿ ïðîöåäóðû
|
|
SPACKAGE in varchar2 := null -- Èìÿ ïàêåòà
|
|
) return varchar2 -- Ññûëêà íà âûçûâàåìûé õðàíèìûé îáúåêò
|
|
is
|
|
begin
|
|
/* Ïðîâåðèì ïàðàìåòðû */
|
|
if (SPROCEDURE is null) then
|
|
P_EXCEPTION(0, 'Íå óêàçàíî íàèìåíîâàíèå õðàíèìîé ïðîöåäóðû.');
|
|
end if;
|
|
/* Âåðíåì ðåçóëüòàò */
|
|
return PKG_OBJECT_DESC.STORED_NAME(SPACKAGE_NAME => SPACKAGE, SSTORED_NAME => SPROCEDURE);
|
|
end UTL_STORED_MAKE_LINK;
|
|
|
|
/* Ïðîâåðêà èíòåðôåéñà õðàíèìîãî îáúåêòà */
|
|
procedure UTL_STORED_CHECK
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê ãåíåðàöèè èñêëþ÷åíèÿ (0 - äà, 1 - íåò)
|
|
SPKG in varchar2, -- Èìÿ ïàêåòà
|
|
SPRC in varchar2, -- Èìÿ ïðîöåäóðû
|
|
SARGS in varchar2, -- Ñïèñîê ïàðàìåòðîâ (";" - ðàçäåëèòåëü àðãóìåíòîâ, "," - ðàçäåëèòåëü àòðèáóòîâ àðãóìåíòà, ôîðìàò: <ÀÐÃÓÌÅÍÒ>,<IN|OUT|IN OUT>,<ÒÈÏ ÄÀÍÍÛÕ ORACLE>;)
|
|
NRESULT out number -- Ðåçóëüòàò ïðîâåðêè (0 - îøèáêà, 1 - óñïåõ)
|
|
)
|
|
is
|
|
/* Ëîêàëüíûå òèïû äàííûõ - çàïèñü ïàðàìåòðà */
|
|
type TARG is record
|
|
(
|
|
ARGUMENT_NAME varchar2(30), -- Èìÿ ïàðàìåòðà
|
|
DATA_TYPE varchar2(30), -- Òèï äàííûõ
|
|
IN_OUT varchar2(9), -- Òèï ïàðàìåòðà
|
|
CORRECT number(1) -- Ïðèçíàê óñïåøíîñòè ïðîâåðêè
|
|
);
|
|
/* Ëîêàëüíûå òèïû äàííûõ - êîëëåêöèÿ ïàðàìåòðîâ */
|
|
type TARGS_LIST is table of TARG; -- Êîëëåêöèÿ ïàðàìåòðîâ
|
|
/* Ëîêàëüíûå èäåíòèôèêàòîðû */
|
|
STORED PKG_OBJECT_DESC.TSTORED; -- Îïèñàíèå ïðîöåäóðû
|
|
STORED_ARGS PKG_OBJECT_DESC.TARGUMENTS; -- Êîëëåêöèÿ îïèñàíèé ïàðàìåòðîâ ïðîöåäóðû
|
|
STORED_ARG PKG_OBJECT_DESC.TARGUMENT; -- Îïèñàíèå ïàðàìåòðà ïðîöåäóðû
|
|
RARGS_LIST TARGS_LIST; -- Êîëëåêöèÿ ñóùåñòâóþùèõ ïàðàìåòðîâ
|
|
RARGS_LIST_CUR TARGS_LIST; -- Êîëëåêöèÿ ïåðåäàííûõ ïàðàìåòðîâ
|
|
NARGS_LIST_CUR_CORRECT number(1); -- Ïðèçíàê óñïåøíîñòè ïðîâåðêè ïåðåäàííûõ ïàðàìåòðîâ
|
|
SARGS_LIST PKG_STD.TSTRING; -- Ïåðåäàííûé ñïèñîê ïàðàìåòðîâ
|
|
SARG PKG_STD.TSTRING; -- Ïåðåäàííûé ïàðàìåòð ïðîöåäóðû
|
|
SARG_TYPE PKG_STD.TSTRING; -- Òèï äàííûõ ïàðàìåòðà
|
|
SARG_TYPE_NAME PKG_STD.TSTRING; -- Òèï äàííûõ ïàðàìåòðà (èìÿ ïîëüçîâàòåëüñêîãî òèïà äàííûõ)
|
|
SINTERFACE PKG_STD.TSTRING; -- Îæèäàåìûé èíòåðôåéñ ïðîöåäóðû
|
|
begin
|
|
/* Ïðîâåðèì ïàðàìåòðû - èìÿ ïðîöåäðû âñåãîäà äîëæíî áûòü óêàçàíî */
|
|
if (SPRC is null) then
|
|
P_EXCEPTION(NFLAG_SMART, 'Íå óêàçàíî èìÿ ïðîöåäóðû.');
|
|
return;
|
|
end if;
|
|
/* Ïðîâåðèì ïàðàìåòðû - â ñïèñêå ïàðàìåòðîâ, åñëè îí åñòü, äîëæíû áûòü ðàçäåëèòåëè */
|
|
if (SARGS is not null) then
|
|
if ((INSTR(SARGS, ';') = 0) or (INSTR(SARGS, ',') = 0)) then
|
|
P_EXCEPTION(NFLAG_SMART,
|
|
'Îøèáî÷íûé ôîðìàò ñïèñêà àðãóìåíòîâ: èñïîëüçóéòå ";" äëÿ ðàçäåëåíèÿ àðãóìåíòîâ â ñïèñêå è "," äëÿ ðàçäåëåíèÿ àòðèáóòîâ àðãóìåíòà: <ÀÐÃÓÌÅÍÒ>,<IN|OUT|IN OUT>,<ÒÈÏ ÄÀÍÍÛÕ ORACLE>;.');
|
|
return;
|
|
end if;
|
|
end if;
|
|
/* Èíèöèàëèçèðóåì ðåçóëüòàò - åñòü îøèáêè */
|
|
NRESULT := 0;
|
|
/* Ïðîâåðêà îáúåêòîâ ÁÄ */
|
|
if (SPKG is not null) then
|
|
/* Ïîèñê ïàêåòà */
|
|
if (PKG_OBJECT_DESC.EXISTS_PACKAGE(SPACKAGE_NAME => SPKG) = 0) then
|
|
P_EXCEPTION(NFLAG_SMART, 'Ïàêåò "%s" íå íàéäåí.', SPKG);
|
|
return;
|
|
end if;
|
|
/* Ïîèñê ïðîöåäóðû â ïàêåòå*/
|
|
if (PKG_OBJECT_DESC.EXISTS_PROCEDURE(SPROCEDURE_NAME => UTL_STORED_MAKE_LINK(SPROCEDURE => SPRC, SPACKAGE => SPKG)) = 0) then
|
|
P_EXCEPTION(NFLAG_SMART, 'Ïðîöåäóðà "%s" â ïàêåòå "%s" íå íàéäåíà.', SPRC, SPKG);
|
|
return;
|
|
end if;
|
|
else
|
|
/* Ïîèñê ïðîöåäóðû */
|
|
if (PKG_OBJECT_DESC.EXISTS_PROCEDURE(SPROCEDURE_NAME => SPRC) = 0) then
|
|
P_EXCEPTION(NFLAG_SMART,
|
|
'Ïðîöåäóðà "%s" íå íàéäåíà.',
|
|
UTL_STORED_MAKE_LINK(SPROCEDURE => SPRC, SPACKAGE => SPKG));
|
|
return;
|
|
end if;
|
|
end if;
|
|
/* Ïîëó÷àåì îïèñàíèå ïðîöåäóðû */
|
|
begin
|
|
STORED := PKG_OBJECT_DESC.DESC_STORED(SSTORED_NAME => UTL_STORED_MAKE_LINK(SPROCEDURE => SPRC, SPACKAGE => SPKG),
|
|
BRAISE_ERROR => true);
|
|
exception
|
|
when others then
|
|
P_EXCEPTION(NFLAG_SMART, sqlerrm);
|
|
return;
|
|
end;
|
|
/* Ïðîâåðÿåì âàëèäíîñòü */
|
|
if (STORED.STATUS != 'VALID') then
|
|
P_EXCEPTION(NFLAG_SMART,
|
|
'Ïðîöåäóðà "%s" íåðàáîòîñïîñîáíà.',
|
|
UTL_STORED_MAKE_LINK(SPROCEDURE => SPRC, SPACKAGE => SPKG));
|
|
return;
|
|
end if;
|
|
/* Ïîëó÷àåì îïèñàíèå ïàðàìåòðîâ ïðîöåäóðû */
|
|
begin
|
|
STORED_ARGS := PKG_OBJECT_DESC.DESC_ARGUMENTS(SSTORED_NAME => UTL_STORED_MAKE_LINK(SPROCEDURE => SPRC,
|
|
SPACKAGE => SPKG),
|
|
BRAISE_ERROR => true);
|
|
exception
|
|
when others then
|
|
P_EXCEPTION(NFLAG_SMART, sqlerrm);
|
|
return;
|
|
end;
|
|
/* Èíèöèàëèçèðóåì ëîêàëüíóþ ïðîâåðÿåìóþ êîëëåêöèþ ôîðìàëüíûõ ïàðàìåòðîâ ïðîöåäóðû */
|
|
RARGS_LIST := TARGS_LIST();
|
|
for I in 1 .. PKG_OBJECT_DESC.COUNT_ARGUMENTS(RARGUMENTS => STORED_ARGS)
|
|
loop
|
|
/* Ñ÷èòûâàåíèå î÷åðåäíîãî ïàðàìåòðà èç áóôåðà */
|
|
STORED_ARG := PKG_OBJECT_DESC.FETCH_ARGUMENT(RARGUMENTS => STORED_ARGS, IINDEX => I);
|
|
/* Äîáàâëåíèå ýëëåìåíòà â êîëëåêöèþ */
|
|
RARGS_LIST.EXTEND();
|
|
/* Ñ÷èòûâàíèå èìåíè ïàðàìåòðà */
|
|
RARGS_LIST(RARGS_LIST.LAST).ARGUMENT_NAME := STORED_ARG.ARGUMENT_NAME;
|
|
/* Ñ÷èòûâàíèå òèïà ïàðàìåòðà */
|
|
RARGS_LIST(RARGS_LIST.LAST).IN_OUT := STORED_ARG.DB_IN_OUT;
|
|
/* Ñ÷èòûâàíèå òèïà äàííûõ ïàðàìåòðà */
|
|
RARGS_LIST(RARGS_LIST.LAST).DATA_TYPE := STORED_ARG.DB_DATA_TYPE;
|
|
if (RARGS_LIST(RARGS_LIST.LAST).DATA_TYPE in ('PL/SQL RECORD')) then
|
|
P_EXCEPTION(NFLAG_SMART,
|
|
'Íåâîçìîæíî ïðîâåðèòü èíòåðôåéñ ïîëüçîâàòåëüñêîé ïðîöåäóðû: ïîääåðæèâàþòñÿ òîëüêî ïðîñòûå òèïû äàííûõ àðãóìåíòîâ!');
|
|
return;
|
|
end if;
|
|
/* Óñòàíîâêà ïðèçíàêà - íå ïðîâåðåíî */
|
|
RARGS_LIST(RARGS_LIST.LAST).CORRECT := 0;
|
|
end loop;
|
|
/* Ïðîâåðêà ïåðåäàííûõ ïàðàìåòðîâ */
|
|
if (SARGS is not null) then
|
|
/* Èíèöèàëèçèðóåì êîëëåêöèþ îæèäàåìîãî ñïèñêà ïàðàìåòðîâ ïðîöåäóðû */
|
|
SARGS_LIST := replace(UPPER(SARGS), ' ', '');
|
|
RARGS_LIST_CUR := TARGS_LIST();
|
|
/* Öèêë ïî ñïèñêó ïàðàìåòðîâ */
|
|
loop
|
|
/* Ñ÷èòûâàíèå ïàðàìåòðà èç ñïèñêà */
|
|
SARG := STRTOK(source => SARGS_LIST, DELIMETER => ';', ITEM => 1);
|
|
/* Åñëè ïóñòî - âûõîä èç öèêëà*/
|
|
if (SARG is null) then
|
|
exit;
|
|
end if;
|
|
/* Äîáàâëåíèå ýëëåìåíòà â êîëëåêöèþ */
|
|
RARGS_LIST_CUR.EXTEND();
|
|
/* Óñòàíîâêà ïðèçíàêà - íå ïðîâåðåíî */
|
|
RARGS_LIST_CUR(RARGS_LIST_CUR.LAST).CORRECT := 0;
|
|
/* Ñ÷èòûâàíèå èìåíè ïàðàìåòðà */
|
|
RARGS_LIST_CUR(RARGS_LIST_CUR.LAST).ARGUMENT_NAME := STRTOK(source => SARG, DELIMETER => ',', ITEM => 1);
|
|
/* Ñ÷èòûâàíèå òèïà ïàðàìåòðà */
|
|
RARGS_LIST_CUR(RARGS_LIST_CUR.LAST).IN_OUT := STRTOK(source => SARG, DELIMETER => ',', ITEM => 2);
|
|
/* Ñ÷èòûâàíèå òèïà äàííûõ ïàðàìåòðà */
|
|
SARG_TYPE := STRTOK(source => SARG, DELIMETER => ',', ITEM => 3);
|
|
SARG_TYPE_NAME := STRTOK(source => SARG_TYPE, DELIMETER => '.', ITEM => 2);
|
|
if (SARG_TYPE_NAME is not null) then
|
|
/* Åñëè ïîëüçîâàòåëüñêèé òèï äàííûõ */
|
|
P_EXCEPTION(NFLAG_SMART,
|
|
'Íåâîçìîæíî ïðîâåðèòü èíòåðôåéñ ïîëüçîâàòåëüñêîé ïðîöåäóðû: ïîääåðæèâàþòñÿ òîëüêî ïðîñòûå òèïû äàííûõ!');
|
|
return;
|
|
else
|
|
/* Åñëè ñòàíäàðòíûé òèï äàííûõ */
|
|
RARGS_LIST_CUR(RARGS_LIST_CUR.LAST).DATA_TYPE := SARG_TYPE;
|
|
end if;
|
|
SARG_TYPE := null;
|
|
/* Óäàëåíèå îáðàáîòàííîãî ïàðàìåòðà èç òåêóùåãî ñïèñêà */
|
|
SARGS_LIST := replace(SARGS_LIST, SARG || ';');
|
|
end loop;
|
|
/* Ïðîâåðêà ïàðàìåòðîâ */
|
|
for I in RARGS_LIST_CUR.FIRST .. RARGS_LIST_CUR.LAST
|
|
loop
|
|
if (RARGS_LIST.COUNT > 0) then
|
|
for J in RARGS_LIST.FIRST .. RARGS_LIST.LAST
|
|
loop
|
|
if (RARGS_LIST_CUR(I).ARGUMENT_NAME = RARGS_LIST(J).ARGUMENT_NAME) then
|
|
if ((RARGS_LIST_CUR(I).IN_OUT = RARGS_LIST(J).IN_OUT) and
|
|
((RARGS_LIST_CUR(I).DATA_TYPE is null) or (RARGS_LIST_CUR(I).DATA_TYPE = RARGS_LIST(J).DATA_TYPE)) and
|
|
(RARGS_LIST(J).CORRECT = 0)) then
|
|
RARGS_LIST_CUR(I).CORRECT := 1;
|
|
RARGS_LIST(J).CORRECT := 1;
|
|
end if;
|
|
end if;
|
|
end loop;
|
|
end if;
|
|
end loop;
|
|
/* Åñëè õîòÿ áû îäèí ïàðàìåòð íå ñîâïàäàåò - îøèáêà */
|
|
NARGS_LIST_CUR_CORRECT := 1;
|
|
for I in RARGS_LIST_CUR.FIRST .. RARGS_LIST_CUR.LAST
|
|
loop
|
|
if (RARGS_LIST_CUR(I).CORRECT = 0) then
|
|
NARGS_LIST_CUR_CORRECT := 0;
|
|
end if;
|
|
end loop;
|
|
/* Óñòàíîâêà ðåçóëüòàòà */
|
|
NRESULT := NARGS_LIST_CUR_CORRECT;
|
|
/* Óñòàíîâèì ñîîáùåíèå îá îæèäàåìîì èíòåðôåéñå */
|
|
SINTERFACE := RTRIM(replace(replace(replace(UPPER(SARGS), ' ', ''), ',', ' '), ';', ';' || CHR(13)),
|
|
';' || CHR(13));
|
|
else
|
|
/* Åñëè ïàðàìåòðû íå îæèäàëèñü è èõ íåò â ñïèñêå ôîðìàëüíûõ ïàðàìåòðîâ ïðîöåäóðû */
|
|
if (RARGS_LIST.COUNT = 0) then
|
|
/* Òî ïðîâåðêà ïðîéäåíà */
|
|
NRESULT := 1;
|
|
end if;
|
|
/* Óñòàíîâèì ñîîáùåíèå îá îæèäàåìîì èíòåðôåéñå */
|
|
SINTERFACE := 'Áåç ïàðàìåòðîâ';
|
|
end if;
|
|
/* Åñëè ïðîâåðêà íå ïðîéäåíà */
|
|
if (NRESULT = 0) then
|
|
/* Âûäà¸ì ñîîáùåíèå îá îøèáêå, åñëè ïðîñèëè, ñ óêàçàíèåì îæèäàåìîãî èíòåðôåéñà ïðîöåäóðû */
|
|
P_EXCEPTION(NFLAG_SMART,
|
|
'Äëÿ ïðîöåäóðû "%s" îæèäàëñÿ ñëåäóþùèé èíòåðôåéñ âûçîâà: %s.',
|
|
UTL_STORED_MAKE_LINK(SPROCEDURE => SPRC, SPACKAGE => SPKG),
|
|
CHR(13) || SINTERFACE);
|
|
end if;
|
|
end UTL_STORED_CHECK;
|
|
|
|
/* Ôîðìèðîâàíèå ïîëíîãî íàèìåíîâàíèÿ êîíòåéíåðà äëÿ õðàíåíèÿ îêðóæåíèÿ âûçîâà ïðîöåäóðû */
|
|
function UTL_CONTAINER_MAKE_NAME
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SSUB_CONTAINER in varchar2 := null -- Íàèìåíîâàíèå êîíòåéíåðà âòîðîãî óðîâíÿ
|
|
)
|
|
return varchar2 -- Ïîëíîå íàèìåíîâàíèå êîíòåéíåðà
|
|
is
|
|
/* Ôîðìèðîâàíèå ïîëíîãî íàèìåíîâàíèÿ êîíòåéíåðà */
|
|
function CONTAINER_MAKE_NAME
|
|
(
|
|
SCONT in varchar2, -- Íàèìåíîâàíèå
|
|
SPREFIX in varchar2 := null -- Ïðåôèêñ
|
|
) return varchar2 -- Ïîëíîå íàèìåíîâàíèå êîíòåéíåðà
|
|
is
|
|
begin
|
|
/* Ïðîâåðèì ïàðàìåòðû */
|
|
if (SCONT is null) then
|
|
P_EXCEPTION(0, 'Íå óêàçàíî íàèìåíîâàíèå êîíòåéíåðà.');
|
|
end if;
|
|
/* Ñôîðìèðóåì ïîëíîå íàèìåíîâàíèå ñ ó÷¸òîì ïðåôèêñà */
|
|
if (SPREFIX is null) then
|
|
return SCONT;
|
|
else
|
|
return SPREFIX || '.' || SCONT;
|
|
end if;
|
|
end;
|
|
begin
|
|
if (SSUB_CONTAINER is null) then
|
|
return TO_CHAR(NIDENT) || CONTAINER_MAKE_NAME(SCONT => SCONT_PRC, SPREFIX => SCONT_MAIN);
|
|
else
|
|
return TO_CHAR(NIDENT) || CONTAINER_MAKE_NAME(SCONT => SSUB_CONTAINER,
|
|
SPREFIX => CONTAINER_MAKE_NAME(SCONT => SCONT_PRC,
|
|
SPREFIX => SCONT_MAIN));
|
|
end if;
|
|
end UTL_CONTAINER_MAKE_NAME;
|
|
|
|
/* Î÷èñòêà êîíòåéíåðà äëÿ õðàíåíèÿ îêðóæåíèÿ âûçîâà ïðîöåäóðû */
|
|
procedure UTL_CONTAINER_PURGE
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SSUB_CONTAINER in varchar2 := null -- Íàèìåíîâàíèå êîíòåéíåðà âòîðîãî óðîâíÿ
|
|
)
|
|
is
|
|
begin
|
|
PKG_CONTVARGLB.PURGE(SCONTAINER => UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT, SSUB_CONTAINER => SSUB_CONTAINER));
|
|
end UTL_CONTAINER_PURGE;
|
|
|
|
/* Âû÷èñëåíèå äàòû ñëåäóþùåãî çàïóñêà ðàñïèñàíèÿ */
|
|
function UTL_SCHED_CALC_NEXT_DATE
|
|
(
|
|
DEXEC_DATE in date, -- Äàòà ïðåäûäóùåãî èñïîëíåíèÿ
|
|
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
|
NRETRY_STEP in number -- Øàã ãðàôèêà ïåðåçàïóñêà
|
|
)
|
|
return date -- Äàòà ñëåäóþùåãî çàïóñêà
|
|
is
|
|
begin
|
|
/* Åñëè íåò äàòû ïðåäûäóùåãî çàïóñêà èëè ðàñïèñàíèå íå îïðåäåëåíî, òî äàòà î÷åðåäíîãî çàïóñêà - ýòî òåêóùàÿ äàòà */
|
|
if (DEXEC_DATE is null) or (NRETRY_SCHEDULE = NRETRY_SCHEDULE_UNDEF) then
|
|
/* Îòíèìèì ìèíóòêó - äëÿ âåðíîñòè */
|
|
return sysdate -(1 / (24 * 60));
|
|
else
|
|
/* Ðàñ÷èòàåì â çàâèñèìîñòè îò òèïà ðàñïèñàíèÿ */
|
|
case NRETRY_SCHEDULE
|
|
/* Åæåñåêóíäíî */
|
|
when NRETRY_SCHEDULE_SEC then
|
|
begin
|
|
return DEXEC_DATE +(1 / (24 * 60 * 60)) * NRETRY_STEP;
|
|
end;
|
|
/* Åæåìèíóòíî */
|
|
when NRETRY_SCHEDULE_MIN then
|
|
begin
|
|
return DEXEC_DATE +(1 / (24 * 60)) * NRETRY_STEP;
|
|
end;
|
|
/* Åæå÷àñíî */
|
|
when NRETRY_SCHEDULE_HOUR then
|
|
begin
|
|
return DEXEC_DATE +(1 / 24) * NRETRY_STEP;
|
|
end;
|
|
/* Åæåäíåâíî */
|
|
when NRETRY_SCHEDULE_DAY then
|
|
begin
|
|
return DEXEC_DATE + 1 * NRETRY_STEP;
|
|
end;
|
|
/* Åæåíåäåëüíî */
|
|
when NRETRY_SCHEDULE_WEEK then
|
|
begin
|
|
return DEXEC_DATE +(1 * 7) * NRETRY_STEP;
|
|
end;
|
|
/* Åæåìåñÿ÷íî */
|
|
when NRETRY_SCHEDULE_MONTH then
|
|
begin
|
|
return ADD_MONTHS(DEXEC_DATE, NRETRY_STEP);
|
|
end;
|
|
/* Íåïîääåðæèâàåìûé òèï ðàñïèñàíèÿ */
|
|
else
|
|
return null;
|
|
end case;
|
|
end if;
|
|
return null;
|
|
exception
|
|
when others then
|
|
return null;
|
|
end UTL_SCHED_CALC_NEXT_DATE;
|
|
|
|
/* Âûÿñíåíèå íåîáõîäèìîñòè çàïóñêà ïî ðàñïèñàíèþ */
|
|
function UTL_SCHED_CHECK_EXEC
|
|
(
|
|
DEXEC_DATE in date, -- Äàòà ïðåäûäóùåãî èñïîëíåíèÿ
|
|
NRETRY_SCHEDULE in number, -- Ãðàôèê ïåðåçàïóñêà (ñì. êîíñòàíòû NRETRY_SCHEDULE_*)
|
|
NRETRY_STEP in number, -- Øàã ãðàôèêà ïåðåçàïóñêà
|
|
DEXEC in date := sysdate -- Äàòà, îòíîñèòåëüíî êîòîðîé íåîáõîäèìî âûïîëíèòü ïðîâåðêó
|
|
)
|
|
return boolean -- Ïðèçíàê íåîáõîäèìîñòè çàïóñêà
|
|
is
|
|
DEXEC_NEXT date; -- Hàñ÷åòíàÿ äàòà ñëåäóþùåãî çàïóñêà
|
|
begin
|
|
/* Ðàñ÷èòàåì äàòó ñëåäóþùåãî çàïóñêà */
|
|
DEXEC_NEXT := UTL_SCHED_CALC_NEXT_DATE(DEXEC_DATE => DEXEC_DATE,
|
|
NRETRY_SCHEDULE => NRETRY_SCHEDULE,
|
|
NRETRY_STEP => NRETRY_STEP);
|
|
/* Åñëè íå ðàñ÷èòàëàñü - òî çàïóñêàòü íå ìîæåì */
|
|
if (DEXEC_NEXT is null) then
|
|
return false;
|
|
end if;
|
|
/* Åñëè îíà ðàíüøå óêàçàííîé - íàäî èñïîëíÿòü */
|
|
if (DEXEC_NEXT <= DEXEC) then
|
|
return true;
|
|
end if;
|
|
/* Èñïîëÿòü íå íàäî */
|
|
return false;
|
|
exception
|
|
when others then
|
|
return false;
|
|
end UTL_SCHED_CHECK_EXEC;
|
|
|
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà ñòðîêà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
procedure PRC_RESP_ARG_STR_SET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2, -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
SVALUE in varchar2 -- Çíà÷åíèå ïàðàìåòðà
|
|
)
|
|
is
|
|
SCONTAINER PKG_STD.TSTRING; -- Íàèìåíîâàíèå êîíòåéíåðà
|
|
begin
|
|
/* Ñôîðìèðóåì íàèìåíîâàíèå êîíòåéíåðà */
|
|
SCONTAINER := UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT);
|
|
/* Óñòàíîâèì çíà÷åíèå */
|
|
PKG_CONTVARGLB.PUTS(SCONTAINER => SCONTAINER, SNAME => SARG, SVALUE => SVALUE);
|
|
end PRC_RESP_ARG_STR_SET;
|
|
|
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà ÷èñëî ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
procedure PRC_RESP_ARG_NUM_SET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2, -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
NVALUE in number -- Çíà÷åíèå ïàðàìåòðà
|
|
)
|
|
is
|
|
SCONTAINER PKG_STD.TSTRING; -- Íàèìåíîâàíèå êîíòåéíåðà
|
|
begin
|
|
/* Ñôîðìèðóåì íàèìåíîâàíèå êîíòåéíåðà */
|
|
SCONTAINER := UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT);
|
|
/* Óñòàíîâèì çíà÷åíèå */
|
|
PKG_CONTVARGLB.PUTN(SCONTAINER => SCONTAINER, SNAME => SARG, NVALUE => NVALUE);
|
|
end PRC_RESP_ARG_NUM_SET;
|
|
|
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà äàòà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
procedure PRC_RESP_ARG_DATE_SET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2, -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
DVALUE in date -- Çíà÷åíèå ïàðàìåòðà
|
|
)
|
|
is
|
|
SCONTAINER PKG_STD.TSTRING; -- Íàèìåíîâàíèå êîíòåéíåðà
|
|
begin
|
|
/* Ñôîðìèðóåì íàèìåíîâàíèå êîíòåéíåðà */
|
|
SCONTAINER := UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT);
|
|
/* Óñòàíîâèì çíà÷åíèå */
|
|
PKG_CONTVARGLB.PUTD(SCONTAINER => SCONTAINER, SNAME => SARG, DVALUE => DVALUE);
|
|
end PRC_RESP_ARG_DATE_SET;
|
|
|
|
/* Óñòàíîâêà çíà÷åíèÿ òèïà BLOB ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
procedure PRC_RESP_ARG_BLOB_SET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2, -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
BVALUE in blob -- Çíà÷åíèå ïàðàìåòðà
|
|
)
|
|
is
|
|
NFILE_IDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà äëÿ õðàíåíèÿ ðåçóëüòàòà îáðàáîòêè
|
|
SCONTAINER PKG_STD.TSTRING; -- Íàèìåíîâàíèå êîíòåéíåðà
|
|
begin
|
|
/* Ñôîðìèðóåì íàèìåíîâàíèå êîíòåéíåðà */
|
|
SCONTAINER := UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT);
|
|
/* Ñîõðàíèì ðåçóëüòàòû îáðàáîòêè â ôàéëîâûé áóôåð */
|
|
NFILE_IDENT := GEN_IDENT();
|
|
P_FILE_BUFFER_INSERT(NIDENT => NFILE_IDENT, CFILENAME => NFILE_IDENT, CDATA => null, BLOBDATA => BVALUE);
|
|
/* Ñîõðàíèì äàííûå â êîíòåéíåð */
|
|
PKG_CONTVARGLB.PUTN(SCONTAINER => SCONTAINER, SNAME => SARG, NVALUE => NFILE_IDENT);
|
|
end PRC_RESP_ARG_BLOB_SET;
|
|
|
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ òèïà ñòðîêà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
function PRC_RESP_ARG_STR_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2 -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
) return varchar2 -- Çíà÷åíèå ïàðàìåòðà
|
|
is
|
|
SCONTAINER PKG_STD.TSTRING; -- Íàèìåíîâàíèå êîíòåéíåðà
|
|
begin
|
|
/* Ñôîðìèðóåì íàèìåíîâàíèå êîíòåéíåðà */
|
|
SCONTAINER := UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT);
|
|
/* Ñ÷èòàåì è âåðí¸ì çíà÷åíèå */
|
|
return PKG_CONTVARGLB.GETS(SCONTAINER => SCONTAINER, SNAME => SARG);
|
|
end PRC_RESP_ARG_STR_GET;
|
|
|
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ òèïà ÷èñëî ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
function PRC_RESP_ARG_NUM_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2 -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
) return number -- Çíà÷åíèå ïàðàìåòðà
|
|
is
|
|
SCONTAINER PKG_STD.TSTRING; -- Íàèìåíîâàíèå êîíòåéíåðà
|
|
begin
|
|
/* Ñôîðìèðóåì íàèìåíîâàíèå êîíòåéíåðà */
|
|
SCONTAINER := UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT);
|
|
/* Ñ÷èòàåì è âåðí¸ì çíà÷åíèå */
|
|
return PKG_CONTVARGLB.GETN(SCONTAINER => SCONTAINER, SNAME => SARG);
|
|
end PRC_RESP_ARG_NUM_GET;
|
|
|
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ òèïà äàòà ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
function PRC_RESP_ARG_DATE_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2 -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
) return date -- Çíà÷åíèå ïàðàìåòðà
|
|
is
|
|
SCONTAINER PKG_STD.TSTRING; -- Íàèìåíîâàíèå êîíòåéíåðà
|
|
begin
|
|
/* Ñôîðìèðóåì íàèìåíîâàíèå êîíòåéíåðà */
|
|
SCONTAINER := UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT);
|
|
/* Ñ÷èòàåì è âåðí¸ì çíà÷åíèå */
|
|
return PKG_CONTVARGLB.GETD(SCONTAINER => SCONTAINER, SNAME => SARG);
|
|
end PRC_RESP_ARG_DATE_GET;
|
|
|
|
/* Ñ÷èòûâàíèå çíà÷åíèÿ òèïà BLOB ïàðàìåòðà ïðîöåäóðû îáðàáîòêè ñîîáùåíèÿ îáìåíà */
|
|
function PRC_RESP_ARG_BLOB_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
|
|
SARG in varchar2 -- Íàèìåíîâàíèå ïàðàìåòðà
|
|
) return blob -- Çíà÷åíèå ïàðàìåòðà
|
|
is
|
|
NFILE_IDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà äëÿ õðàíåíèÿ ðåçóëüòàòà îáðàáîòêè
|
|
SCONTAINER PKG_STD.TSTRING; -- Íàèìåíîâàíèå êîíòåéíåðà
|
|
BRESP blob; -- Áóôåð äëÿ çíà÷åíèÿ
|
|
begin
|
|
/* Ñôîðìèðóåì íàèìåíîâàíèå êîíòåéíåðà */
|
|
SCONTAINER := UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT);
|
|
/* Ñ÷èòàåì çíà÷åíèå èäåíòèôèêàòîðà áóôåðà èç êîíòåéíåðà */
|
|
NFILE_IDENT := PKG_CONTVARGLB.GETN(SCONTAINER => SCONTAINER, SNAME => SARG);
|
|
/* Çàáåðåì ðåçóëüòàòû îáðàáîòêè èç ôàéëîâîãî áóôåðà */
|
|
begin
|
|
select T.BDATA into BRESP from FILE_BUFFER T where T.IDENT = NFILE_IDENT;
|
|
exception
|
|
when NO_DATA_FOUND then
|
|
P_EXCEPTION(0,
|
|
'Ðåçóëüòàòû îáðàáîòêè íå íàéäåíû â áóôåðå (IDENT: %s).',
|
|
TO_CHAR(NFILE_IDENT));
|
|
when TOO_MANY_ROWS then
|
|
P_EXCEPTION(0,
|
|
'Ðåçóëüòàòû îáðàáîòêè íå îïðåäåëåíû îäíîçíà÷íî (IDENT: %s).',
|
|
TO_CHAR(NFILE_IDENT));
|
|
end;
|
|
/* Çà÷èñòèì ôàéëîâûé áóôåð */
|
|
P_FILE_BUFFER_CLEAR(NIDENT => NFILE_IDENT);
|
|
/* Âåðí¸ì çíà÷åíèå */
|
|
return BRESP;
|
|
end PRC_RESP_ARG_BLOB_GET;
|
|
|
|
/* Áàçîâîå äîáàâëåíèå â áóôåð îòáîðà äîêóìåíòîâ */
|
|
procedure RNLIST_BASE_INSERT
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
NDOCUMENT in number, -- Ðåã. íîìåð çàïèñè äîêóìåíòà
|
|
NRN out number -- Ðåã. íîìåð äîáàâëåííîé çàïèñè áóôåðà
|
|
)
|
|
is
|
|
begin
|
|
/* Ãåíåðèðóåì ðåã. íîìåð */
|
|
NRN := GEN_ID();
|
|
/* Äîáàâëÿåì çàïèñü */
|
|
insert into EXSRNLIST (RN, IDENT, DOCUMENT) values (NRN, NIDENT, NDOCUMENT);
|
|
end RNLIST_BASE_INSERT;
|
|
|
|
/* Áàçîâîå óäàëåíèå èç áóôåðà îòáîðà äîêóìåíòîâ */
|
|
procedure RNLINST_BASE_DELETE
|
|
(
|
|
NRN in number -- Ðåã. íîìåð çàïèñè áóôåðà
|
|
)
|
|
is
|
|
begin
|
|
/* Óäàëèì çàïèñü */
|
|
delete from EXSRNLIST T where T.RN = NRN;
|
|
end RNLINST_BASE_DELETE;
|
|
|
|
/* Áàçîâàÿ î÷èñòêà áóôåðà îòáîðà äîêóìåíòîâ */
|
|
procedure RNLIST_BASE_CLEAR
|
|
(
|
|
NIDENT in number -- Èäåíòèôèêàòîð áóôåðà
|
|
)
|
|
is
|
|
begin
|
|
/* Îáõîäèì áóôåð */
|
|
for C in (select T.RN from EXSRNLIST T where T.IDENT = NIDENT)
|
|
loop
|
|
/* Óäàëÿåì åãî çàïèñè */
|
|
RNLINST_BASE_DELETE(NRN => C.RN);
|
|
end loop;
|
|
end RNLIST_BASE_CLEAR;
|
|
|
|
/* Ïîëó÷åíèå ñåðâèñà */
|
|
procedure SERVICE_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
RCSERVICE out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
|
)
|
|
is
|
|
begin
|
|
/* Îòäà¸ì ñïèñîê ñåðâèñîâ â âèäå êóðñîðà */
|
|
open RCSERVICE for
|
|
select T.RN "nId",
|
|
T.CODE "sCode",
|
|
T.NAME "sName",
|
|
T.SRV_TYPE "nSrvType",
|
|
DECODE(T.SRV_TYPE, NSRV_TYPE_SEND, SSRV_TYPE_SEND, NSRV_TYPE_RECIVE, SSRV_TYPE_RECIVE) "sSrvType",
|
|
T.SRV_ROOT "sSrvRoot",
|
|
T.SRV_USER "sSrvUser",
|
|
T.SRV_PASS "sSrvPass",
|
|
T.UNAVLBL_NTF_SIGN "nUnavlblNtfSign",
|
|
DECODE(T.UNAVLBL_NTF_SIGN,
|
|
NUNAVLBL_NTF_SIGN_NO,
|
|
SUNAVLBL_NTF_SIGN_NO,
|
|
NUNAVLBL_NTF_SIGN_YES,
|
|
SUNAVLBL_NTF_SIGN_YES) "sUnavlblNtfSign",
|
|
T.UNAVLBL_NTF_TIME "nUnavlblNtfTime",
|
|
T.UNAVLBL_NTF_MAIL "sUnavlblNtfMail"
|
|
from EXSSERVICE T
|
|
where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT);
|
|
end SERVICE_GET;
|
|
|
|
/* Ïîëó÷åíèå ñåðâèñà */
|
|
procedure SERVICE_GET
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
|
RCSERVICE out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
|
)
|
|
is
|
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà
|
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà
|
|
NTMP PKG_STD.TREF; -- Ðåã. íîìåð î÷åðåäíîé çàïèñè áóôåðà
|
|
begin
|
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà */
|
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => NFLAG_SMART, NRN => NEXSSERVICE);
|
|
/* Ñôîðìèðóåì èäåíòèôèêàòîð áóôåðà */
|
|
NIDENT := GEN_IDENT();
|
|
/* Ïîëîæèì ðåã. íîìåð ñåðâèñà â áóôåð */
|
|
RNLIST_BASE_INSERT(NIDENT => NIDENT, NDOCUMENT => NVL(REXSSERVICE.RN, NEXSSERVICE), NRN => NTMP);
|
|
/* Çàáèðàåì ñåðâèñ â âèäå êóðñîðà */
|
|
SERVICE_GET(NIDENT => NIDENT, RCSERVICE => RCSERVICE);
|
|
/* ×èñòèì áóôåð */
|
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
|
end SERVICE_GET;
|
|
|
|
/* Ïîëó÷åíèå ñïèñêà ñåðâèñîâ */
|
|
procedure SERVICES_GET
|
|
(
|
|
RCSERVICES out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
|
)
|
|
is
|
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà
|
|
NTMP PKG_STD.TREF; -- Ðåã. íîìåð î÷åðåäíîé çàïèñè áóôåðà
|
|
begin
|
|
/* Ñôîðìèðóåì èäåíòèôèêàòîð áóôåðà */
|
|
NIDENT := GEN_IDENT();
|
|
/* Îáõîäèì íóæíûå ñåðâèñû */
|
|
for C in (select T.RN from EXSSERVICE T)
|
|
loop
|
|
/* Çàïîìèíàåì èõ ðåã. íîìåðà â áóôåðå */
|
|
RNLIST_BASE_INSERT(NIDENT => NIDENT, NDOCUMENT => C.RN, NRN => NTMP);
|
|
end loop;
|
|
/* Çàáèðàåì îòîáðàííûå ñåðâèñû */
|
|
SERVICE_GET(NIDENT => NIDENT, RCSERVICE => RCSERVICES);
|
|
/* ×èñòèì áóôåð */
|
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
|
end SERVICES_GET;
|
|
|
|
/* Ïîëó÷åíèå ôóíêöèè ñåðâèñà */
|
|
procedure SERVICEFN_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
RCSERVICEFN out sys_refcursor -- Êóðñîð ñî ñïèñêîì ôóíêöèé ñåðâèñà
|
|
)
|
|
is
|
|
begin
|
|
/* Îòäà¸ì ñïèñîê ôóíêöèé â âèäå êóðñîðà */
|
|
open RCSERVICEFN for
|
|
select T.RN "nId",
|
|
T.PRN "nServiceId",
|
|
T.CODE "sCode",
|
|
T.FN_TYPE "nFnType",
|
|
DECODE(T.FN_TYPE,
|
|
NFN_TYPE_DATA,
|
|
SFN_TYPE_DATA,
|
|
NFN_TYPE_LOGIN,
|
|
SFN_TYPE_LOGIN,
|
|
NFN_TYPE_LOGOUT,
|
|
SFN_TYPE_LOGOUT) "sFnType",
|
|
T.FN_URL "sFnURL",
|
|
T.FN_PRMS_TYPE "nFnPrmsType",
|
|
DECODE(T.FN_PRMS_TYPE, NFN_PRMS_TYPE_POST, SFN_PRMS_TYPE_POST, NFN_PRMS_TYPE_GET, SFN_PRMS_TYPE_GET) "sFnPrmsType",
|
|
T.RETRY_SCHEDULE "nRetrySchedule",
|
|
DECODE(T.RETRY_SCHEDULE,
|
|
NRETRY_SCHEDULE_UNDEF,
|
|
SRETRY_SCHEDULE_UNDEF,
|
|
NRETRY_SCHEDULE_SEC,
|
|
SRETRY_SCHEDULE_SEC,
|
|
NRETRY_SCHEDULE_MIN,
|
|
SRETRY_SCHEDULE_MIN,
|
|
NRETRY_SCHEDULE_HOUR,
|
|
SRETRY_SCHEDULE_HOUR,
|
|
NRETRY_SCHEDULE_DAY,
|
|
SRETRY_SCHEDULE_DAY,
|
|
NRETRY_SCHEDULE_WEEK,
|
|
SRETRY_SCHEDULE_WEEK,
|
|
NRETRY_SCHEDULE_MONTH,
|
|
SRETRY_SCHEDULE_MONTH) "sRetrySchedule",
|
|
T.EXSMSGTYPE "nMsgId",
|
|
M.CODE "sMsgCode",
|
|
DECODE(M.PRC_RESP, null, null, UTL_STORED_MAKE_LINK(SPROCEDURE => M.PRC_RESP, SPACKAGE => M.PKG_RESP)) "sPrcResp",
|
|
M.APPSRV_BEFORE "sAppSrvBefore",
|
|
M.APPSRV_AFTER "sAppSrvAfter"
|
|
from EXSSERVICEFN T,
|
|
EXSMSGTYPE M
|
|
where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT)
|
|
and T.EXSMSGTYPE = M.RN;
|
|
end SERVICEFN_GET;
|
|
|
|
/* Ïîëó÷åíèå ôóíêöèè ñåðâèñà */
|
|
procedure SERVICEFN_GET
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
|
NEXSSERVICEFN in number, -- Ðåã. íîìåð ôóíêöèè ñåðâèñà
|
|
RCSERVICEFN out sys_refcursor -- Êóðñîð ñî ñïèñêîì ôóíêöèé ñåðâèñà
|
|
)
|
|
is
|
|
REXSSERVICEFN EXSSERVICEFN%rowtype; -- Çàïèñü ôóíêöèè ñåðâèñà
|
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà
|
|
NTMP PKG_STD.TREF; -- Ðåã. íîìåð î÷åðåäíîé çàïèñè áóôåðà
|
|
begin
|
|
/* Ñ÷èòàåì çàïèñü ôóíêöèè ñåðâèñà */
|
|
REXSSERVICEFN := GET_EXSSERVICEFN_ID(NFLAG_SMART => NFLAG_SMART, NRN => NEXSSERVICEFN);
|
|
/* Ñôîðìèðóåì èäåíòèôèêàòîð áóôåðà */
|
|
NIDENT := GEN_IDENT();
|
|
/* Ïîëîæèì ðåã. íîìåð ôóíêöèè ñåðâèñà â áóôåð */
|
|
RNLIST_BASE_INSERT(NIDENT => NIDENT, NDOCUMENT => NVL(REXSSERVICEFN.RN, NEXSSERVICEFN), NRN => NTMP);
|
|
/* Çàáèðàåì ñåðâèñ â âèäå êóðñîðà */
|
|
SERVICEFN_GET(NIDENT => NIDENT, RCSERVICEFN => RCSERVICEFN);
|
|
/* ×èñòèì áóôåð */
|
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
|
end SERVICEFN_GET;
|
|
|
|
/* Ïîëó÷åíèå ñïèñêà ôóíêöèé ñåðâèñà */
|
|
procedure SERVICEFNS_GET
|
|
(
|
|
NEXSSERVICE in number, -- Ðåã. íîìåð çàïèñè ñåðâèñà
|
|
RCSERVICEFNS out sys_refcursor -- Êóðñîð ñî ñïèñêîì ôóíêöèé
|
|
)
|
|
is
|
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà
|
|
NTMP PKG_STD.TREF; -- Ðåã. íîìåð î÷åðåäíîé çàïèñè áóôåðà
|
|
begin
|
|
/* Ñôîðìèðóåì èäåíòèôèêàòîð áóôåðà */
|
|
NIDENT := GEN_IDENT();
|
|
/* Îáõîäèì ôóíêöèè ñåðâèñà */
|
|
for C in (select T.RN from EXSSERVICEFN T where T.PRN = NEXSSERVICE)
|
|
loop
|
|
/* Çàïîìèíàåì èõ ðåã. íîìåðà â áóôåðå */
|
|
RNLIST_BASE_INSERT(NIDENT => NIDENT, NDOCUMENT => C.RN, NRN => NTMP);
|
|
end loop;
|
|
/* Çàáèðàåì îòîáðàííûå ôóíêöèè ñåðâèñà */
|
|
SERVICEFN_GET(NIDENT => NIDENT, RCSERVICEFN => RCSERVICEFNS);
|
|
/* ×èñòèì áóôåð */
|
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
|
end SERVICEFNS_GET;
|
|
|
|
/* Ïîèñê ôóíêöèè ñåðâèñà îáìåíà ïî êîäó ôóíêöèè è êîäó ñåðâèñà */
|
|
function SERVICEFN_FIND_BY_SRVCODE
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê ãåíåðàöèè èñêëþ÷åíèÿ (0 - äà, 1 - íåò)
|
|
SEXSSERVICE in varchar2, -- Ìíåìîêîä ñåðâèñà äëÿ îáðàáîòêè
|
|
SEXSSERVICEFN in varchar2 -- Ìíåìîêîä ôóíêöèè ñåðâèñà äëÿ îáðàáîòêè
|
|
)
|
|
return number -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáìåíà
|
|
is
|
|
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè
|
|
begin
|
|
/* Íàéäåì ôóíêöèþ ñåðâèñà îáðàáîòêè */
|
|
begin
|
|
select T.RN
|
|
into NEXSSERVICEFN
|
|
from EXSSERVICEFN T,
|
|
EXSSERVICE S
|
|
where S.CODE = SEXSSERVICE
|
|
and S.RN = T.PRN
|
|
and T.CODE = SEXSSERVICEFN;
|
|
exception
|
|
when NO_DATA_FOUND then
|
|
P_EXCEPTION(NFLAG_SMART,
|
|
'Ôóíêöèÿ "%s" ñåðâèñà îáìåíà "%s" íå îïðåäåëåíà',
|
|
SEXSSERVICEFN,
|
|
SEXSSERVICE);
|
|
end;
|
|
/* Âåðíåì ðåçóëüòàò */
|
|
return NEXSSERVICEFN;
|
|
end SERVICEFN_FIND_BY_SRVCODE;
|
|
|
|
/* Ñ÷èòûâàíèå çàïèñè æóðíàëà ðàáîòû */
|
|
procedure LOG_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
RCLOG out sys_refcursor -- Êóðñîð ñî ñïèñêîì çàïèñåé æóðíàëà ðàáîòû
|
|
)
|
|
is
|
|
begin
|
|
/* Îòäà¸ì çàïèñü â âèäå êóðñîðà */
|
|
open RCLOG for
|
|
select T.RN "nId",
|
|
T.LOG_DATE "dLogDate",
|
|
TO_CHAR(T.LOG_DATE, 'dd.mm.yyyy hh24:mi:ss') "sLogDate",
|
|
T.LOG_STATE "nLogState",
|
|
DECODE(T.LOG_STATE,
|
|
NLOG_STATE_INF,
|
|
SLOG_STATE_INF,
|
|
NLOG_STATE_WRN,
|
|
SLOG_STATE_WRN,
|
|
NLOG_STATE_ERR,
|
|
SLOG_STATE_ERR) "sLogState",
|
|
T.MSG "sMsg",
|
|
T.EXSSERVICE "nServiceId",
|
|
S.CODE "sServiceCode",
|
|
T.EXSSERVICEFN "nServiceFnId",
|
|
SFN.CODE "sServiceFnCode",
|
|
T.EXSQUEUE "nQueueId"
|
|
from EXSLOG T,
|
|
EXSSERVICE S,
|
|
EXSSERVICEFN SFN
|
|
where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT)
|
|
and T.EXSSERVICE = S.RN(+)
|
|
and T.EXSSERVICEFN = SFN.RN(+);
|
|
end LOG_GET;
|
|
|
|
/* Ñ÷èòûâàíèå çàïèñè æóðíàëà ðàáîòû */
|
|
procedure LOG_GET
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
|
NEXSLOG in number, -- Ðåã. íîìåð çàïèñè æóðíàëà
|
|
RCLOG out sys_refcursor -- Êóðñîð ñî ñïèñêîì çàïèñåé æóðíàëà ðàáîòû
|
|
)
|
|
is
|
|
REXSLOG EXSLOG%rowtype; -- Çàïèñü æóðíàëà ðàáîòû
|
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà
|
|
NTMP PKG_STD.TREF; -- Ðåã. íîìåð î÷åðåäíîé çàïèñè áóôåðà
|
|
begin
|
|
/* Ñ÷èòàåì çàïèñü æóðíàëà ðàáîòû */
|
|
REXSLOG := GET_EXSLOG_ID(NFLAG_SMART => NFLAG_SMART, NRN => NEXSLOG);
|
|
/* Ñôîðìèðóåì èäåíòèôèêàòîð áóôåðà */
|
|
NIDENT := GEN_IDENT();
|
|
/* Ïîëîæèì ðåã. íîìåð çàïèñè æóðíàëà ðàáîòû â áóôåð */
|
|
RNLIST_BASE_INSERT(NIDENT => NIDENT, NDOCUMENT => NVL(REXSLOG.RN, NEXSLOG), NRN => NTMP);
|
|
/* Çàáèðàåì ïîçèöèþ î÷åðåäè â âèäå êóðñîðà */
|
|
LOG_GET(NIDENT => NIDENT, RCLOG => RCLOG);
|
|
/* ×èñòèì áóôåð */
|
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
|
end LOG_GET;
|
|
|
|
/* Äîáàâëåíèå çàïèñè â æóðíàë ðàáîòû */
|
|
procedure LOG_PUT
|
|
(
|
|
NLOG_STATE in number, -- Òèï çàïèñè (ñì. êîíñòíàòû NLOG_STATE*)
|
|
SMSG in varchar2, -- Ñîîáùåíèå
|
|
NEXSSERVICE in number := null, -- Ðåã. íîìåð ñâÿçàííîãî ñåðâèñà
|
|
NEXSSERVICEFN in number := null, -- Ðåã. íîìåð ñâÿçàííîé ôóíêöèè ñåðâèñà
|
|
NEXSQUEUE in number := null, -- Ðåã. íîìåð ñâÿçàííîé çàïèñè î÷åðåäè
|
|
RCLOG out sys_refcursor -- Êóðñîð ñî ñïèñêîì ñåðâèñîâ
|
|
)
|
|
is
|
|
NEXSSERVICE_ EXSSERVICE.RN%type; -- Ðåã. íîìåð ñâÿçàííîãî ñåðâèñà (äëÿ àâòîìàòè÷åñêîãî îïðåäåëåíèÿ)
|
|
NEXSSERVICEFN_ EXSSERVICEFN.RN%type; -- Ðåã. íîìåð ñâÿçàííîé ôóíêöèè ñåðâèñà (äëÿ àâòîìàòè÷åñêîãî îïðåäåëåíèÿ)
|
|
NEXSLOG PKG_STD.TREF; -- Ðåã. íîìåð äîáàâëåííîé çàïèñè æóðíàëà
|
|
begin
|
|
/* Ïðîèíèöèàëèçèðåì ïåðåîïðåäåëåííûå ôóíêöèþ è ñåðâèñ */
|
|
NEXSSERVICE_ := NEXSSERVICE;
|
|
NEXSSERVICEFN_ := NEXSSERVICEFN;
|
|
/* Åñëè çàäàíà ôóíêöèÿ ñåðâèñà - îïðåäåëÿåì ïî íåé ñåðâèñ */
|
|
if (NEXSSERVICEFN is not null) then
|
|
begin
|
|
select T.PRN into NEXSSERVICE_ from EXSSERVICEFN T where T.RN = NEXSSERVICEFN;
|
|
exception
|
|
when NO_DATA_FOUND then
|
|
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NEXSSERVICEFN, SUNIT_TABLE => 'EXSSERVICEFN');
|
|
end;
|
|
end if;
|
|
/* Åñëè çàäàíà ïîçèöèÿ î÷åðåäè - îïðåäåëÿåì ïî íåé è ôóíêöèþ è ñåðâèñ */
|
|
if (NEXSQUEUE is not null) then
|
|
begin
|
|
select SFN.PRN,
|
|
SFN.RN
|
|
into NEXSSERVICE_,
|
|
NEXSSERVICEFN_
|
|
from EXSQUEUE T,
|
|
EXSSERVICEFN SFN
|
|
where T.RN = NEXSQUEUE
|
|
and T.EXSSERVICEFN = SFN.RN;
|
|
exception
|
|
when NO_DATA_FOUND then
|
|
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NEXSQUEUE, SUNIT_TABLE => 'EXSQUEUE');
|
|
end;
|
|
end if;
|
|
/* Äîáàâèì çàïèñü â ïðîòîêîë ðàáîòû */
|
|
P_EXSLOG_BASE_INSERT(DLOG_DATE => sysdate,
|
|
NLOG_STATE => NLOG_STATE,
|
|
SMSG => SMSG,
|
|
NEXSSERVICE => NEXSSERVICE_,
|
|
NEXSSERVICEFN => NEXSSERVICEFN_,
|
|
NEXSQUEUE => NEXSQUEUE,
|
|
NRN => NEXSLOG);
|
|
/* Âåðíåì äîáàâëåííóþ çàïèñü */
|
|
LOG_GET(NFLAG_SMART => 0, NEXSLOG => NEXSLOG, RCLOG => RCLOG);
|
|
end LOG_PUT;
|
|
|
|
/* Ñ÷èòûâàíèå ñîîáùåíèÿ èç î÷åðåäè */
|
|
procedure QUEUE_GET
|
|
(
|
|
NIDENT in number, -- Èäåíòèôèêàòîð áóôåðà
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ ïîçèöèåé î÷åðåäè
|
|
)
|
|
is
|
|
begin
|
|
open RCQUEUE for
|
|
select T.RN "nId",
|
|
T.IN_DATE "dInDate",
|
|
TO_CHAR(T.IN_DATE, 'dd.mm.yyyy hh24:mi:ss') "sInDate",
|
|
T.IN_AUTHID "sInAuth",
|
|
S.RN "nServiceId",
|
|
S.CODE "sServiceCode",
|
|
T.EXSSERVICEFN "nServiceFnId",
|
|
F.CODE "sServiceFnCode",
|
|
T.EXEC_DATE "dExecDate",
|
|
TO_CHAR(T.EXEC_DATE, 'dd.mm.yyyy hh24:mi:ss') "sExecDate",
|
|
T.EXEC_CNT "nExecCnt",
|
|
F.RETRY_ATTEMPTS "nRetryAttempts",
|
|
T.EXEC_STATE "nExecState",
|
|
DECODE(T.EXEC_STATE,
|
|
NQUEUE_EXEC_STATE_INQUEUE,
|
|
SQUEUE_EXEC_STATE_INQUEUE,
|
|
NQUEUE_EXEC_STATE_APP,
|
|
SQUEUE_EXEC_STATE_APP,
|
|
NQUEUE_EXEC_STATE_APP_OK,
|
|
SQUEUE_EXEC_STATE_APP_OK,
|
|
NQUEUE_EXEC_STATE_APP_ERR,
|
|
SQUEUE_EXEC_STATE_APP_ERR,
|
|
NQUEUE_EXEC_STATE_DB,
|
|
SQUEUE_EXEC_STATE_DB,
|
|
NQUEUE_EXEC_STATE_DB_OK,
|
|
SQUEUE_EXEC_STATE_DB_OK,
|
|
NQUEUE_EXEC_STATE_DB_ERR,
|
|
SQUEUE_EXEC_STATE_DB_ERR,
|
|
NQUEUE_EXEC_STATE_OK,
|
|
SQUEUE_EXEC_STATE_OK,
|
|
NQUEUE_EXEC_STATE_ERR,
|
|
SQUEUE_EXEC_STATE_ERR) "sExecState",
|
|
T.EXEC_MSG "sExecMsg",
|
|
T.MSG "blMsg",
|
|
T.RESP "blResp",
|
|
T.EXSQUEUE "nQueueId"
|
|
from EXSQUEUE T,
|
|
EXSSERVICEFN F,
|
|
EXSSERVICE S
|
|
where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT)
|
|
and T.EXSSERVICEFN = F.RN
|
|
and F.PRN = S.RN;
|
|
end QUEUE_GET;
|
|
|
|
/* Ñ÷èòûâàíèå ñîîáùåíèÿ èç î÷åðåäè */
|
|
procedure QUEUE_GET
|
|
(
|
|
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ ïîçèöèåé î÷åðåäè
|
|
)
|
|
is
|
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà
|
|
NTMP PKG_STD.TREF; -- Ðåã. íîìåð î÷åðåäíîé çàïèñè áóôåðà
|
|
begin
|
|
/* Ñ÷èòàåì çàïèñü ïîçèöèè î÷åðåäè */
|
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => NFLAG_SMART, NRN => NEXSQUEUE);
|
|
/* Ñôîðìèðóåì èäåíòèôèêàòîð áóôåðà */
|
|
NIDENT := GEN_IDENT();
|
|
/* Ïîëîæèì ðåã. íîìåð çàïèñè î÷åðåäè â áóôåð */
|
|
RNLIST_BASE_INSERT(NIDENT => NIDENT, NDOCUMENT => NVL(REXSQUEUE.RN, NEXSQUEUE), NRN => NTMP);
|
|
/* Çàáèðàåì ïîçèöèþ î÷åðåäè â âèäå êóðñîðà */
|
|
QUEUE_GET(NIDENT => NIDENT, RCQUEUE => RCQUEUE);
|
|
/* ×èñòèì áóôåð */
|
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
|
end QUEUE_GET;
|
|
|
|
/* Ïðîâåðêà íåîáõîäèìîñòè èñïîëíåíèÿ ïîçèöèè î÷åðåäè */
|
|
function QUEUE_SRV_TYPE_SEND_EXEC_CHECK
|
|
(
|
|
NEXSQUEUE in number -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
)
|
|
return number -- Ôëàã íåîáõîäèìîñòè èñïîëíåíèÿ ïîçèöèè î÷åðåäè (ñì. êîíñòàíòû NQUEUE_EXEC_*)
|
|
is
|
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà îáðàáîòêè
|
|
REXSSERVICEFN EXSSERVICEFN%rowtype; -- Çàïèñü ôóíêöèè îáðàáîòêè
|
|
NRESULT number(17); -- Ðåçóëüòàò ðàáîòû
|
|
begin
|
|
/* Èíèöèàëèçèðóåì ðåçóëüòàò */
|
|
NRESULT := NQUEUE_EXEC_NO;
|
|
begin
|
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
|
/* Ñ÷èòàåì çàïèñü ôóíêöèè îáðàáîòêè */
|
|
REXSSERVICEFN := GET_EXSSERVICEFN_ID(NFLAG_SMART => 0, NRN => REXSQUEUE.EXSSERVICEFN);
|
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà îáðàáîòêè */
|
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.PRN);
|
|
/* Ïðîâåðèì óñëîâèÿ èñïîëíåíèÿ - èñõîäÿùåå, íåäîèñïîëíåíî, è îñòàëèñü ïîïûòêè */
|
|
if ((REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) and
|
|
(REXSQUEUE.EXEC_STATE not in
|
|
(NQUEUE_EXEC_STATE_OK, NQUEUE_EXEC_STATE_ERR, NQUEUE_EXEC_STATE_APP, NQUEUE_EXEC_STATE_DB)) 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
|
|
(UTL_SCHED_CHECK_EXEC(DEXEC_DATE => REXSQUEUE.EXEC_DATE,
|
|
NRETRY_SCHEDULE => REXSSERVICEFN.RETRY_SCHEDULE,
|
|
NRETRY_STEP => REXSSERVICEFN.RETRY_STEP))) then
|
|
/* Íàäî èñïîëíÿòü */
|
|
NRESULT := NQUEUE_EXEC_YES;
|
|
end if;
|
|
exception
|
|
when others then
|
|
NRESULT := NQUEUE_EXEC_NO;
|
|
end;
|
|
/* Âåðí¸ì ðåçóëüòàò */
|
|
return NRESULT;
|
|
end QUEUE_SRV_TYPE_SEND_EXEC_CHECK;
|
|
|
|
/* Ñ÷èòûâàíèå î÷åðåäíîé ïîðöèè èñõîäÿùèõ ñîîáùåíèé èç î÷åðåäè */
|
|
procedure QUEUE_SRV_TYPE_SEND_GET
|
|
(
|
|
NPORTION_SIZE in number, -- Êîëè÷åñòâî âûáèðàåìûõ ñîîáùåíèé
|
|
RCQUEUES out sys_refcursor -- Êóðñîð ñî ñïèñêîì ïîçèöèé î÷åðåäè
|
|
)
|
|
is
|
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð áóôåðà
|
|
NTMP PKG_STD.TREF; -- Ðåã. íîìåð î÷åðåäíîé çàïèñè áóôåðà
|
|
begin
|
|
/* Ñôîðìèðóåì èäåíòèôèêàòîð áóôåðà */
|
|
NIDENT := GEN_IDENT();
|
|
/* Îáõîäèì òðåáóåìûå èñõîäÿùèå ñîîáùåíèÿ */
|
|
for C in (select *
|
|
from (select T.RN
|
|
from EXSQUEUE T
|
|
where QUEUE_SRV_TYPE_SEND_EXEC_CHECK(T.RN) = NQUEUE_EXEC_YES
|
|
order by T.RN)
|
|
where ROWNUM <= NPORTION_SIZE)
|
|
loop
|
|
/* Çàïîìèíàåì èõ ðåã. íîìåðà â áóôåðå */
|
|
RNLIST_BASE_INSERT(NIDENT => NIDENT, NDOCUMENT => C.RN, NRN => NTMP);
|
|
end loop;
|
|
/* Çàáèðàåì îòîáðàííûå çàïèñè î÷åðåäè */
|
|
QUEUE_GET(NIDENT => NIDENT, RCQUEUE => RCQUEUES);
|
|
/* ×èñòèì áóôåð */
|
|
RNLIST_BASE_CLEAR(NIDENT => NIDENT);
|
|
end QUEUE_SRV_TYPE_SEND_GET;
|
|
|
|
/* Óñòàíîâêà ñîñòîÿíèå çàïèñè î÷åðåäè */
|
|
procedure QUEUE_EXEC_STATE_SET
|
|
(
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
NEXEC_STATE in number, -- Óñòàíàâëèâàåìîå ñîñòîÿíèå (ñì. êîíñòíàòû NQUEUE_EXEC_STATE_*, null - íå ìåíÿòü)
|
|
SEXEC_MSG in varchar2, -- Ñîîáùåíèå îáðàáîò÷èêà
|
|
NINC_EXEC_CNT in number, -- Ôëàã èíêðåìåíòà ñ÷¸ò÷èêà èñïîëíåíèé (ñì. êîíñòíàòû NINC_EXEC_CNT_*, null - íå ìåíÿòü)
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
|
)
|
|
is
|
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
begin
|
|
/* Ïðîâåðÿì ïàðàìåòðû */
|
|
if (NEXSQUEUE is null) then
|
|
P_EXCEPTION(0,
|
|
'Íå óêàçàí èäåíòèôèêàòîð ïîçèöèè î÷åðåäè äëÿ èçìåíåíèÿ ñîñòîÿíèÿ');
|
|
end if;
|
|
if ((NEXEC_STATE is not null) and
|
|
(NEXEC_STATE not in (NQUEUE_EXEC_STATE_INQUEUE,
|
|
NQUEUE_EXEC_STATE_APP,
|
|
NQUEUE_EXEC_STATE_APP_OK,
|
|
NQUEUE_EXEC_STATE_APP_ERR,
|
|
NQUEUE_EXEC_STATE_DB,
|
|
NQUEUE_EXEC_STATE_DB_OK,
|
|
NQUEUE_EXEC_STATE_DB_ERR,
|
|
NQUEUE_EXEC_STATE_OK,
|
|
NQUEUE_EXEC_STATE_ERR))) then
|
|
P_EXCEPTION(0,
|
|
'Êîä ñîñòîÿíèÿ "%s" ïîçèöèè î÷åðåäè íå ïîääåðæèâàåòñÿ',
|
|
TO_CHAR(NEXEC_STATE));
|
|
end if;
|
|
if (NVL(NINC_EXEC_CNT, NINC_EXEC_CNT_NO) not in (NINC_EXEC_CNT_YES, NINC_EXEC_CNT_NO)) then
|
|
P_EXCEPTION(0,
|
|
'Ôëàã èêðåìåíòà ñ÷åò÷èêà èñïîëíåíèé "%s" ïîçèöèè î÷åðåäè íå ïîääåðæèâàåòñÿ',
|
|
TO_CHAR(NINC_EXEC_CNT));
|
|
end if;
|
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
|
/* Óâåëè÷èì ñ÷¸ò÷èê êîëè÷åñòâà ïîïûòîê èñïîëíåíèÿ, åñëè ïðîñèëè */
|
|
if (NVL(NINC_EXEC_CNT, NINC_EXEC_CNT_NO) = NINC_EXEC_CNT_YES) then
|
|
REXSQUEUE.EXEC_CNT := REXSQUEUE.EXEC_CNT + 1;
|
|
end if;
|
|
/* Âûñòàâèì ñîñòîÿíèå */
|
|
update EXSQUEUE T
|
|
set T.EXEC_DATE = sysdate,
|
|
T.EXEC_STATE = NVL(NEXEC_STATE, T.EXEC_STATE),
|
|
T.EXEC_CNT = REXSQUEUE.EXEC_CNT,
|
|
T.EXEC_MSG = SEXEC_MSG
|
|
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_EXEC_STATE_SET;
|
|
|
|
/* Óñòàíîâêà ðåçóëüòàòà îáðàáîòêè çàïèñè î÷åðåäè */
|
|
procedure QUEUE_RESP_SET
|
|
(
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
BRESP in blob, -- Ðåçóëüòàò îáðàáîòêè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
|
)
|
|
is
|
|
begin
|
|
/* Âûñòàâèì ðåçóëüòàò */
|
|
update EXSQUEUE T set T.RESP = BRESP 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_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
|
|
(
|
|
NEXSSERVICEFN in number, -- Ðåã. íîìåð ôóíêöèè îáðàáîòêè
|
|
BMSG in blob, -- Äàííûå
|
|
NEXSQUEUE in number := null, -- Ðåã. íîìåð ñâÿçàííîé ïîçèöèè î÷åðåäè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
|
)
|
|
is
|
|
NRN EXSQUEUE.RN%type; -- Ðåã. íîìåð äîáàâëåííîé çàïèñè î÷åðåäè
|
|
begin
|
|
/* Ïðîâåðÿåì ïàðàìåòðû */
|
|
if (NEXSSERVICEFN is null) then
|
|
P_EXCEPTION(0, 'Íå óêàçàí èäåíòèôèêàòîð ôóíêöèè ñåðâèñà îáìåíà');
|
|
end if;
|
|
/* Ñòàâèì çàïèñü â î÷åðåäü */
|
|
P_EXSQUEUE_BASE_INSERT(DIN_DATE => sysdate,
|
|
SIN_AUTHID => UTILIZER(),
|
|
NEXSSERVICEFN => NEXSSERVICEFN,
|
|
DEXEC_DATE => null,
|
|
NEXEC_CNT => 0,
|
|
NEXEC_STATE => NQUEUE_EXEC_STATE_INQUEUE,
|
|
SEXEC_MSG => null,
|
|
BMSG => BMSG,
|
|
BRESP => null,
|
|
NEXSQUEUE => NEXSQUEUE,
|
|
NRN => NRN);
|
|
/* Âîçâðàùàåì äîáàâëåííóþ ïîçèöèþ î÷åðåäè */
|
|
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NRN, RCQUEUE => RCQUEUE);
|
|
end QUEUE_PUT;
|
|
|
|
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü (ïî êîäó ñåðâèñà è ôóíêöèè îáðàáîêè) */
|
|
procedure QUEUE_PUT
|
|
(
|
|
SEXSSERVICE in varchar2, -- Ìíåìîêîä ñåðâèñà äëÿ îáðàáîòêè
|
|
SEXSSERVICEFN in varchar2, -- Ìíåìîêîä ôóíêöèè ñåðâèñà äëÿ îáðàáîòêè
|
|
BMSG in blob, -- Äàííûå
|
|
NEXSQUEUE in number := null, -- Ðåã. íîìåð ñâÿçàííîé ïîçèöèè î÷åðåäè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè
|
|
)
|
|
is
|
|
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè
|
|
begin
|
|
/* Ïðîâåðÿåì ïàðàìåòðû */
|
|
if (SEXSSERVICE is null) then
|
|
P_EXCEPTION(0, 'Íå óêàçàí êîä ñåðâèñà îáìåíà');
|
|
end if;
|
|
if (SEXSSERVICEFN is null) then
|
|
P_EXCEPTION(0, 'Íå óêàçàí êîä ôóíêöèè ñåðâèñà îáìåíà');
|
|
end if;
|
|
/* Ðàçûìåíóåì ôóíêöèþ ñåðâèñà */
|
|
NEXSSERVICEFN := SERVICEFN_FIND_BY_SRVCODE(NFLAG_SMART => 0,
|
|
SEXSSERVICE => SEXSSERVICE,
|
|
SEXSSERVICEFN => SEXSSERVICEFN);
|
|
/* Ñòàâèì çàïèñü â î÷åðåäü */
|
|
QUEUE_PUT(NEXSSERVICEFN => NEXSSERVICEFN, BMSG => BMSG, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
|
|
end QUEUE_PUT;
|
|
|
|
/* Èñïîëíåíèå îáðàáîò÷èêà äëÿ ñîîáùåíèÿ îáìåíà */
|
|
procedure QUEUE_PRC
|
|
(
|
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ îáðàáîòàííîé ïîçèöèåé î÷åðåäè
|
|
)
|
|
is
|
|
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
|
|
REXSSERVICE EXSSERVICE%rowtype; -- Çàïèñü ñåðâèñà îáðàáîòêè
|
|
REXSSERVICEFN EXSSERVICEFN%rowtype; -- Çàïèñü ôóíêöèè îáðàáîòêè
|
|
REXSMSGTYPE EXSMSGTYPE%rowtype; -- Çàïèñü òèïîâîãî ñîîáùåíèÿ îáìåíà
|
|
SERR EXSQUEUE.EXEC_MSG%type; -- Ñîîáùåíèå îá îøèáêå îáðàáîò÷èêà
|
|
NIDENT PKG_STD.TREF; -- Èäåíòèôèêàòîð ïðîöåññà îáðàáîòêè
|
|
PRMS PKG_CONTPRMLOC.TCONTAINER; -- Êîíòåéíåð äëÿ ïàðàìåòðîâ ïðîöåäóðû îáðàáîòêè
|
|
begin
|
|
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
|
|
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
|
|
/* Ñ÷èòàåì çàïèñü ôóíêöèè îáðàáîòêè */
|
|
REXSSERVICEFN := GET_EXSSERVICEFN_ID(NFLAG_SMART => 0, NRN => REXSQUEUE.EXSSERVICEFN);
|
|
/* Ñ÷èòàåì çàïèñü ñåðâèñà îáðàáîòêè */
|
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.PRN);
|
|
/* Ñ÷èòàåì çàïèñü òèïîâîãî ñîîáùåíèÿ */
|
|
REXSMSGTYPE := GET_EXSMSGTYPE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.EXSMSGTYPE);
|
|
/* Çàïóñòèì îáðàáîò÷èê, åñëè îí åñòü */
|
|
if (REXSMSGTYPE.PRC_RESP is not null) then
|
|
/* Ïðîâåðÿåì èíòåðôåéñ îáðàáîò÷èêà */
|
|
UTL_STORED_CHECK(NFLAG_SMART => 0,
|
|
SPKG => REXSMSGTYPE.PKG_RESP,
|
|
SPRC => REXSMSGTYPE.PRC_RESP,
|
|
SARGS => SPRC_RESP_ARGS,
|
|
NRESULT => NIDENT);
|
|
/* Ôîðìèðóåì èäåíòèôèêàòîð ïðîöåññà */
|
|
NIDENT := GEN_IDENT();
|
|
/* Óñòàíîâèì çíà÷åíèÿ ôèêñèðîâàííûõ âõîäíûõ ïàðàìåòðîâ */
|
|
PKG_CONTPRMLOC.APPENDN(RCONTAINER => PRMS,
|
|
SNAME => 'NIDENT',
|
|
NVALUE => NIDENT,
|
|
NIN_OUT => PKG_STD.IPARAM_TYPE_IN);
|
|
PKG_CONTPRMLOC.APPENDN(RCONTAINER => PRMS,
|
|
SNAME => 'NSRV_TYPE',
|
|
NVALUE => REXSSERVICE.SRV_TYPE,
|
|
NIN_OUT => PKG_STD.IPARAM_TYPE_IN);
|
|
PKG_CONTPRMLOC.APPENDN(RCONTAINER => PRMS,
|
|
SNAME => 'NEXSQUEUE',
|
|
NVALUE => REXSQUEUE.RN,
|
|
NIN_OUT => PKG_STD.IPARAM_TYPE_IN);
|
|
/* Èñïîëíÿåì ïðîöåäóðó */
|
|
PKG_SQL_CALL.EXECUTE_STORED(SSTORED_NAME => UTL_STORED_MAKE_LINK(SPACKAGE => REXSMSGTYPE.PKG_RESP,
|
|
SPROCEDURE => REXSMSGTYPE.PRC_RESP),
|
|
RPARAM_CONTAINER => PRMS);
|
|
/* Çàáèðàåì ïàðàìåòð ñ îøèáêàìè îáðàáîò÷èêà */
|
|
SERR := PRC_RESP_ARG_STR_GET(NIDENT => NIDENT, SARG => SCONT_FLD_SERR);
|
|
/* Åñëè áûëè îøèáêè - ñêàæåì îá ýòîì */
|
|
if (SERR is not null) then
|
|
P_EXCEPTION(0, SERR);
|
|
else
|
|
/* Çàôèêñèðóåì ðåçóëüòàò îáðàáîòêè (òîëüêî äëÿ âõîäÿùèõ è òîëüêî åñëè íåò îøèáîê îáðàáîòêè) */
|
|
if (REXSSERVICE.SRV_TYPE = NSRV_TYPE_RECIVE) then
|
|
QUEUE_RESP_SET(NEXSQUEUE => REXSQUEUE.RN,
|
|
BRESP => PRC_RESP_ARG_BLOB_GET(NIDENT => NIDENT, SARG => SCONT_FLD_BRESP),
|
|
RCQUEUE => RCQUEUE);
|
|
end if;
|
|
end if;
|
|
/* Î÷èñòèì êîíòåéíåð ïàðàìåòðîâ */
|
|
PKG_CONTPRMLOC.PURGE(RCONTAINER => PRMS);
|
|
end if;
|
|
/* Âîçâðàùàåì îáðàáîòàííóþ ïîçèöèþ î÷åðåäè */
|
|
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => REXSQUEUE.RN, RCQUEUE => RCQUEUE);
|
|
end QUEUE_PRC;
|
|
|
|
end;
|
|
/
|