БД: BASE, MECHREC, SAMPLES - совместимость с PG, в BASE удалена трассировка

This commit is contained in:
Mikhail Chechnev 2024-02-26 13:10:17 +03:00
parent 7ef89565de
commit 12bb34b0e2
3 changed files with 168 additions and 233 deletions

View File

@ -168,7 +168,9 @@ create or replace package body PKG_P8PANELS_BASE as
SRES := SDATA_TYPE_CLOB; SRES := SDATA_TYPE_CLOB;
/* Неизвестный тип данных */ /* Неизвестный тип данных */
else else
P_EXCEPTION(0, 'Тип данных "%s" не поддерживается.', TO_CHAR(NSTD_DATA_TYPE)); P_EXCEPTION(0,
'Тип данных "%s" не поддерживается.',
COALESCE(TO_CHAR(NSTD_DATA_TYPE), '<НЕ ОПРЕДЕЛЁН>'));
end case; end case;
/* Возвращаем результат */ /* Возвращаем результат */
return SRES; return SRES;
@ -753,7 +755,7 @@ create or replace package body PKG_P8PANELS_BASE as
RNODE02 => PKG_XMAKE.ELEMENT(ICURSOR => XRESP, RNODE02 => PKG_XMAKE.ELEMENT(ICURSOR => XRESP,
SNAME => SRESP_TAG_SDATA_TYPE, SNAME => SRESP_TAG_SDATA_TYPE,
RVALUE00 => PKG_XMAKE.VALUE(ICURSOR => XRESP, RVALUE00 => PKG_XMAKE.VALUE(ICURSOR => XRESP,
SVALUE => STD_DATA_TYPE_TO_STR(NSTD_DATA_TYPE => RARG_VAL.DATA_TYPE))))); SVALUE => STD_DATA_TYPE_TO_STR(NSTD_DATA_TYPE => RARG.DATA_TYPE)))));
end if; end if;
/* Считываем наименование следующего параметра */ /* Считываем наименование следующего параметра */
SARG_NAME := PKG_CONTPRMLOC.NEXT_(RCONTAINER => ARGS_VALS, SNAME => SARG_NAME); SARG_NAME := PKG_CONTPRMLOC.NEXT_(RCONTAINER => ARGS_VALS, SNAME => SARG_NAME);
@ -796,7 +798,6 @@ create or replace package body PKG_P8PANELS_BASE as
XRQ_ROOT PKG_XPATH.TNODE; -- Корневой элемент тела документа запроса XRQ_ROOT PKG_XPATH.TNODE; -- Корневой элемент тела документа запроса
SRQ_ACTION PKG_STD.TSTRING; -- Код действия из запроса SRQ_ACTION PKG_STD.TSTRING; -- Код действия из запроса
begin begin
PKG_TRACE.REGISTER(SDATA => 'P8PANELS', SDATA1 => CIN);
/* Разбираем запрос */ /* Разбираем запрос */
XRQ_ROOT := RQ_ROOT_GET(CRQ => CIN); XRQ_ROOT := RQ_ROOT_GET(CRQ => CIN);
/* Считываем код действия из запроса */ /* Считываем код действия из запроса */

View File

@ -123,14 +123,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */
UR.ROLEID UR.ROLEID
from USERROLES UR from USERROLES UR
where UR.AUTHID = UTILIZER) where UR.AUTHID = UTILIZER())
union all union all
select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
null null
from USERPRIV UP from USERPRIV UP
where UP.JUR_PERS = P.JUR_PERS where UP.JUR_PERS = P.JUR_PERS
and UP.UNITCODE = 'CostProductPlans' and UP.UNITCODE = 'CostProductPlans'
and UP.AUTHID = UTILIZER) and UP.AUTHID = UTILIZER())
and T.PRN = P.RN) TMP and T.PRN = P.RN) TMP
connect by prior TMP.RN = TMP.UP_LEVEL connect by prior TMP.RN = TMP.UP_LEVEL
start with TMP.UP_LEVEL is null; start with TMP.UP_LEVEL is null;
@ -204,25 +204,6 @@ create or replace package body PKG_P8PANELS_MECHREC as
DDATE_FROM PKG_STD.TLDATE; -- Дата запуска спецификации DDATE_FROM PKG_STD.TLDATE; -- Дата запуска спецификации
DDATE_TO PKG_STD.TLDATE; -- Дата выпуска спецификации DDATE_TO PKG_STD.TLDATE; -- Дата выпуска спецификации
STASK_CAPTION PKG_STD.TSTRING; -- Описание задачи в Ганте STASK_CAPTION PKG_STD.TSTRING; -- Описание задачи в Ганте
CSQL clob; -- Буфер для запроса
ICURSOR integer; -- Курсор для исполнения запроса
/* Значения спецификации */
NTASK_RN PKG_STD.TREF; -- Рег. номер спецификации
NTASK_PRN PKG_STD.TREF; -- Рег. номер родителя спецификации
STASK_PROD_ORDER PKG_STD.TSTRING; -- Заказ
DTASK_REP_DATE PKG_STD.TLDATE; -- Дата запуска
DTASK_REP_DATE_TO PKG_STD.TLDATE; -- Дата выпуска
DTASK_INCL_DATE PKG_STD.TLDATE; -- Дата включения в план
STASK_ROUTE PKG_STD.TSTRING; -- Маршрут
STASK_NOMEN_NAME PKG_STD.TSTRING; -- Наименование номенклатуры
NTASK_DEFRESLIZ number; -- Дефицит запуска
NTASK_REL_FACT number; -- Выпуск факт
NTASK_DEFSTART number; -- Дефицит выпуска
NTASK_MAIN_QUANT number; -- Выпуск
STASK_SUBDIV_DLVR PKG_STD.TSTRING; -- Сдающее подразделение
NTASK_HAVE_LINK PKG_STD.TNUMBER; -- Наличие ссылок (0 - нет, 1 - да)
NTASK_UP_LEVEL PKG_STD.TREF; -- Рег. номер родительской записи в иерархии
NTASK_LEVEL PKG_STD.TNUMBER; -- Уровень в иерархии
/* Объединение значений в строковое представление */ /* Объединение значений в строковое представление */
function MAKE_INFO function MAKE_INFO
@ -356,8 +337,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Определяем максимальный уровень иерархии */ /* Определяем максимальный уровень иерархии */
NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN); NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN);
/* Обходим данные */ /* Обходим данные */
begin for C in (select TMP.*,
CSQL := 'select TMP.*,
level NTASK_LEVEL level NTASK_LEVEL
from (select T.RN NRN, from (select T.RN NRN,
T.PRN NPRN, T.PRN NPRN,
@ -374,113 +354,65 @@ create or replace package body PKG_P8PANELS_MECHREC as
(select IDD.CODE from INS_DEPARTMENT IDD where IDD.RN = T.SUBDIV_DLVR) SSUBDIV_DLVR, (select IDD.CODE from INS_DEPARTMENT IDD where IDD.RN = T.SUBDIV_DLVR) SSUBDIV_DLVR,
(select 1 (select 1
from DUAL from DUAL
where exists where exists (select null
(select null
from DOCLINKS L from DOCLINKS L
where L.IN_DOCUMENT = T.RN where L.IN_DOCUMENT = T.RN
and L.IN_UNITCODE = ''CostProductPlansSpecs'' and L.IN_UNITCODE = 'CostProductPlansSpecs'
and (L.OUT_UNITCODE = ''CostRouteLists'' or L.OUT_UNITCODE = ''IncomFromDeps'') and (L.OUT_UNITCODE = 'CostRouteLists' or L.OUT_UNITCODE = 'IncomFromDeps')
and ROWNUM = 1)) NHAVE_LINK, and ROWNUM = 1)) NHAVE_LINK,
T.UP_LEVEL NUP_LEVEL T.UP_LEVEL NUP_LEVEL,
case SSORT_FIELD
when 'DREP_DATE_TO' then
T.REP_DATE_TO
else
T.REP_DATE
end DORDER_DATE
from FCPRODPLAN P, from FCPRODPLAN P,
FINSTATE FS, FINSTATE FS,
FCPRODPLANSP T, FCPRODPLANSP T,
FCMATRESOURCE FM, FCMATRESOURCE FM,
DICNOMNS D DICNOMNS D
where P.CRN = :NCRN where P.CRN = NCRN
and P.CATEGORY = :NFCPRODPLAN_CATEGORY and P.CATEGORY = NFCPRODPLAN_CATEGORY
and P.STATUS = :NFCPRODPLAN_STATUS and P.STATUS = NFCPRODPLAN_STATUS
and FS.RN = P.TYPE and FS.RN = P.TYPE
and FS.CODE = :SFCPRODPLAN_TYPE and FS.CODE = SFCPRODPLAN_TYPE
and exists and exists
(select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */ (select /*+ INDEX(UP I_USERPRIV_JUR_PERS_ROLEID) */
null null
from USERPRIV UP from USERPRIV UP
where UP.JUR_PERS = P.JUR_PERS where UP.JUR_PERS = P.JUR_PERS
and UP.UNITCODE = ''CostProductPlans'' and UP.UNITCODE = 'CostProductPlans'
and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */
UR.ROLEID UR.ROLEID
from USERROLES UR from USERROLES UR
where UR.AUTHID = UTILIZER) where UR.AUTHID = UTILIZER())
union all union all
select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
null null
from USERPRIV UP from USERPRIV UP
where UP.JUR_PERS = P.JUR_PERS where UP.JUR_PERS = P.JUR_PERS
and UP.UNITCODE = ''CostProductPlans'' and UP.UNITCODE = 'CostProductPlans'
and UP.AUTHID = UTILIZER) and UP.AUTHID = UTILIZER())
and T.PRN = P.RN and T.PRN = P.RN
and ((T.REP_DATE is not null) or (T.REP_DATE_TO is not null) or (T.INCL_DATE is not null)) and ((T.REP_DATE is not null) or (T.REP_DATE_TO is not null) or (T.INCL_DATE is not null))
and FM.RN = T.MATRES and FM.RN = T.MATRES
and D.RN = FM.NOMENCLATURE) TMP and D.RN = FM.NOMENCLATURE) TMP
where ((:NLEVEL is null) or ((:NLEVEL is not null) and (level <= :NLEVEL))) where ((NLEVEL is null) or ((NLEVEL is not null) and (level <= NLEVEL)))
connect by prior TMP.NRN = TMP.NUP_LEVEL connect by prior TMP.NRN = TMP.NUP_LEVEL
start with TMP.NUP_LEVEL is null start with TMP.NUP_LEVEL is null
order siblings by TMP.%SORT_FIELD% asc'; order siblings by TMP.DORDER_DATE asc)
/* Подставляем поле сортировки */
CSQL := replace(CSQL, '%SORT_FIELD%', SSORT_FIELD);
/* Разбираем его */
ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT');
PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL);
/* Делаем подстановку параметров */
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCRN', NVALUE => NCRN);
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR,
SNAME => 'NFCPRODPLAN_CATEGORY',
NVALUE => NFCPRODPLAN_CATEGORY);
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCPRODPLAN_STATUS', NVALUE => NFCPRODPLAN_STATUS);
PKG_SQL_DML.BIND_VARIABLE_STR(ICURSOR => ICURSOR, SNAME => 'SFCPRODPLAN_TYPE', SVALUE => SFCPRODPLAN_TYPE);
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NLEVEL', NVALUE => NLEVEL);
/* Описываем структуру записи курсора */
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 2);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3);
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 4);
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 5);
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 6);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 7);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 8);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 9);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 10);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 11);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 12);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 13);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 14);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 15);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 16);
/* Делаем выборку */
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
null;
end if;
/* Обходим выбранные записи */
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
loop loop
/* Читаем данные из курсора */
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NTASK_RN);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 2, NVALUE => NTASK_PRN);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 3, SVALUE => STASK_PROD_ORDER);
PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 4, DVALUE => DTASK_REP_DATE);
PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 5, DVALUE => DTASK_REP_DATE_TO);
PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 6, DVALUE => DTASK_INCL_DATE);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 7, SVALUE => STASK_ROUTE);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 8, SVALUE => STASK_NOMEN_NAME);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 9, NVALUE => NTASK_DEFRESLIZ);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 10, NVALUE => NTASK_REL_FACT);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 11, NVALUE => NTASK_DEFSTART);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 12, NVALUE => NTASK_MAIN_QUANT);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 13, SVALUE => STASK_SUBDIV_DLVR);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 14, NVALUE => NTASK_HAVE_LINK);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 15, NVALUE => NTASK_UP_LEVEL);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 16, NVALUE => NTASK_LEVEL);
/* Формируем описание задачи в Ганте */ /* Формируем описание задачи в Ганте */
STASK_CAPTION := MAKE_INFO(SPROD_ORDER => STASK_PROD_ORDER, STASK_CAPTION := MAKE_INFO(SPROD_ORDER => C.SPROD_ORDER,
SNOMEN_NAME => STASK_NOMEN_NAME, SNOMEN_NAME => C.SNOMEN_NAME,
SSUBDIV_DLVR => STASK_SUBDIV_DLVR, SSUBDIV_DLVR => C.SSUBDIV_DLVR,
NMAIN_QUANT => NTASK_MAIN_QUANT); NMAIN_QUANT => C.NMAIN_QUANT);
/* Инициализируем даты и цвет (если необходимо) */ /* Инициализируем даты и цвет (если необходимо) */
FCPRODPLANSP_DATES_GET(DREP_DATE => DTASK_REP_DATE, FCPRODPLANSP_DATES_GET(DREP_DATE => C.DREP_DATE,
DREP_DATE_TO => DTASK_REP_DATE_TO, DREP_DATE_TO => C.DREP_DATE_TO,
DINCL_DATE => DTASK_INCL_DATE, DINCL_DATE => C.DINCL_DATE,
NHAVE_LINK => COALESCE(NTASK_HAVE_LINK, 0), NHAVE_LINK => COALESCE(C.NHAVE_LINK, 0),
DDATE_FROM => DDATE_FROM, DDATE_FROM => DDATE_FROM,
DDATE_TO => DDATE_TO, DDATE_TO => DDATE_TO,
STASK_BG_COLOR => STASK_BG_COLOR, STASK_BG_COLOR => STASK_BG_COLOR,
@ -489,18 +421,18 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Если цвет изначально не указан и требуется анализирование */ /* Если цвет изначально не указан и требуется анализирование */
if (STASK_BG_COLOR is null) then if (STASK_BG_COLOR is null) then
/* Формирование характеристик элемента ганта */ /* Формирование характеристик элемента ганта */
MAKE_GANT_ITEM(NDEFRESLIZ => NTASK_DEFRESLIZ, MAKE_GANT_ITEM(NDEFRESLIZ => C.NDEFRESLIZ,
NREL_FACT => NTASK_REL_FACT, NREL_FACT => C.NREL_FACT,
NDEFSTART => NTASK_DEFSTART, NDEFSTART => C.NDEFSTART,
STASK_BG_COLOR => STASK_BG_COLOR, STASK_BG_COLOR => STASK_BG_COLOR,
STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR,
NTASK_PROGRESS => NTASK_PROGRESS); NTASK_PROGRESS => NTASK_PROGRESS);
end if; end if;
/* Сформируем основную спецификацию */ /* Сформируем основную спецификацию */
RGT := PKG_P8PANELS_VISUAL.TGANTT_TASK_MAKE(NRN => NTASK_RN, RGT := PKG_P8PANELS_VISUAL.TGANTT_TASK_MAKE(NRN => C.NRN,
SNUMB => COALESCE(STASK_ROUTE, 'Отсутствует'), SNUMB => COALESCE(C.SROUTE, 'Отсутствует'),
SCAPTION => STASK_CAPTION, SCAPTION => STASK_CAPTION,
SNAME => STASK_NOMEN_NAME, SNAME => C.SNOMEN_NAME,
DSTART => DDATE_FROM, DSTART => DDATE_FROM,
DEND => DDATE_TO, DEND => DDATE_TO,
NPROGRESS => NTASK_PROGRESS, NPROGRESS => NTASK_PROGRESS,
@ -513,19 +445,19 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Заполним значение динамических атрибутов */ /* Заполним значение динамических атрибутов */
FILL_TASK_ATTRS(RG => RG, FILL_TASK_ATTRS(RG => RG,
RGT => RGT, RGT => RGT,
SPROD_ORDER => STASK_PROD_ORDER, SPROD_ORDER => C.SPROD_ORDER,
SSUBDIV_DLVR => STASK_SUBDIV_DLVR, SSUBDIV_DLVR => C.SSUBDIV_DLVR,
NMAIN_QUANT => NTASK_MAIN_QUANT, NMAIN_QUANT => C.NMAIN_QUANT,
NDEFRESLIZ => NTASK_DEFRESLIZ, NDEFRESLIZ => C.NDEFRESLIZ,
NREL_FACT => NTASK_REL_FACT, NREL_FACT => C.NREL_FACT,
NDEFSTART => NTASK_DEFSTART, NDEFSTART => C.NDEFSTART,
NLEVEL => NTASK_LEVEL); NLEVEL => C.NTASK_LEVEL);
/* Собираем зависимости */ /* Собираем зависимости */
for LINK in (select T.RN for LINK in (select T.RN
from FCPRODPLANSP T from FCPRODPLANSP T
where T.PRN = NTASK_PRN where T.PRN = C.NPRN
and T.UP_LEVEL = NTASK_RN and T.UP_LEVEL = C.NRN
and ((NLEVEL is null) or ((NLEVEL is not null) and (NLEVEL >= NTASK_LEVEL + 1)))) and ((NLEVEL is null) or ((NLEVEL is not null) and (NLEVEL >= C.NTASK_LEVEL + 1))))
loop loop
/* Добавляем зависимости */ /* Добавляем зависимости */
PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY(RTASK => RGT, NDEPENDENCY => LINK.RN); PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_DEPENDENCY(RTASK => RGT, NDEPENDENCY => LINK.RN);
@ -533,13 +465,6 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Добавляем основную спецификацию в диаграмму */ /* Добавляем основную спецификацию в диаграмму */
PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK(RGANTT => RG, RTASK => RGT); PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK(RGANTT => RG, RTASK => RGT);
end loop; end loop;
/* Освобождаем курсор */
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
exception
when others then
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
raise;
end;
/* Формируем список */ /* Формируем список */
COUT := PKG_P8PANELS_VISUAL.TGANTT_TO_XML(RGANTT => RG); COUT := PKG_P8PANELS_VISUAL.TGANTT_TO_XML(RGANTT => RG);
end FCPRODPLANSP_GET; end FCPRODPLANSP_GET;
@ -575,14 +500,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */
UR.ROLEID UR.ROLEID
from USERROLES UR from USERROLES UR
where UR.AUTHID = UTILIZER) where UR.AUTHID = UTILIZER())
union all union all
select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */ select /*+ INDEX(UP I_USERPRIV_JUR_PERS_AUTHID) */
null null
from USERPRIV UP from USERPRIV UP
where UP.JUR_PERS = P.JUR_PERS where UP.JUR_PERS = P.JUR_PERS
and UP.UNITCODE = 'CostProductPlans' and UP.UNITCODE = 'CostProductPlans'
and UP.AUTHID = UTILIZER)) as NCOUNT_DOCS and UP.AUTHID = UTILIZER())) as NCOUNT_DOCS
from ACATALOG T, from ACATALOG T,
UNITLIST UL UNITLIST UL
where T.DOCNAME = 'CostProductPlans' where T.DOCNAME = 'CostProductPlans'

View File

@ -74,7 +74,9 @@ create or replace package body PKG_P8PANELS_SAMPLES as
NVERSION := GET_SESSION_VERSION(SUNITCODE => 'AGNLIST'); NVERSION := GET_SESSION_VERSION(SUNITCODE => 'AGNLIST');
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
PKG_XFAST.DOWN_NODE(SNAME => 'DATA'); PKG_XFAST.DOWN_NODE(SNAME => 'DATA');
for C in (select D.* for C in (select TMP.*
from (select D.*,
ROWNUM NROWNUM
from (select T.RN NRN, from (select T.RN NRN,
T.AGNABBR SAGNABBR, T.AGNABBR SAGNABBR,
T.AGNNAME SAGNNAME T.AGNNAME SAGNNAME
@ -94,8 +96,8 @@ create or replace package body PKG_P8PANELS_SAMPLES as
from USERPRIV UP from USERPRIV UP
where UP.CATALOG = T.CRN where UP.CATALOG = T.CRN
and UP.AUTHID = UTILIZER) and UP.AUTHID = UTILIZER)
order by T.RN desc) D order by T.RN desc) D) TMP
where ROWNUM <= 10) where TMP.NROWNUM <= 10)
loop loop
PKG_XFAST.DOWN_NODE(SNAME => 'AGENTS'); PKG_XFAST.DOWN_NODE(SNAME => 'AGENTS');
PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => C.NRN); PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => C.NRN);
@ -301,16 +303,22 @@ create or replace package body PKG_P8PANELS_SAMPLES as
/* Собираем запрос */ /* Собираем запрос */
CSQL := 'select * CSQL := 'select *
from (select D.*, from (select D.*,
ROWNUM NROW %ROWNUM% NROW
from (select AG.AGNABBR SAGNABBR, from (select AG.AGNABBR SAGNABBR,
AG.AGNNAME SAGNNAME, AG.AGNNAME SAGNNAME,
AG.AGNTYPE NAGNTYPE AG.AGNTYPE NAGNTYPE
from AGNLIST AG from AGNLIST AG
where exists (select /*+ INDEX(UP I_USERPRIV_CATALOG_ROLEID) */ null from USERPRIV UP where UP.CATALOG = AG.CRN and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ UR.ROLEID from USERROLES UR where UR.AUTHID = UTILIZER) where exists (select /*+ INDEX(UP I_USERPRIV_CATALOG_ROLEID) */ null from USERPRIV UP where UP."CATALOG" = AG.CRN and UP.ROLEID in (select /*+ INDEX(UR I_USERROLES_AUTHID_FK) */ UR.ROLEID from USERROLES UR where UR.AUTHID = UTILIZER())
union all union all
select /*+ INDEX(UP I_USERPRIV_CATALOG_AUTHID) */ null from USERPRIV UP where UP.CATALOG = AG.CRN and UP.AUTHID = UTILIZER) select /*+ INDEX(UP I_USERPRIV_CATALOG_AUTHID) */ null from USERPRIV UP where UP."CATALOG" = AG.CRN and UP.AUTHID = UTILIZER())
and AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F and AG.RN in (select ID from COND_BROKER_IDSMART where IDENT = :NIDENT) %ORDER_BY%) D) F
where F.NROW between :NROW_FROM and :NROW_TO'; where F.NROW between :NROW_FROM and :NROW_TO';
/* Корректировка запроса под СУБД */
if (PKG_COMPATIBLE.DATABASE_() = 0) then
CSQL := replace(csql, '%ROWNUM%', 'ROWNUM');
else
CSQL := replace(csql, '%ROWNUM%', '(row_number() over())::numeric');
end if;
/* Учтём сортировки */ /* Учтём сортировки */
PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL);
/* Учтём фильтры */ /* Учтём фильтры */
@ -331,6 +339,7 @@ create or replace package body PKG_P8PANELS_SAMPLES as
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 1);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4);
/* Делаем выборку */ /* Делаем выборку */
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
null; null;