P8-Panels/db/UDO_P_P8PANELS_AGNLIST.prc
2023-09-24 22:25:19 +03:00

144 lines
8.7 KiB
SQL

create or replace procedure UDO_P_P8PANELS_AGNLIST
(
NPAGE_NUMBER in number, -- Íîìåð ñòðàíèöû (èãíîðèðóåòñÿ ïðè NPAGE_SIZE=0)
NPAGE_SIZE in number, -- Êîëè÷åñòâî çàïèñåé íà ñòðàíèöå (0 - âñå)
CFILTERS in clob, -- Ôèëüòðû
CORDERS in clob, -- Ñîðòèðîâêè
NINCLUDE_DEF in number, -- Ïðèçíàê âêëþ÷åíèÿ îïèñàíèÿ êîëîíîê òàáëèöû â îòâåò
COUT out clob -- Ñåðèàëèçîâàííàÿ òàáëèöà äàííûõ
)
is
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Îðãàíèçàöèÿ ñåàíñà
NIDENT PKG_STD.TREF := GEN_IDENT(); -- Èäåíòèôèêàòîð îòáîðà
RF PKG_P8PANELS_VISUAL.TFILTERS; -- Ôèëüòðû
RO PKG_P8PANELS_VISUAL.TORDERS; -- Ñîðòèðîâêè
RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Îïèñàíèå òàáëèöû
RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Ñòðîêà òàáëèöû
RCOL_VALS PKG_P8PANELS_VISUAL.TCOL_VALS; -- Ïðåäîïðåäåë¸ííûå çíà÷åíèÿ ñòîëáöîâ
NROW_FROM PKG_STD.TREF; -- Íîìåð ñòðîêè ñ
NROW_TO PKG_STD.TREF; -- Íîìåð ñòðîêè ïî
CSQL clob; -- Áóôåð äëÿ çàïðîñà
ICURSOR integer; -- Êóðñîð äëÿ èñïîëíåíèÿ çàïðîñà
RAGENT AGNLIST%rowtype; -- Áóôåð äëÿ çàïèñè êóðñîðà
begin
/* ×èòàåì ôèëüòðû */
RF := PKG_P8PANELS_VISUAL.TFILTERS_FROM_XML(CFILTERS => CFILTERS);
/* ×èòåì ñîðòèðîâêè */
RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS);
/* Ïðåîáðàçóåì íîìåð è ðàçìåð ñòðàíèöû â íîìåð ñòðîê ñ è ïî */
PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER,
NPAGE_SIZE => NPAGE_SIZE,
NROW_FROM => NROW_FROM,
NROW_TO => NROW_TO);
/* Èíèöèàëèçèðóåì òàáëèöó äàííûõ */
RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE();
/* Äîáàâëÿåì â òàáëèöó îïèñàíèå êîëîíîê */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'RN',
SCAPTION => 'Ðåã. íîìåð',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
BVISIBLE => false);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'AGNABBR',
SCAPTION => 'Ìíåìîêîä',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SCOND_FROM => 'AgentAbbr',
BORDER => true,
BFILTER => true);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'AGNNAME',
SCAPTION => 'Íàèìåíîâàíèå',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
SCOND_FROM => 'AgentName',
BORDER => true,
BFILTER => true);
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 0, BCLEAR => true);
PKG_P8PANELS_VISUAL.TCOL_VALS_ADD(RCOL_VALS => RCOL_VALS, NVALUE => 1);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'AGNTYPE',
SCAPTION => 'Òèï',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB,
SCOND_FROM => 'AgentType',
BORDER => true,
BFILTER => true,
RCOL_VALS => RCOL_VALS);
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG,
SNAME => 'AGNBURN',
SCAPTION => 'Äàòà ðîæäåíèÿ',
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE,
SCOND_FROM => 'AgentBornFrom',
SCOND_TO => 'AgentBornTo',
BORDER => true,
BFILTER => true);
/* Îáõîäèì äàííûå */
begin
/* Ñîáèðàåì çàïðîñ */
CSQL := 'select *
from (select D.*,
ROWNUM NROW
from (select AG.RN,
AG.AGNABBR,
AG.AGNNAME,
AG.AGNTYPE,
AG.AGNBURN
from AGNLIST AG
where 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';
/* Ó÷ò¸ì ñîðòèðîâêè */
PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL);
/* Ó÷ò¸ì ôèëüòðû */
PKG_P8PANELS_VISUAL.TFILTERS_SET_QUERY(NIDENT => NIDENT,
NCOMPANY => NCOMPANY,
SUNIT => 'AGNLIST',
SPROCEDURE => 'P_AGNLIST_BASE_COND',
RDATA_GRID => RDG,
RFILTERS => RF);
/* Ðàçáèðàåì åãî */
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 => 'NIDENT', NVALUE => NIDENT);
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM);
PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO);
/* Îïèñûâàåì ñòðóêòóðó çàïèñè êóðñîðà */
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2);
PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3);
PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4);
PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 5);
/* Äåëàåì âûáîðêó */
if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then
null;
end if;
/* Îáõîäèì âûáðàííûå çàïèñè */
while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0)
loop
/* Èçâëåêàåì î÷åðåäíóþ çàïèñü */
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => RAGENT.RN);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 2, SVALUE => RAGENT.AGNABBR);
PKG_SQL_DML.COLUMN_VALUE_STR(ICURSOR => ICURSOR, IPOSITION => 3, SVALUE => RAGENT.AGNNAME);
PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 4, NVALUE => RAGENT.AGNTYPE);
PKG_SQL_DML.COLUMN_VALUE_DATE(ICURSOR => ICURSOR, IPOSITION => 5, DVALUE => RAGENT.AGNBURN);
/* Èíèöèàëèçèðóåì ñòðîêó òàáëèöû äàííûõ */
RDG_ROW := PKG_P8PANELS_VISUAL.TROW_MAKE();
/* Äîáàâëÿåì êîëîíêè ñ äàííûìè */
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'RN', NVALUE => RAGENT.RN);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNABBR', SVALUE => RAGENT.AGNABBR);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNNAME', SVALUE => RAGENT.AGNNAME);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNTYPE', NVALUE => RAGENT.AGNTYPE);
PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'AGNBURN', DVALUE => RAGENT.AGNBURN);
/* Äîáàâëÿåì ñòðîêó â òàáëèöó */
PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW);
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.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
end;
/