386 lines
18 KiB
SQL
386 lines
18 KiB
SQL
create or replace package PKG_P8PANELS_QE as
|
||
|
||
/* Получение списка запросов */
|
||
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_DESC
|
||
(
|
||
NRN in number, -- Рег. номер запроса
|
||
COUT out clob -- Сериализованное описание запроса
|
||
);
|
||
|
||
/* Добавление сущности в запрос */
|
||
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 -- Сериализованное описание атрибутов сущности
|
||
);
|
||
|
||
/* Добавление связи в запрос */
|
||
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_READY_SET
|
||
(
|
||
NRN in number, -- Рег. номер запроса
|
||
NREADY in number -- Флаг готовности к использованию (0 - нет, 1 - да)
|
||
);
|
||
|
||
/* Установка признака "публичности" запроса */
|
||
procedure QUERY_PBL_SET
|
||
(
|
||
NRN in number, -- Рег. номер запроса
|
||
NPBL in number -- Флаг публичности (0 - приватный, 1 - публичный)
|
||
);
|
||
|
||
end PKG_P8PANELS_QE;
|
||
/
|
||
create or replace package body PKG_P8PANELS_QE as
|
||
|
||
/* Получение списка запросов */
|
||
procedure QUERY_LIST
|
||
(
|
||
COUT out clob -- Сериализованный список запросов
|
||
)
|
||
is
|
||
begin
|
||
/* Базово сформируем список */
|
||
COUT := PKG_P8PANELS_QE_BASE.QUERY_LIST_GET(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_DESC
|
||
(
|
||
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_DESC_GET(NRN => NRN);
|
||
end QUERY_DESC;
|
||
|
||
/* Добавление сущности в запрос */
|
||
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; -- Коллекция существующих сущностей
|
||
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_APPEND(RENTS => RENTS, SNAME => SNAME, STYPE => STYPE);
|
||
/* Сохраняем обновленный набор сущностей */
|
||
PKG_P8PANELS_QE_BASE.QUERY_ENTS_SET(NRN => RQ.RN, RENTS => RENTS);
|
||
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; -- Коллекция существующих связей
|
||
RRLS_TMP PKG_P8PANELS_QE_BASE.TRLS; -- Буфер для коллекции удаляемых связей
|
||
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
|
||
/* Если атрибут есть в связях (как источник или как приёмник) */
|
||
for J in 0 .. 1
|
||
loop
|
||
RRLS_TMP := PKG_P8PANELS_QE_BASE.TRLS_LIST_BY_ST(RRLS => RRLS,
|
||
SSOURCE_TARGET => RENT.RATTRS(I).SID,
|
||
NLIST_TYPE => J);
|
||
/* То связь должна быть удалена */
|
||
if ((RRLS_TMP is not null) and (RRLS_TMP.COUNT > 0)) then
|
||
for K in RRLS_TMP.FIRST .. RRLS_TMP.LAST
|
||
loop
|
||
PKG_P8PANELS_QE_BASE.TRLS_REMOVE(RRLS => RRLS, SID => RRLS_TMP(K).SID);
|
||
end loop;
|
||
end if;
|
||
end loop;
|
||
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);
|
||
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 -- Сериализованное описание атрибутов сущности
|
||
)
|
||
is
|
||
begin
|
||
null;
|
||
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; -- Коллекция существующих связей
|
||
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_APPEND(RRLS => RRLS, SSOURCE => SSOURCE, STARGET => STARGET);
|
||
/* Сохраняем обновленный набор связей */
|
||
PKG_P8PANELS_QE_BASE.QUERY_RLS_SET(NRN => RQ.RN, RRLS => RRLS);
|
||
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; -- Коллекция существующих связей
|
||
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);
|
||
end QUERY_RL_REMOVE;
|
||
|
||
/* Установка признака "готовности" запроса */
|
||
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;
|
||
|
||
end PKG_P8PANELS_QE;
|
||
/
|