P8-Panels/db/PKG_P8PANELS_QE.pck

637 lines
33 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

create or replace package PKG_P8PANELS_QE as
/* Получение списка доступных сущностей */
procedure ENTITY_LIST
(
SSEARCH in varchar2, -- Поисковый запрос
COUT out clob -- Сериализованный список доступных сущностей
);
/* Получение данных о запросе */
procedure QUERY
(
NRN in number, -- Рег. номер запроса
COUT out clob -- Сериализованное описание запроса
);
/* Получение списка запросов */
procedure QUERY_LIST
(
COUT out clob -- Сериализованный список запросов
);
/* Добавление запроса */
procedure QUERY_INSERT
(
SCODE in varchar2, -- Мнемокод
SNAME in varchar2, -- Наименование
NRN out number -- Рег. номер добавленного запроса
);
/* Исправление запроса */
procedure QUERY_UPDATE
(
NRN in number, -- Рег. номер запроса
SCODE in varchar2, -- Мнемокод
SNAME in varchar2 -- Наименование
);
/* Удаление запроса */
procedure QUERY_DELETE
(
NRN in number -- Рег. номер запроса
);
/* Установка признака "готовности" запроса */
procedure QUERY_READY_SET
(
NRN in number, -- Рег. номер запроса
NREADY in number -- Флаг готовности к использованию (0 - нет, 1 - да)
);
/* Установка признака "публичности" запроса */
procedure QUERY_PBL_SET
(
NRN in number, -- Рег. номер запроса
NPBL in number -- Флаг публичности (0 - приватный, 1 - публичный)
);
/* Добавление сущности в запрос */
procedure QUERY_ENT_ADD
(
NRN in number, -- Рег. номер запроса
SNAME in varchar2, -- Имя
STYPE in varchar2 -- Тип (см. константы SENT_TYPE_*)
);
/* Удаление сущности из запроса */
procedure QUERY_ENT_REMOVE
(
NRN in number, -- Рег. номер запроса
SID in varchar2 -- Идентификатор сущности
);
/* Установка координат сущности в редакторе диаграммы запроса */
procedure QUERY_ENT_POSITION_SET
(
NRN in number, -- Рег. номер запроса
SID in varchar2, -- Идентификатор сущности
NX in number, -- Координата по оси абсцисс
NY in number -- Координата по оси ординат
);
/* Получение состава атрибутов сущности */
procedure QUERY_ENT_ATTRS_GET
(
NRN in number, -- Рег. номер запроса
SID in varchar2, -- Идентификатор сущности
COUT out clob -- Сериализованное описание атрибутов сущности
);
/* Установка состава атрибутов сущности */
procedure QUERY_ENT_ATTRS_SET
(
NRN in number, -- Рег. номер запроса
SID in varchar2, -- Идентификатор сущности
CATTRS in clob -- Сериализованное описание атрибутов сущности (BASE64 XML)
);
/* Добавление связи в запрос */
procedure QUERY_RL_ADD
(
NRN in number, -- Рег. номер запроса
SSOURCE in varchar2, -- Идентификатор атрибута-источника
STARGET in varchar2 -- Идентификатор атрибута-приёмника
);
/* Удаление связи из запроса */
procedure QUERY_RL_REMOVE
(
NRN in number, -- Рег. номер запроса
SID in varchar2 -- Идентификатор связи
);
/* Добавление аргумента запроса */
procedure QUERY_OPT_ARG_ADD
(
NRN in number, -- Рег. номер запроса
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
);
/* Изменение аргумента запроса */
procedure QUERY_OPT_ARG_EDIT
(
NRN in number, -- Рег. номер запроса
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
);
/* Удаление аргумента запроса */
procedure QUERY_OPT_ARG_REMOVE
(
NRN in number, -- Рег. номер запроса
SNAME in varchar2 -- Имя
);
/* Установка условий отбора запроса */
procedure QUERY_OPT_COND_SET
(
NRN in number, -- Рег. номер запроса
SCOND in varchar2 -- Условия отбора
);
end PKG_P8PANELS_QE;
/
create or replace package body PKG_P8PANELS_QE as
/* Константы - Минимальная длина поисковой фразы для сущностей */
NENT_MIN_SEARCH_LEN constant PKG_STD.TNUMBER := 3; -- Количество символов
/* Получение списка доступных сущностей */
procedure ENTITY_LIST
(
SSEARCH in varchar2, -- Поисковый запрос
COUT out clob -- Сериализованный список доступных сущностей
)
is
begin
/* Если фильтр задан и он нас утраивает */
if ((SSEARCH is not null) and (LENGTH(SSEARCH) >= NENT_MIN_SEARCH_LEN)) then
/* Получим список доступных сущностей */
COUT := PKG_P8PANELS_QE_BASE.ENTITY_LIST(SSEARCH => SSEARCH, NBRIEF => 1, NINCLUDE_ATTRS => 0);
end if;
end ENTITY_LIST;
/* Получение описания запроса */
procedure QUERY
(
NRN in number, -- Рег. номер запроса
COUT out clob -- Сериализованное описание запроса
)
is
begin
/* Проверим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_VIEW(NRN => NRN, SUSER => UTILIZER());
/* Получим описание запроса */
COUT := PKG_P8PANELS_QE_BASE.QUERY(NRN => NRN);
end QUERY;
/* Получение списка запросов */
procedure QUERY_LIST
(
COUT out clob -- Сериализованный список запросов
)
is
begin
/* Базово сформируем список */
COUT := PKG_P8PANELS_QE_BASE.QUERY_LIST(SUSER => UTILIZER());
end QUERY_LIST;
/* Добавление запроса */
procedure QUERY_INSERT
(
SCODE in varchar2, -- Мнемокод
SNAME in varchar2, -- Наименование
NRN out number -- Рег. номер добавленного запроса
)
is
begin
/* Базовое добавление */
PKG_P8PANELS_QE_BASE.QUERY_INSERT(SCODE => SCODE, SNAME => SNAME, NRN => NRN);
end QUERY_INSERT;
/* Исправление запроса */
procedure QUERY_UPDATE
(
NRN in number, -- Рег. номер запроса
SCODE in varchar2, -- Мнемокод
SNAME in varchar2 -- Наименование
)
is
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Базовое исправление */
PKG_P8PANELS_QE_BASE.QUERY_UPDATE(NRN => NRN, SCODE => SCODE, SNAME => SNAME);
end QUERY_UPDATE;
/* Удаление запроса */
procedure QUERY_DELETE
(
NRN in number -- Рег. номер запроса
)
is
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Базовое удаление */
PKG_P8PANELS_QE_BASE.QUERY_DELETE(NRN => NRN);
end QUERY_DELETE;
/* Установка признака "готовности" запроса */
procedure QUERY_READY_SET
(
NRN in number, -- Рег. номер запроса
NREADY in number -- Флаг готовности к использованию (0 - нет, 1 - да)
)
is
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Базовая установка признака готовности */
PKG_P8PANELS_QE_BASE.QUERY_READY_SET(NRN => NRN, NREADY => NREADY);
end QUERY_READY_SET;
/* Установка признака "публичности" запроса */
procedure QUERY_PBL_SET
(
NRN in number, -- Рег. номер запроса
NPBL in number -- Флаг публичности (0 - приватный, 1 - публичный)
)
is
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Базовая установка признака публичности */
PKG_P8PANELS_QE_BASE.QUERY_PBL_SET(NRN => NRN, NPBL => NPBL);
end QUERY_PBL_SET;
/* Добавление сущности в запрос */
procedure QUERY_ENT_ADD
(
NRN in number, -- Рег. номер запроса
SNAME in varchar2, -- Имя
STYPE in varchar2 -- Тип (см. константы SENT_TYPE_*)
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
RENTS PKG_P8PANELS_QE_BASE.TENTS; -- Коллекция существующих сущностей
SQRY PKG_STD.TLSTRING; -- SQL-выражение запроса
SQRY_MSG PKG_STD.TLSTRING; -- Сообщение при формировании SQL-выражения
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем существующие сущности */
RENTS := PKG_P8PANELS_QE_BASE.QUERY_ENTS_GET(CENTS => RQ.ENTS);
/* Формируем описание новой сущности и добавляем её в коллекцию */
PKG_P8PANELS_QE_BASE.TENTS_ADD(RENTS => RENTS, SNAME => SNAME, STYPE => STYPE);
/* Сохраняем обновленный набор сущностей */
PKG_P8PANELS_QE_BASE.QUERY_ENTS_SET(NRN => RQ.RN, RENTS => RENTS);
/* Переформируем SQL-выражение */
PKG_P8PANELS_QE_BASE.QUERY_SQL_BUILD(NRN => RQ.RN, SQRY => SQRY, SQRY_MSG => SQRY_MSG);
PKG_P8PANELS_QE_BASE.QUERY_QRY_SET(NRN => RQ.RN, CQRY => SQRY, CQRY_MSG => SQRY_MSG);
end QUERY_ENT_ADD;
/* Удаление сущности из запроса */
procedure QUERY_ENT_REMOVE
(
NRN in number, -- Рег. номер запроса
SID in varchar2 -- Идентификатор сущности
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
RENTS PKG_P8PANELS_QE_BASE.TENTS; -- Коллекция существующих сущностей
RENT PKG_P8PANELS_QE_BASE.TENT; -- Удаляемая сущность
RRLS PKG_P8PANELS_QE_BASE.TRLS; -- Коллекция существующих связей
SQRY PKG_STD.TLSTRING; -- SQL-выражение запроса
SQRY_MSG PKG_STD.TLSTRING; -- Сообщение при формировании SQL-выражения
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем существующие сущности */
RENTS := PKG_P8PANELS_QE_BASE.QUERY_ENTS_GET(CENTS => RQ.ENTS);
/* Читаем свзяи */
RRLS := PKG_P8PANELS_QE_BASE.QUERY_RLS_GET(CRLS => RQ.RLS);
/* Находим удаляемую сущность */
begin
RENT := RENTS(PKG_P8PANELS_QE_BASE.TENTS_INDEX_BY_ID(RENTS => RENTS, SID => SID));
exception
when VALUE_ERROR then
P_EXCEPTION(0,
'Сущность с идентификатором "%s" в запросе "%s" не определена.',
COALESCE(SID, '<НЕ УКАЗАН>'),
TO_CHAR(NRN));
end;
/* Удаляем сущность из коллекции */
PKG_P8PANELS_QE_BASE.TENTS_REMOVE(RENTS => RENTS, SID => SID);
/* Обходим атрибуты сущности */
if ((RENT.RATTRS is not null) and (RENT.RATTRS.COUNT > 0)) then
for I in RENT.RATTRS.FIRST .. RENT.RATTRS.LAST
loop
/* Удаляем связи в которых он задействован */
PKG_P8PANELS_QE_BASE.TRLS_CLEANUP_BY_ATTR(RRLS => RRLS, SATTR_ID => RENT.RATTRS(I).SID);
end loop;
end if;
/* Сохраняем обновленный набор сущностей */
PKG_P8PANELS_QE_BASE.QUERY_ENTS_SET(NRN => RQ.RN, RENTS => RENTS);
/* Сохраняем обновленный набор связей */
PKG_P8PANELS_QE_BASE.QUERY_RLS_SET(NRN => RQ.RN, RRLS => RRLS);
/* Переформируем SQL-выражение */
PKG_P8PANELS_QE_BASE.QUERY_SQL_BUILD(NRN => RQ.RN, SQRY => SQRY, SQRY_MSG => SQRY_MSG);
PKG_P8PANELS_QE_BASE.QUERY_QRY_SET(NRN => RQ.RN, CQRY => SQRY, CQRY_MSG => SQRY_MSG);
end QUERY_ENT_REMOVE;
/* Установка координат сущности в редакторе диаграммы запроса */
procedure QUERY_ENT_POSITION_SET
(
NRN in number, -- Рег. номер запроса
SID in varchar2, -- Идентификатор сущности
NX in number, -- Координата по оси абсцисс
NY in number -- Координата по оси ординат
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
RENTS PKG_P8PANELS_QE_BASE.TENTS; -- Коллекция существующих сущностей
begin
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Сохранять расположение будем только если это автор - так остальные могут перемещать на экране диаграмму, но не запоминать расположение сущностей */
if (RQ.AUTHOR = UTILIZER()) then
/* Читаем существующие сущности */
RENTS := PKG_P8PANELS_QE_BASE.QUERY_ENTS_GET(CENTS => RQ.ENTS);
/* Меняем координаты сущности в коллекции */
PKG_P8PANELS_QE_BASE.TENTS_POSITION_SET(RENTS => RENTS, SID => SID, NX => NX, NY => NY);
/* Сохраняем обновленный набор сущностей */
PKG_P8PANELS_QE_BASE.QUERY_ENTS_SET(NRN => RQ.RN, RENTS => RENTS);
end if;
end QUERY_ENT_POSITION_SET;
/* Получение состава атрибутов сущности */
procedure QUERY_ENT_ATTRS_GET
(
NRN in number, -- Рег. номер запроса
SID in varchar2, -- Идентификатор сущности
COUT out clob -- Сериализованное описание атрибутов сущности
)
is
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Сформируем описание атрибутов */
PKG_P8PANELS_QE_BASE.QUERY_ENT_ATTRS_GET(NRN => NRN, SID => SID, COUT => COUT);
end QUERY_ENT_ATTRS_GET;
/* Установка состава атрибутов сущности */
procedure QUERY_ENT_ATTRS_SET
(
NRN in number, -- Рег. номер запроса
SID in varchar2, -- Идентификатор сущности
CATTRS in clob -- Сериализованное описание атрибутов сущности (BASE64 XML)
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
RENTS PKG_P8PANELS_QE_BASE.TENTS; -- Коллекция существующих сущностей
NENT_INDEX PKG_STD.TNUMBER; -- Индекс изменяемой сущности
RATTRS PKG_P8PANELS_QE_BASE.TATTRS; -- Коллекция полученных атриубтов
RRLS PKG_P8PANELS_QE_BASE.TRLS; -- Коллекция существующих связей
SCHECK_MSG PKG_STD.TLSTRING; -- Сообщение при проверке атрибутов
SQRY PKG_STD.TLSTRING; -- SQL-выражение запроса
SQRY_MSG PKG_STD.TLSTRING; -- Сообщение при формировании SQL-выражения
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем существующие сущности */
RENTS := PKG_P8PANELS_QE_BASE.QUERY_ENTS_GET(CENTS => RQ.ENTS);
/* Читаем свзяи */
RRLS := PKG_P8PANELS_QE_BASE.QUERY_RLS_GET(CRLS => RQ.RLS);
/* Находим изменяемую сущность */
NENT_INDEX := PKG_P8PANELS_QE_BASE.TENTS_INDEX_BY_ID(RENTS => RENTS, SID => SID);
if (NENT_INDEX is null) then
P_EXCEPTION(0,
'Сущность с идентификатором "%s" в запросе "%s" не определена.',
COALESCE(SID, '<НЕ УКАЗАН>'),
TO_CHAR(NRN));
end if;
/* Десериализуем новый набор атрибутов */
RATTRS := PKG_P8PANELS_QE_BASE.TATTRS_FROM_XML_BASE64(CXML => CATTRS,
SCHARSET => PKG_CHARSET.CHARSET_UTF_(),
BADD_ROOT => true);
/* Сбросим текущие атрибуты сущности */
RENTS(NENT_INDEX).RATTRS := PKG_P8PANELS_QE_BASE.TATTRS();
/* Наполним полученными и зачистим связи */
if (RATTRS is not null) and (RATTRS.COUNT > 0) then
for I in RATTRS.FIRST .. RATTRS.LAST
loop
/* Если атрибут используется - кладём в обновленную коллекцию атрибутов сущности */
if (RATTRS(I).NUSE = 1) then
RENTS(NENT_INDEX).RATTRS.EXTEND();
RENTS(NENT_INDEX).RATTRS(RENTS(NENT_INDEX).RATTRS.LAST) := RATTRS(I);
else
/* Атрибут не используется - необходимо очистись связи в которых он задействован */
PKG_P8PANELS_QE_BASE.TRLS_CLEANUP_BY_ATTR(RRLS => RRLS, SATTR_ID => RATTRS(I).SID);
end if;
end loop;
end if;
/* Проверим, что новый набор атрибутов сущности корректен */
PKG_P8PANELS_QE_BASE.TATTRS_CHECK(RATTRS => RENTS(NENT_INDEX).RATTRS, SCHECK_MSG => SCHECK_MSG);
if (SCHECK_MSG is not null) then
P_EXCEPTION(0, SCHECK_MSG);
end if;
/* Сохраняем обновленный набор сущностей */
PKG_P8PANELS_QE_BASE.QUERY_ENTS_SET(NRN => RQ.RN, RENTS => RENTS);
/* Сохраняем обновленный набор связей */
PKG_P8PANELS_QE_BASE.QUERY_RLS_SET(NRN => RQ.RN, RRLS => RRLS);
/* Переформируем SQL-выражение */
PKG_P8PANELS_QE_BASE.QUERY_SQL_BUILD(NRN => RQ.RN, SQRY => SQRY, SQRY_MSG => SQRY_MSG);
PKG_P8PANELS_QE_BASE.QUERY_QRY_SET(NRN => RQ.RN, CQRY => SQRY, CQRY_MSG => SQRY_MSG);
end QUERY_ENT_ATTRS_SET;
/* Добавление связи в запрос */
procedure QUERY_RL_ADD
(
NRN in number, -- Рег. номер запроса
SSOURCE in varchar2, -- Идентификатор атрибута-источника
STARGET in varchar2 -- Идентификатор атрибута-приёмника
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
RRLS PKG_P8PANELS_QE_BASE.TRLS; -- Коллекция существующих связей
SQRY PKG_STD.TLSTRING; -- SQL-выражение запроса
SQRY_MSG PKG_STD.TLSTRING; -- Сообщение при формировании SQL-выражения
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем существующие связи */
RRLS := PKG_P8PANELS_QE_BASE.QUERY_RLS_GET(CRLS => RQ.RLS);
/* Формируем описание новой связи и добавляем её в коллекцию */
PKG_P8PANELS_QE_BASE.TRLS_ADD(RRLS => RRLS, SSOURCE => SSOURCE, STARGET => STARGET);
/* Сохраняем обновленный набор связей */
PKG_P8PANELS_QE_BASE.QUERY_RLS_SET(NRN => RQ.RN, RRLS => RRLS);
/* Переформируем SQL-выражение */
PKG_P8PANELS_QE_BASE.QUERY_SQL_BUILD(NRN => RQ.RN, SQRY => SQRY, SQRY_MSG => SQRY_MSG);
PKG_P8PANELS_QE_BASE.QUERY_QRY_SET(NRN => RQ.RN, CQRY => SQRY, CQRY_MSG => SQRY_MSG);
end QUERY_RL_ADD;
/* Удаление связи из запроса */
procedure QUERY_RL_REMOVE
(
NRN in number, -- Рег. номер запроса
SID in varchar2 -- Идентификатор связи
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
RRLS PKG_P8PANELS_QE_BASE.TRLS; -- Коллекция существующих связей
SQRY PKG_STD.TLSTRING; -- SQL-выражение запроса
SQRY_MSG PKG_STD.TLSTRING; -- Сообщение при формировании SQL-выражения
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем существующие связи */
RRLS := PKG_P8PANELS_QE_BASE.QUERY_RLS_GET(CRLS => RQ.RLS);
/* Удаляем связи из коллекции */
PKG_P8PANELS_QE_BASE.TRLS_REMOVE(RRLS => RRLS, SID => SID);
/* Сохраняем обновленный набор связей */
PKG_P8PANELS_QE_BASE.QUERY_RLS_SET(NRN => RQ.RN, RRLS => RRLS);
/* Переформируем SQL-выражение */
PKG_P8PANELS_QE_BASE.QUERY_SQL_BUILD(NRN => RQ.RN, SQRY => SQRY, SQRY_MSG => SQRY_MSG);
PKG_P8PANELS_QE_BASE.QUERY_QRY_SET(NRN => RQ.RN, CQRY => SQRY, CQRY_MSG => SQRY_MSG);
end QUERY_RL_REMOVE;
/* Добавление аргумента запроса */
procedure QUERY_OPT_ARG_ADD
(
NRN in number, -- Рег. номер запроса
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
ROPT PKG_P8PANELS_QE_BASE.TOPT; -- Настройка запроса
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем текущую настройку */
ROPT := PKG_P8PANELS_QE_BASE.QUERY_OPT_GET(COPT => RQ.OPT);
/* Добавляем аргумент в коллекцию */
PKG_P8PANELS_QE_BASE.TARGS_ADD(RARGS => ROPT.RARGS,
SNAME => SNAME,
STITLE => STITLE,
NDATA_TYPE => NDATA_TYPE,
NMANDATORY => NMANDATORY,
SVALUE => SVALUE);
/* Сохраняем обновленную настройку */
PKG_P8PANELS_QE_BASE.QUERY_OPT_SET(NRN => RQ.RN, ROPT => ROPT);
end QUERY_OPT_ARG_ADD;
/* Изменение аргумента запроса */
procedure QUERY_OPT_ARG_EDIT
(
NRN in number, -- Рег. номер запроса
SNAME in varchar2, -- Имя
STITLE in varchar2, -- Заголовок
NDATA_TYPE in number, -- Тип данных (см. константы PKG_STD.DATA_TYPE_*)
NMANDATORY in number, -- Флаг обязательности (1 - да, 0 - нет)
SVALUE in varchar2 -- Значение для отладки (строковое представление для всех типов данных)
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
ROPT PKG_P8PANELS_QE_BASE.TOPT; -- Настройка запроса
NINDEX PKG_STD.TNUMBER; -- Индекс изменяемого аргумента в коллекции
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем текущую настройку */
ROPT := PKG_P8PANELS_QE_BASE.QUERY_OPT_GET(COPT => RQ.OPT);
/* Находим изменяемый аргумент */
NINDEX := PKG_P8PANELS_QE_BASE.TARGS_INDEX_BY_NAME(RARGS => ROPT.RARGS, SNAME => SNAME);
if (NINDEX is null) then
P_EXCEPTION(0,
'Аргумент с именем "%s" в запросе "%s" не определен.',
COALESCE(SNAME, '<НЕ УКАЗАН>'),
TO_CHAR(NRN));
end if;
/* Изменяем аргумент в коллекции */
PKG_P8PANELS_QE_BASE.TARGS_EDIT(RARGS => ROPT.RARGS,
NINDEX => NINDEX,
SNAME => SNAME,
STITLE => STITLE,
NDATA_TYPE => NDATA_TYPE,
NMANDATORY => NMANDATORY,
SVALUE => SVALUE);
/* Сохраняем обновленную настройку */
PKG_P8PANELS_QE_BASE.QUERY_OPT_SET(NRN => RQ.RN, ROPT => ROPT);
end QUERY_OPT_ARG_EDIT;
/* Удаление аргумента запроса */
procedure QUERY_OPT_ARG_REMOVE
(
NRN in number, -- Рег. номер запроса
SNAME in varchar2 -- Имя
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
ROPT PKG_P8PANELS_QE_BASE.TOPT; -- Настройка запроса
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем текущую настройку */
ROPT := PKG_P8PANELS_QE_BASE.QUERY_OPT_GET(COPT => RQ.OPT);
/* Находим удаляемый аргумент */
if (PKG_P8PANELS_QE_BASE.TARGS_INDEX_BY_NAME(RARGS => ROPT.RARGS, SNAME => SNAME) is null) then
P_EXCEPTION(0,
'Аргумент с именем "%s" в запросе "%s" не определен.',
COALESCE(SNAME, '<НЕ УКАЗАН>'),
TO_CHAR(NRN));
end if;
/* Удаляем аргумент из коллекции */
PKG_P8PANELS_QE_BASE.TARGS_REMOVE(RARGS => ROPT.RARGS, SNAME => SNAME);
/* Сохраняем обновленную настройку */
PKG_P8PANELS_QE_BASE.QUERY_OPT_SET(NRN => RQ.RN, ROPT => ROPT);
end QUERY_OPT_ARG_REMOVE;
/* Установка условий отбора запроса */
procedure QUERY_OPT_COND_SET
(
NRN in number, -- Рег. номер запроса
SCOND in varchar2 -- Условия отбора
)
is
RQ P8PNL_QE_QUERY%rowtype; -- Запись запроса
ROPT PKG_P8PANELS_QE_BASE.TOPT; -- Настройка запроса
SQRY PKG_STD.TLSTRING; -- SQL-выражение запроса
SQRY_MSG PKG_STD.TLSTRING; -- Сообщение при формировании SQL-выражения
begin
/* Провим права доступа */
PKG_P8PANELS_QE_BASE.QUERY_ACCESS_MODIFY(NRN => NRN, SUSER => UTILIZER());
/* Читаем запись запроса */
RQ := PKG_P8PANELS_QE_BASE.QUERY_GET(NRN => NRN);
/* Читаем текущую настройку */
ROPT := PKG_P8PANELS_QE_BASE.QUERY_OPT_GET(COPT => RQ.OPT);
/* Установим новые условия отбора */
ROPT.SCOND := SCOND;
/* Сохраняем обновленную настройку */
PKG_P8PANELS_QE_BASE.QUERY_OPT_SET(NRN => RQ.RN, ROPT => ROPT);
/* Переформируем SQL-выражение */
PKG_P8PANELS_QE_BASE.QUERY_SQL_BUILD(NRN => RQ.RN, SQRY => SQRY, SQRY_MSG => SQRY_MSG);
PKG_P8PANELS_QE_BASE.QUERY_QRY_SET(NRN => RQ.RN, CQRY => SQRY, CQRY_MSG => SQRY_MSG);
end QUERY_OPT_COND_SET;
end PKG_P8PANELS_QE;
/