P8-Panels/db/PKG_P8PANELS_QE.pck

386 lines
18 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 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;
/