Упорядочение очереди по принципу FIFO на основе рег. номеров записей + форматирование

This commit is contained in:
Mikhail Chechnev 2018-12-07 20:45:10 +03:00
parent 8fe4f979f9
commit 03c14eb150

View File

@ -3,7 +3,7 @@ create or replace package PKG_EXS as
/* Константы - идентификация сервера приложений в сессиях экземпляра БД */ /* Константы - идентификация сервера приложений в сессиях экземпляра БД */
SAPPSRV_PROGRAMM_NAME constant PKG_STD.TSTRING := 'node.exe'; -- Наименование исполняемого файла SAPPSRV_PROGRAMM_NAME constant PKG_STD.TSTRING := 'node.exe'; -- Наименование исполняемого файла
SAPPSRV_MODULE_NAME constant PKG_STD.TSTRING := 'PARUS$ExchangeServer'; -- Наименование модуля SAPPSRV_MODULE_NAME constant PKG_STD.TSTRING := 'PARUS$ExchangeServer'; -- Наименование модуля
/* Константы - контейнеры контекста и процессов расчёта */ /* Константы - контейнеры контекста и процессов расчёта */
SCONT_MAIN constant PKG_STD.TSTRING := 'EXSCONT'; -- Глобальный префикс контейнера SCONT_MAIN constant PKG_STD.TSTRING := 'EXSCONT'; -- Глобальный префикс контейнера
SCONT_PRC constant PKG_STD.TSTRING := 'PRC'; -- Наименование контейнера для параметров процесса SCONT_PRC constant PKG_STD.TSTRING := 'PRC'; -- Наименование контейнера для параметров процесса
@ -61,7 +61,7 @@ create or replace package PKG_EXS as
SLOG_STATE_INF constant varchar2(40) := 'INF'; -- Информация (строковый код) SLOG_STATE_INF constant varchar2(40) := 'INF'; -- Информация (строковый код)
SLOG_STATE_WRN constant varchar2(40) := 'WRN'; -- Предупреждение (строковый код) SLOG_STATE_WRN constant varchar2(40) := 'WRN'; -- Предупреждение (строковый код)
SLOG_STATE_ERR constant varchar2(40) := 'ERR'; -- Ошибка (строковый код) SLOG_STATE_ERR constant varchar2(40) := 'ERR'; -- Ошибка (строковый код)
/* Константы - состояния исполнения записей очереди обмена */ /* Константы - состояния исполнения записей очереди обмена */
NQUEUE_EXEC_STATE_INQUEUE constant EXSQUEUE.EXEC_STATE%type := 0; -- Поставлено в очередь NQUEUE_EXEC_STATE_INQUEUE constant EXSQUEUE.EXEC_STATE%type := 0; -- Поставлено в очередь
NQUEUE_EXEC_STATE_APP constant EXSQUEUE.EXEC_STATE%type := 1; -- Обрабатывается сервером приложений NQUEUE_EXEC_STATE_APP constant EXSQUEUE.EXEC_STATE%type := 1; -- Обрабатывается сервером приложений
@ -78,32 +78,32 @@ create or replace package PKG_EXS as
SQUEUE_EXEC_STATE_APP_ERR constant varchar2(40) := 'APP_ERR'; -- Ошибка обработки сервером приложений SQUEUE_EXEC_STATE_APP_ERR constant varchar2(40) := 'APP_ERR'; -- Ошибка обработки сервером приложений
SQUEUE_EXEC_STATE_DB constant varchar2(40) := 'DB'; -- Обрабатывается СУБД SQUEUE_EXEC_STATE_DB constant varchar2(40) := 'DB'; -- Обрабатывается СУБД
SQUEUE_EXEC_STATE_DB_OK constant varchar2(40) := 'DB_OK'; -- Успешно обработано СУБД SQUEUE_EXEC_STATE_DB_OK constant varchar2(40) := 'DB_OK'; -- Успешно обработано СУБД
SQUEUE_EXEC_STATE_DB_ERR constant varchar2(40) := 'DB_ERR'; -- Îøèáêà îáðàáîòêè ÑÓÁÄ SQUEUE_EXEC_STATE_DB_ERR constant varchar2(40) := 'DB_ERR'; -- Ошибка обработки СУБД
SQUEUE_EXEC_STATE_OK constant varchar2(40) := 'OK'; -- Обработано успешно SQUEUE_EXEC_STATE_OK constant varchar2(40) := 'OK'; -- Обработано успешно
SQUEUE_EXEC_STATE_ERR constant varchar2(40) := 'ERR'; -- Обработано с ошибками SQUEUE_EXEC_STATE_ERR constant varchar2(40) := 'ERR'; -- Обработано с ошибками
/* Константы - признак инкремента количества попыток исполнения позиции очереди */ /* Константы - признак инкремента количества попыток исполнения позиции очереди */
NINC_EXEC_CNT_NO constant number(1) := 0; -- Не инкрементировать NINC_EXEC_CNT_NO constant number(1) := 0; -- Не инкрементировать
NINC_EXEC_CNT_YES constant number(1) := 1; -- Инкрементировать NINC_EXEC_CNT_YES constant number(1) := 1; -- Инкрементировать
/* Êîíñòàíòû - ïðèçíàê èíêðåìåíòà êîëè÷åñòâà ïîïûòîê èñïîëíåíèÿ ïîçèöèè î÷åðåäè */ /* Константы - признак инкремента количества попыток исполнения позиции очереди */
NQUEUE_EXEC_NO constant number(1) := 0; -- Не исполнять NQUEUE_EXEC_NO constant number(1) := 0; -- Не исполнять
NQUEUE_EXEC_YES constant number(1) := 1; -- Исполнять NQUEUE_EXEC_YES constant number(1) := 1; -- Исполнять
/* Константы - ожидаемый интерфейс процедуры обработки сообщения очереди на стороне БД */ /* Константы - ожидаемый интерфейс процедуры обработки сообщения очереди на стороне БД */
SPRC_RESP_ARGS constant varchar2(80) := 'NIDENT,IN,NUMBER;NSRV_TYPE,IN,NUMBER;NEXSQUEUE,IN,NUMBER;'; -- Список параметров процедуры обработки SPRC_RESP_ARGS constant varchar2(80) := 'NIDENT,IN,NUMBER;NSRV_TYPE,IN,NUMBER;NEXSQUEUE,IN,NUMBER;'; -- Список параметров процедуры обработки
/* Проверка активности сервера приложений */ /* Проверка активности сервера приложений */
function UTL_APPSRV_IS_ACTIVE function UTL_APPSRV_IS_ACTIVE
return boolean; -- Флаг активности сервера приложений return boolean; -- Флаг активности сервера приложений
/* Формирование ссылки на вызываемый хранимый объект */ /* Формирование ссылки на вызываемый хранимый объект */
function UTL_STORED_MAKE_LINK function UTL_STORED_MAKE_LINK
( (
SPROCEDURE in varchar2, -- Имя процедуры SPROCEDURE in varchar2, -- Имя процедуры
SPACKAGE in varchar2 := null -- Имя пакета SPACKAGE in varchar2 := null -- Имя пакета
) return varchar2; -- Ссылка на вызываемый хранимый объект ) return varchar2; -- Ссылка на вызываемый хранимый объект
/* Проверка интерфейса хранимого объекта */ /* Проверка интерфейса хранимого объекта */
procedure UTL_STORED_CHECK procedure UTL_STORED_CHECK
( (
@ -113,31 +113,31 @@ create or replace package PKG_EXS as
SARGS in varchar2, -- Список параметров (";" - разделитель аргументов, "," - разделитель атрибутов аргумента, формат: <АРГУМЕНТ>,<IN|OUT|IN OUT>,<ТИП ДАННЫХ ORACLE>;) SARGS in varchar2, -- Список параметров (";" - разделитель аргументов, "," - разделитель атрибутов аргумента, формат: <АРГУМЕНТ>,<IN|OUT|IN OUT>,<ТИП ДАННЫХ ORACLE>;)
NRESULT out number -- Результат проверки (0 - ошибка, 1 - успех) NRESULT out number -- Результат проверки (0 - ошибка, 1 - успех)
); );
/* Формирование полного наименования контейнера для хранения окружения вызова процедуры */ /* Формирование полного наименования контейнера для хранения окружения вызова процедуры */
function UTL_CONTAINER_MAKE_NAME function UTL_CONTAINER_MAKE_NAME
( (
NIDENT in number, -- Идентификатор процесса NIDENT in number, -- Идентификатор процесса
SSUB_CONTAINER in varchar2 := null -- Наименование контейнера второго уровня SSUB_CONTAINER in varchar2 := null -- Наименование контейнера второго уровня
) )
return varchar2; -- Ïîëíîå íàèìåíîâàíèå êîíòåéíåðà return varchar2; -- Полное наименование контейнера
/* Очистка контейнера для хранения окружения вызова процедуры */ /* Очистка контейнера для хранения окружения вызова процедуры */
procedure UTL_CONTAINER_PURGE procedure UTL_CONTAINER_PURGE
( (
NIDENT in number, -- Идентификатор процесса NIDENT in number, -- Идентификатор процесса
SSUB_CONTAINER in varchar2 := null -- Наименование контейнера второго уровня SSUB_CONTAINER in varchar2 := null -- Наименование контейнера второго уровня
); );
/* Вычисление даты следующего запуска расписания */ /* Вычисление даты следующего запуска расписания */
function UTL_SCHED_CALC_NEXT_DATE function UTL_SCHED_CALC_NEXT_DATE
( (
DEXEC_DATE in date, -- Дата предыдущего исполнения DEXEC_DATE in date, -- Дата предыдущего исполнения
NRETRY_SCHEDULE in number, -- График перезапуска (см. константы NRETRY_SCHEDULE_*) NRETRY_SCHEDULE in number, -- График перезапуска (см. константы NRETRY_SCHEDULE_*)
NRETRY_STEP in number -- Шаг графика перезапуска NRETRY_STEP in number -- Шаг графика перезапуска
) )
return date; -- Дата следующего запуска return date; -- Дата следующего запуска
/* Выяснение необходимости запуска по расписанию */ /* Выяснение необходимости запуска по расписанию */
function UTL_SCHED_CHECK_EXEC function UTL_SCHED_CHECK_EXEC
( (
@ -145,9 +145,9 @@ create or replace package PKG_EXS as
NRETRY_SCHEDULE in number, -- График перезапуска (см. константы NRETRY_SCHEDULE_*) NRETRY_SCHEDULE in number, -- График перезапуска (см. константы NRETRY_SCHEDULE_*)
NRETRY_STEP in number, -- Шаг графика перезапуска NRETRY_STEP in number, -- Шаг графика перезапуска
DEXEC in date := sysdate -- Дата, относительно которой необходимо выполнить проверку DEXEC in date := sysdate -- Дата, относительно которой необходимо выполнить проверку
) )
return boolean; -- Признак необходимости запуска return boolean; -- Признак необходимости запуска
/* Установка значения типа строка параметра процедуры обработки сообщения обмена */ /* Установка значения типа строка параметра процедуры обработки сообщения обмена */
procedure PRC_RESP_ARG_STR_SET procedure PRC_RESP_ARG_STR_SET
( (
@ -179,7 +179,7 @@ create or replace package PKG_EXS as
SARG in varchar2, -- Наименование параметра SARG in varchar2, -- Наименование параметра
BVALUE in blob -- Значение параметра BVALUE in blob -- Значение параметра
); );
/* Считывание значения типа строка параметра процедуры обработки сообщения обмена */ /* Считывание значения типа строка параметра процедуры обработки сообщения обмена */
function PRC_RESP_ARG_STR_GET function PRC_RESP_ARG_STR_GET
( (
@ -200,14 +200,14 @@ create or replace package PKG_EXS as
NIDENT in number, -- Идентификатор процесса NIDENT in number, -- Идентификатор процесса
SARG in varchar2 -- Наименование параметра SARG in varchar2 -- Наименование параметра
) return date; -- Значение параметра ) return date; -- Значение параметра
/* Считывание значения типа BLOB параметра процедуры обработки сообщения обмена */ /* Считывание значения типа BLOB параметра процедуры обработки сообщения обмена */
function PRC_RESP_ARG_BLOB_GET function PRC_RESP_ARG_BLOB_GET
( (
NIDENT in number, -- Идентификатор процесса NIDENT in number, -- Идентификатор процесса
SARG in varchar2 -- Наименование параметра SARG in varchar2 -- Наименование параметра
) return blob; -- Значение параметра ) return blob; -- Значение параметра
/* Базовое добавление в буфер отбора документов */ /* Базовое добавление в буфер отбора документов */
procedure RNLIST_BASE_INSERT procedure RNLIST_BASE_INSERT
( (
@ -215,26 +215,26 @@ create or replace package PKG_EXS as
NDOCUMENT in number, -- Рег. номер записи документа NDOCUMENT in number, -- Рег. номер записи документа
NRN out number -- Рег. номер добавленной записи буфера NRN out number -- Рег. номер добавленной записи буфера
); );
/* Базовое удаление из буфера отбора документов */ /* Базовое удаление из буфера отбора документов */
procedure RNLINST_BASE_DELETE procedure RNLINST_BASE_DELETE
( (
NRN in number -- Рег. номер записи буфера NRN in number -- Рег. номер записи буфера
); );
/* Базовая очистка буфера отбора документов */ /* Базовая очистка буфера отбора документов */
procedure RNLIST_BASE_CLEAR procedure RNLIST_BASE_CLEAR
( (
NIDENT in number -- Идентификатор буфера NIDENT in number -- Идентификатор буфера
); );
/* Получение сервиса */ /* Получение сервиса */
procedure SERVICE_GET procedure SERVICE_GET
( (
NIDENT in number, -- Идентификатор буфера NIDENT in number, -- Идентификатор буфера
RCSERVICE out sys_refcursor -- Курсор со списком сервисов RCSERVICE out sys_refcursor -- Курсор со списком сервисов
); );
/* Получение сервиса */ /* Получение сервиса */
procedure SERVICE_GET procedure SERVICE_GET
( (
@ -242,7 +242,7 @@ create or replace package PKG_EXS as
NEXSSERVICE in number, -- Рег. номер записи сервиса NEXSSERVICE in number, -- Рег. номер записи сервиса
RCSERVICE out sys_refcursor -- Курсор со списком сервисов RCSERVICE out sys_refcursor -- Курсор со списком сервисов
); );
/* Получение списка сервисов */ /* Получение списка сервисов */
procedure SERVICES_GET procedure SERVICES_GET
( (
@ -254,7 +254,7 @@ create or replace package PKG_EXS as
( (
NIDENT in number, -- Идентификатор буфера NIDENT in number, -- Идентификатор буфера
RCSERVICEFN out sys_refcursor -- Курсор со списком функций сервиса RCSERVICEFN out sys_refcursor -- Курсор со списком функций сервиса
); );
/* Получение функции сервиса */ /* Получение функции сервиса */
procedure SERVICEFN_GET procedure SERVICEFN_GET
@ -262,15 +262,15 @@ create or replace package PKG_EXS as
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке
NEXSSERVICEFN in number, -- Рег. номер функции сервиса NEXSSERVICEFN in number, -- Рег. номер функции сервиса
RCSERVICEFN out sys_refcursor -- Курсор со списком функций сервиса RCSERVICEFN out sys_refcursor -- Курсор со списком функций сервиса
); );
/* Получение списка функций сервиса */ /* Получение списка функций сервиса */
procedure SERVICEFNS_GET procedure SERVICEFNS_GET
( (
NEXSSERVICE in number, -- Рег. номер записи сервиса NEXSSERVICE in number, -- Рег. номер записи сервиса
RCSERVICEFNS out sys_refcursor -- Курсор со списком функций RCSERVICEFNS out sys_refcursor -- Курсор со списком функций
); );
/* Поиск функции сервиса обмена по коду функции и коду сервиса */ /* Поиск функции сервиса обмена по коду функции и коду сервиса */
function SERVICEFN_FIND_BY_SRVCODE function SERVICEFN_FIND_BY_SRVCODE
( (
@ -286,15 +286,15 @@ create or replace package PKG_EXS as
NIDENT in number, -- Идентификатор буфера NIDENT in number, -- Идентификатор буфера
RCLOG out sys_refcursor -- Курсор со списком записей журнала работы RCLOG out sys_refcursor -- Курсор со списком записей журнала работы
); );
/* Считывание записи журнала работы */ /* Считывание записи журнала работы */
procedure LOG_GET procedure LOG_GET
( (
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке
NEXSLOG in number, -- Рег. номер записи журнала NEXSLOG in number, -- Рег. номер записи журнала
RCLOG out sys_refcursor -- Курсор со списком записей журнала работы RCLOG out sys_refcursor -- Курсор со списком записей журнала работы
); );
/* Добавление записи в журнал работы */ /* Добавление записи в журнал работы */
procedure LOG_PUT procedure LOG_PUT
( (
@ -312,29 +312,29 @@ create or replace package PKG_EXS as
NIDENT in number, -- Идентификатор буфера NIDENT in number, -- Идентификатор буфера
RCQUEUE out sys_refcursor -- Курсор с позицией очереди RCQUEUE out sys_refcursor -- Курсор с позицией очереди
); );
/* Считывание сообщения из очереди */ /* Считывание сообщения из очереди */
procedure QUEUE_GET procedure QUEUE_GET
( (
NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке
NEXSQUEUE in number, -- Рег. номер записи очереди NEXSQUEUE in number, -- Рег. номер записи очереди
RCQUEUE out sys_refcursor -- Курсор с позицией очереди RCQUEUE out sys_refcursor -- Курсор с позицией очереди
); );
/* Проверка необходимости исполнения исходящего сообщения очереди */ /* Проверка необходимости исполнения исходящего сообщения очереди */
function QUEUE_SRV_TYPE_SEND_EXEC_CHECK function QUEUE_SRV_TYPE_SEND_EXEC_CHECK
( (
NEXSQUEUE in number -- Рег. номер записи очереди NEXSQUEUE in number -- Рег. номер записи очереди
) )
return number; -- Флаг необходимости исполнения позиции очереди (см. константы NQUEUE_EXEC_*) return number; -- Флаг необходимости исполнения позиции очереди (см. константы NQUEUE_EXEC_*)
/* Считывание очередной порции исходящих сообщений из очереди */ /* Считывание очередной порции исходящих сообщений из очереди */
procedure QUEUE_SRV_TYPE_SEND_GET procedure QUEUE_SRV_TYPE_SEND_GET
( (
NPORTION_SIZE in number, -- Количество выбираемых сообщений NPORTION_SIZE in number, -- Количество выбираемых сообщений
RCQUEUES out sys_refcursor -- Курсор со списком позиций очереди RCQUEUES out sys_refcursor -- Курсор со списком позиций очереди
); );
/* Установка состояние записи очереди */ /* Установка состояние записи очереди */
procedure QUEUE_EXEC_STATE_SET procedure QUEUE_EXEC_STATE_SET
( (
@ -342,34 +342,34 @@ create or replace package PKG_EXS as
NEXEC_STATE in number, -- Устанавливаемое состояние (см. констнаты NQUEUE_EXEC_STATE_*, null - не менять) NEXEC_STATE in number, -- Устанавливаемое состояние (см. констнаты NQUEUE_EXEC_STATE_*, null - не менять)
SEXEC_MSG in varchar2, -- Сообщение обработчика SEXEC_MSG in varchar2, -- Сообщение обработчика
NINC_EXEC_CNT in number, -- Флаг инкремента счётчика исполнений (см. констнаты NINC_EXEC_CNT_*, null - не менять) NINC_EXEC_CNT in number, -- Флаг инкремента счётчика исполнений (см. констнаты NINC_EXEC_CNT_*, null - не менять)
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè RCQUEUE out sys_refcursor -- Курсор с изменённой позицией очереди
); );
/* Установка результата обработки записи очереди */ /* Установка результата обработки записи очереди */
procedure QUEUE_RESP_SET procedure QUEUE_RESP_SET
( (
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè NEXSQUEUE in number, -- Рег. номер записи очереди
BRESP in blob, -- Результат обработки BRESP in blob, -- Результат обработки
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè RCQUEUE out sys_refcursor -- Курсор с изменённой позицией очереди
); );
/* Установка сообщения записи очереди */ /* Установка сообщения записи очереди */
procedure QUEUE_MSG_SET procedure QUEUE_MSG_SET
( (
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè NEXSQUEUE in number, -- Рег. номер записи очереди
BMSG in blob, -- Результат обработки BMSG in blob, -- Результат обработки
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè RCQUEUE out sys_refcursor -- Курсор с изменённой позицией очереди
); );
/* Помещение сообщения обмена в очередь */ /* Помещение сообщения обмена в очередь */
procedure QUEUE_PUT procedure QUEUE_PUT
( (
NEXSSERVICEFN in number, -- Рег. номер функции обработки NEXSSERVICEFN in number, -- Рег. номер функции обработки
BMSG in blob, -- Данные BMSG in blob, -- Данные
NEXSQUEUE in number := null, -- Рег. номер связанной позиции очереди NEXSQUEUE in number := null, -- Рег. номер связанной позиции очереди
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè RCQUEUE out sys_refcursor -- Курсор с добавленной позицией очереди
); );
/* Помещение сообщения обмена в очередь (по коду сервиса и функции обрабоки) */ /* Помещение сообщения обмена в очередь (по коду сервиса и функции обрабоки) */
procedure QUEUE_PUT procedure QUEUE_PUT
( (
@ -379,20 +379,20 @@ create or replace package PKG_EXS as
NEXSQUEUE in number := null, -- Рег. номер связанной позиции очереди NEXSQUEUE in number := null, -- Рег. номер связанной позиции очереди
RCQUEUE out sys_refcursor -- Курсор с добавленной позицией очереди RCQUEUE out sys_refcursor -- Курсор с добавленной позицией очереди
); );
/* Исполнение обработчика для сообщения обмена */ /* Исполнение обработчика для сообщения обмена */
procedure QUEUE_PRC procedure QUEUE_PRC
( (
NEXSQUEUE in number, -- Рег. номер записи очереди NEXSQUEUE in number, -- Рег. номер записи очереди
RCQUEUE out sys_refcursor -- Курсор с обработанной позицией очереди RCQUEUE out sys_refcursor -- Курсор с обработанной позицией очереди
); );
end; end;
/ /
create or replace package body PKG_EXS as create or replace package body PKG_EXS as
/* Проверка активности сервера приложений */ /* Проверка активности сервера приложений */
function UTL_APPSRV_IS_ACTIVE function UTL_APPSRV_IS_ACTIVE
return boolean -- Флаг активности сервера приложений return boolean -- Флаг активности сервера приложений
is is
begin begin
@ -408,7 +408,7 @@ create or replace package body PKG_EXS as
/* Сеанса нет */ /* Сеанса нет */
return false; return false;
end UTL_APPSRV_IS_ACTIVE; end UTL_APPSRV_IS_ACTIVE;
/* Формирование ссылки на вызываемый хранимый объект */ /* Формирование ссылки на вызываемый хранимый объект */
function UTL_STORED_MAKE_LINK function UTL_STORED_MAKE_LINK
( (
@ -627,7 +627,7 @@ create or replace package body PKG_EXS as
CHR(13) || SINTERFACE); CHR(13) || SINTERFACE);
end if; end if;
end UTL_STORED_CHECK; end UTL_STORED_CHECK;
/* Формирование полного наименования контейнера для хранения окружения вызова процедуры */ /* Формирование полного наименования контейнера для хранения окружения вызова процедуры */
function UTL_CONTAINER_MAKE_NAME function UTL_CONTAINER_MAKE_NAME
( (
@ -675,14 +675,14 @@ create or replace package body PKG_EXS as
begin begin
PKG_CONTVARGLB.PURGE(SCONTAINER => UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT, SSUB_CONTAINER => SSUB_CONTAINER)); PKG_CONTVARGLB.PURGE(SCONTAINER => UTL_CONTAINER_MAKE_NAME(NIDENT => NIDENT, SSUB_CONTAINER => SSUB_CONTAINER));
end UTL_CONTAINER_PURGE; end UTL_CONTAINER_PURGE;
/* Вычисление даты следующего запуска расписания */ /* Вычисление даты следующего запуска расписания */
function UTL_SCHED_CALC_NEXT_DATE function UTL_SCHED_CALC_NEXT_DATE
( (
DEXEC_DATE in date, -- Дата предыдущего исполнения DEXEC_DATE in date, -- Дата предыдущего исполнения
NRETRY_SCHEDULE in number, -- График перезапуска (см. константы NRETRY_SCHEDULE_*) NRETRY_SCHEDULE in number, -- График перезапуска (см. константы NRETRY_SCHEDULE_*)
NRETRY_STEP in number -- Шаг графика перезапуска NRETRY_STEP in number -- Шаг графика перезапуска
) )
return date -- Дата следующего запуска return date -- Дата следующего запуска
is is
begin begin
@ -741,7 +741,7 @@ create or replace package body PKG_EXS as
NRETRY_SCHEDULE in number, -- График перезапуска (см. константы NRETRY_SCHEDULE_*) NRETRY_SCHEDULE in number, -- График перезапуска (см. константы NRETRY_SCHEDULE_*)
NRETRY_STEP in number, -- Шаг графика перезапуска NRETRY_STEP in number, -- Шаг графика перезапуска
DEXEC in date := sysdate -- Дата, относительно которой необходимо выполнить проверку DEXEC in date := sysdate -- Дата, относительно которой необходимо выполнить проверку
) )
return boolean -- Признак необходимости запуска return boolean -- Признак необходимости запуска
is is
DEXEC_NEXT date; -- Hасчетная дата следующего запуска DEXEC_NEXT date; -- Hасчетная дата следующего запуска
@ -764,7 +764,7 @@ create or replace package body PKG_EXS as
when others then when others then
return false; return false;
end UTL_SCHED_CHECK_EXEC; end UTL_SCHED_CHECK_EXEC;
/* Установка значения типа строка параметра процедуры обработки сообщения обмена */ /* Установка значения типа строка параметра процедуры обработки сообщения обмена */
procedure PRC_RESP_ARG_STR_SET procedure PRC_RESP_ARG_STR_SET
( (
@ -831,8 +831,8 @@ create or replace package body PKG_EXS as
P_FILE_BUFFER_INSERT(NIDENT => NFILE_IDENT, CFILENAME => NFILE_IDENT, CDATA => null, BLOBDATA => BVALUE); P_FILE_BUFFER_INSERT(NIDENT => NFILE_IDENT, CFILENAME => NFILE_IDENT, CDATA => null, BLOBDATA => BVALUE);
/* Сохраним данные в контейнер */ /* Сохраним данные в контейнер */
PKG_CONTVARGLB.PUTN(SCONTAINER => SCONTAINER, SNAME => SARG, NVALUE => NFILE_IDENT); PKG_CONTVARGLB.PUTN(SCONTAINER => SCONTAINER, SNAME => SARG, NVALUE => NFILE_IDENT);
end PRC_RESP_ARG_BLOB_SET; end PRC_RESP_ARG_BLOB_SET;
/* Считывание значения типа строка параметра процедуры обработки сообщения обмена */ /* Считывание значения типа строка параметра процедуры обработки сообщения обмена */
function PRC_RESP_ARG_STR_GET function PRC_RESP_ARG_STR_GET
( (
@ -877,7 +877,7 @@ create or replace package body PKG_EXS as
/* Считаем и вернём значение */ /* Считаем и вернём значение */
return PKG_CONTVARGLB.GETD(SCONTAINER => SCONTAINER, SNAME => SARG); return PKG_CONTVARGLB.GETD(SCONTAINER => SCONTAINER, SNAME => SARG);
end PRC_RESP_ARG_DATE_GET; end PRC_RESP_ARG_DATE_GET;
/* Считывание значения типа BLOB параметра процедуры обработки сообщения обмена */ /* Считывание значения типа BLOB параметра процедуры обработки сообщения обмена */
function PRC_RESP_ARG_BLOB_GET function PRC_RESP_ARG_BLOB_GET
( (
@ -907,10 +907,10 @@ create or replace package body PKG_EXS as
TO_CHAR(NFILE_IDENT)); TO_CHAR(NFILE_IDENT));
end; end;
/* Зачистим файловый буфер */ /* Зачистим файловый буфер */
P_FILE_BUFFER_CLEAR(NIDENT => NFILE_IDENT); P_FILE_BUFFER_CLEAR(NIDENT => NFILE_IDENT);
/* Вернём значение */ /* Вернём значение */
return BRESP; return BRESP;
end PRC_RESP_ARG_BLOB_GET; end PRC_RESP_ARG_BLOB_GET;
/* Базовое добавление в буфер отбора документов */ /* Базовое добавление в буфер отбора документов */
procedure RNLIST_BASE_INSERT procedure RNLIST_BASE_INSERT
@ -926,7 +926,7 @@ create or replace package body PKG_EXS as
/* Добавляем запись */ /* Добавляем запись */
insert into EXSRNLIST (RN, IDENT, DOCUMENT) values (NRN, NIDENT, NDOCUMENT); insert into EXSRNLIST (RN, IDENT, DOCUMENT) values (NRN, NIDENT, NDOCUMENT);
end RNLIST_BASE_INSERT; end RNLIST_BASE_INSERT;
/* Базовое удаление из буфера отбора документов */ /* Базовое удаление из буфера отбора документов */
procedure RNLINST_BASE_DELETE procedure RNLINST_BASE_DELETE
( (
@ -937,7 +937,7 @@ create or replace package body PKG_EXS as
/* Удалим запись */ /* Удалим запись */
delete from EXSRNLIST T where T.RN = NRN; delete from EXSRNLIST T where T.RN = NRN;
end RNLINST_BASE_DELETE; end RNLINST_BASE_DELETE;
/* Базовая очистка буфера отбора документов */ /* Базовая очистка буфера отбора документов */
procedure RNLIST_BASE_CLEAR procedure RNLIST_BASE_CLEAR
( (
@ -952,7 +952,7 @@ create or replace package body PKG_EXS as
RNLINST_BASE_DELETE(NRN => C.RN); RNLINST_BASE_DELETE(NRN => C.RN);
end loop; end loop;
end RNLIST_BASE_CLEAR; end RNLIST_BASE_CLEAR;
/* Получение сервиса */ /* Получение сервиса */
procedure SERVICE_GET procedure SERVICE_GET
( (
@ -981,7 +981,7 @@ create or replace package body PKG_EXS as
from EXSSERVICE T from EXSSERVICE T
where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT); where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT);
end SERVICE_GET; end SERVICE_GET;
/* Получение сервиса */ /* Получение сервиса */
procedure SERVICE_GET procedure SERVICE_GET
( (
@ -1005,7 +1005,7 @@ create or replace package body PKG_EXS as
/* Чистим буфер */ /* Чистим буфер */
RNLIST_BASE_CLEAR(NIDENT => NIDENT); RNLIST_BASE_CLEAR(NIDENT => NIDENT);
end SERVICE_GET; end SERVICE_GET;
/* Получение списка сервисов */ /* Получение списка сервисов */
procedure SERVICES_GET procedure SERVICES_GET
( (
@ -1027,8 +1027,8 @@ create or replace package body PKG_EXS as
SERVICE_GET(NIDENT => NIDENT, RCSERVICE => RCSERVICES); SERVICE_GET(NIDENT => NIDENT, RCSERVICE => RCSERVICES);
/* Чистим буфер */ /* Чистим буфер */
RNLIST_BASE_CLEAR(NIDENT => NIDENT); RNLIST_BASE_CLEAR(NIDENT => NIDENT);
end SERVICES_GET; end SERVICES_GET;
/* Получение функции сервиса */ /* Получение функции сервиса */
procedure SERVICEFN_GET procedure SERVICEFN_GET
( (
@ -1078,7 +1078,7 @@ create or replace package body PKG_EXS as
where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT) where T.RN in (select L.DOCUMENT from EXSRNLIST L where L.IDENT = NIDENT)
and T.EXSMSGTYPE = M.RN; and T.EXSMSGTYPE = M.RN;
end SERVICEFN_GET; end SERVICEFN_GET;
/* Получение функции сервиса */ /* Получение функции сервиса */
procedure SERVICEFN_GET procedure SERVICEFN_GET
( (
@ -1102,7 +1102,7 @@ create or replace package body PKG_EXS as
/* Чистим буфер */ /* Чистим буфер */
RNLIST_BASE_CLEAR(NIDENT => NIDENT); RNLIST_BASE_CLEAR(NIDENT => NIDENT);
end SERVICEFN_GET; end SERVICEFN_GET;
/* Получение списка функций сервиса */ /* Получение списка функций сервиса */
procedure SERVICEFNS_GET procedure SERVICEFNS_GET
( (
@ -1126,7 +1126,7 @@ create or replace package body PKG_EXS as
/* Чистим буфер */ /* Чистим буфер */
RNLIST_BASE_CLEAR(NIDENT => NIDENT); RNLIST_BASE_CLEAR(NIDENT => NIDENT);
end SERVICEFNS_GET; end SERVICEFNS_GET;
/* Поиск функции сервиса обмена по коду функции и коду сервиса */ /* Поиск функции сервиса обмена по коду функции и коду сервиса */
function SERVICEFN_FIND_BY_SRVCODE function SERVICEFN_FIND_BY_SRVCODE
( (
@ -1136,7 +1136,7 @@ create or replace package body PKG_EXS as
) )
return number -- Рег. номер функции сервиса обмена return number -- Рег. номер функции сервиса обмена
is is
NEXSSERVICEFN PKG_STD.TREF; -- Ðåã. íîìåð ôóíêöèè ñåðâèñà îáðàáîòêè NEXSSERVICEFN PKG_STD.TREF; -- Рег. номер функции сервиса обработки
begin begin
/* Найдем функцию сервиса обработки */ /* Найдем функцию сервиса обработки */
begin begin
@ -1157,7 +1157,7 @@ create or replace package body PKG_EXS as
/* Вернем результат */ /* Вернем результат */
return NEXSSERVICEFN; return NEXSSERVICEFN;
end SERVICEFN_FIND_BY_SRVCODE; end SERVICEFN_FIND_BY_SRVCODE;
/* Считывание записи журнала работы */ /* Считывание записи журнала работы */
procedure LOG_GET procedure LOG_GET
( (
@ -1192,11 +1192,11 @@ create or replace package body PKG_EXS as
and T.EXSSERVICE = S.RN(+) and T.EXSSERVICE = S.RN(+)
and T.EXSSERVICEFN = SFN.RN(+); and T.EXSSERVICEFN = SFN.RN(+);
end LOG_GET; end LOG_GET;
/* Считывание записи журнала работы */ /* Считывание записи журнала работы */
procedure LOG_GET procedure LOG_GET
( (
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке
NEXSLOG in number, -- Рег. номер записи журнала NEXSLOG in number, -- Рег. номер записи журнала
RCLOG out sys_refcursor -- Курсор со списком записей журнала работы RCLOG out sys_refcursor -- Курсор со списком записей журнала работы
) )
@ -1269,7 +1269,7 @@ create or replace package body PKG_EXS as
NEXSQUEUE => NEXSQUEUE, NEXSQUEUE => NEXSQUEUE,
NRN => NEXSLOG); NRN => NEXSLOG);
/* Вернем добавленную запись */ /* Вернем добавленную запись */
LOG_GET(NFLAG_SMART => 0, NEXSLOG => NEXSLOG, RCLOG => RCLOG); LOG_GET(NFLAG_SMART => 0, NEXSLOG => NEXSLOG, RCLOG => RCLOG);
end LOG_PUT; end LOG_PUT;
/* Считывание сообщения из очереди */ /* Считывание сообщения из очереди */
@ -1324,11 +1324,11 @@ create or replace package body PKG_EXS as
and T.EXSSERVICEFN = F.RN and T.EXSSERVICEFN = F.RN
and F.PRN = S.RN; and F.PRN = S.RN;
end QUEUE_GET; end QUEUE_GET;
/* Считывание сообщения из очереди */ /* Считывание сообщения из очереди */
procedure QUEUE_GET procedure QUEUE_GET
( (
NFLAG_SMART in number, -- Ïðèçíàê âûäà÷è ñîîáùåíèÿ îá îøèáêå NFLAG_SMART in number, -- Признак выдачи сообщения об ошибке
NEXSQUEUE in number, -- Рег. номер записи очереди NEXSQUEUE in number, -- Рег. номер записи очереди
RCQUEUE out sys_refcursor -- Курсор с позицией очереди RCQUEUE out sys_refcursor -- Курсор с позицией очереди
) )
@ -1348,7 +1348,7 @@ create or replace package body PKG_EXS as
/* Чистим буфер */ /* Чистим буфер */
RNLIST_BASE_CLEAR(NIDENT => NIDENT); RNLIST_BASE_CLEAR(NIDENT => NIDENT);
end QUEUE_GET; end QUEUE_GET;
/* Проверка необходимости исполнения позиции очереди */ /* Проверка необходимости исполнения позиции очереди */
function QUEUE_SRV_TYPE_SEND_EXEC_CHECK function QUEUE_SRV_TYPE_SEND_EXEC_CHECK
( (
@ -1390,7 +1390,7 @@ create or replace package body PKG_EXS as
/* Вернём результат */ /* Вернём результат */
return NRESULT; return NRESULT;
end QUEUE_SRV_TYPE_SEND_EXEC_CHECK; end QUEUE_SRV_TYPE_SEND_EXEC_CHECK;
/* Считывание очередной порции исходящих сообщений из очереди */ /* Считывание очередной порции исходящих сообщений из очереди */
procedure QUEUE_SRV_TYPE_SEND_GET procedure QUEUE_SRV_TYPE_SEND_GET
( (
@ -1408,7 +1408,7 @@ create or replace package body PKG_EXS as
from (select T.RN from (select T.RN
from EXSQUEUE T from EXSQUEUE T
where QUEUE_SRV_TYPE_SEND_EXEC_CHECK(T.RN) = NQUEUE_EXEC_YES where QUEUE_SRV_TYPE_SEND_EXEC_CHECK(T.RN) = NQUEUE_EXEC_YES
order by NVL(T.EXEC_DATE, T.IN_DATE)) order by T.RN)
where ROWNUM <= NPORTION_SIZE) where ROWNUM <= NPORTION_SIZE)
loop loop
/* Запоминаем их рег. номера в буфере */ /* Запоминаем их рег. номера в буфере */
@ -1427,7 +1427,7 @@ create or replace package body PKG_EXS as
NEXEC_STATE in number, -- Устанавливаемое состояние (см. констнаты NQUEUE_EXEC_STATE_*, null - не менять) NEXEC_STATE in number, -- Устанавливаемое состояние (см. констнаты NQUEUE_EXEC_STATE_*, null - не менять)
SEXEC_MSG in varchar2, -- Сообщение обработчика SEXEC_MSG in varchar2, -- Сообщение обработчика
NINC_EXEC_CNT in number, -- Флаг инкремента счётчика исполнений (см. констнаты NINC_EXEC_CNT_*, null - не менять) NINC_EXEC_CNT in number, -- Флаг инкремента счётчика исполнений (см. констнаты NINC_EXEC_CNT_*, null - не менять)
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè RCQUEUE out sys_refcursor -- Курсор с изменённой позицией очереди
) )
is is
REXSQUEUE EXSQUEUE%rowtype; -- Запись позиции очереди REXSQUEUE EXSQUEUE%rowtype; -- Запись позиции очереди
@ -1475,13 +1475,13 @@ create or replace package body PKG_EXS as
/* Вернем измененную позицию очереди */ /* Вернем измененную позицию очереди */
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE); QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
end QUEUE_EXEC_STATE_SET; end QUEUE_EXEC_STATE_SET;
/* Установка результата обработки записи очереди */ /* Установка результата обработки записи очереди */
procedure QUEUE_RESP_SET procedure QUEUE_RESP_SET
( (
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè NEXSQUEUE in number, -- Рег. номер записи очереди
BRESP in blob, -- Результат обработки BRESP in blob, -- Результат обработки
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè RCQUEUE out sys_refcursor -- Курсор с изменённой позицией очереди
) )
is is
begin begin
@ -1493,13 +1493,13 @@ create or replace package body PKG_EXS as
/* Вернем измененную позицию очереди */ /* Вернем измененную позицию очереди */
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE); QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
end QUEUE_RESP_SET; end QUEUE_RESP_SET;
/* Установка сообщения записи очереди */ /* Установка сообщения записи очереди */
procedure QUEUE_MSG_SET procedure QUEUE_MSG_SET
( (
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè NEXSQUEUE in number, -- Рег. номер записи очереди
BMSG in blob, -- Результат обработки BMSG in blob, -- Результат обработки
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè RCQUEUE out sys_refcursor -- Курсор с изменённой позицией очереди
) )
is is
begin begin
@ -1518,7 +1518,7 @@ create or replace package body PKG_EXS as
NEXSSERVICEFN in number, -- Рег. номер функции обработки NEXSSERVICEFN in number, -- Рег. номер функции обработки
BMSG in blob, -- Данные BMSG in blob, -- Данные
NEXSQUEUE in number := null, -- Рег. номер связанной позиции очереди NEXSQUEUE in number := null, -- Рег. номер связанной позиции очереди
RCQUEUE out sys_refcursor -- Êóðñîð ñ äîáàâëåííîé ïîçèöèåé î÷åðåäè RCQUEUE out sys_refcursor -- Курсор с добавленной позицией очереди
) )
is is
NRN EXSQUEUE.RN%type; -- Рег. номер добавленной записи очереди NRN EXSQUEUE.RN%type; -- Рег. номер добавленной записи очереди
@ -1569,7 +1569,7 @@ create or replace package body PKG_EXS as
/* Ставим запись в очередь */ /* Ставим запись в очередь */
QUEUE_PUT(NEXSSERVICEFN => NEXSSERVICEFN, BMSG => BMSG, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE); QUEUE_PUT(NEXSSERVICEFN => NEXSSERVICEFN, BMSG => BMSG, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
end QUEUE_PUT; end QUEUE_PUT;
/* Исполнение обработчика для сообщения обмена */ /* Исполнение обработчика для сообщения обмена */
procedure QUEUE_PRC procedure QUEUE_PRC
( (
@ -1583,7 +1583,7 @@ create or replace package body PKG_EXS as
REXSMSGTYPE EXSMSGTYPE%rowtype; -- Запись типового сообщения обмена REXSMSGTYPE EXSMSGTYPE%rowtype; -- Запись типового сообщения обмена
SERR EXSQUEUE.EXEC_MSG%type; -- Сообщение об ошибке обработчика SERR EXSQUEUE.EXEC_MSG%type; -- Сообщение об ошибке обработчика
NIDENT PKG_STD.TREF; -- Идентификатор процесса обработки NIDENT PKG_STD.TREF; -- Идентификатор процесса обработки
PRMS PKG_CONTPRMLOC.TCONTAINER; -- Êîíòåéíåð äëÿ ïàðàìåòðîâ ïðîöåäóðû îáðàáîòêè PRMS PKG_CONTPRMLOC.TCONTAINER; -- Контейнер для параметров процедуры обработки
begin begin
/* Считаем запись очереди */ /* Считаем запись очереди */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE); REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
@ -1639,6 +1639,6 @@ create or replace package body PKG_EXS as
/* Возвращаем обработанную позицию очереди */ /* Возвращаем обработанную позицию очереди */
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => REXSQUEUE.RN, RCQUEUE => RCQUEUE); QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => REXSQUEUE.RN, RCQUEUE => RCQUEUE);
end QUEUE_PRC; end QUEUE_PRC;
end; end;
/ /