БД - инициализация
This commit is contained in:
parent
c9b12981cf
commit
fd5e29708f
27
db/PKG_P8PANELS.pck
Normal file
27
db/PKG_P8PANELS.pck
Normal file
@ -0,0 +1,27 @@
|
||||
create or replace package PKG_P8PANELS as
|
||||
|
||||
/* Èñïîëíåíèå äåéñòâèé êëèåíòñêèõ ïðèëîæåíèé */
|
||||
procedure PROCESS
|
||||
(
|
||||
CIN in clob, -- Âõîäíûå ïàðàìåòðû
|
||||
COUT out clob -- Ðåçóëüòàò
|
||||
);
|
||||
|
||||
end PKG_P8PANELS;
|
||||
/
|
||||
create or replace package body PKG_P8PANELS as
|
||||
|
||||
/* Èñïîëíåíèå äåéñòâèé êëèåíòñêèõ ïðèëîæåíèé */
|
||||
procedure PROCESS
|
||||
(
|
||||
CIN in clob, -- Âõîäíûå ïàðàìåòðû
|
||||
COUT out clob -- Ðåçóëüòàò
|
||||
)
|
||||
is
|
||||
begin
|
||||
/* Áàçîâîå èñïîëíåíèå äåéñòâèÿ */
|
||||
PKG_P8PANELS_BASE.PROCESS(CIN => CIN, COUT => COUT);
|
||||
end PROCESS;
|
||||
|
||||
end PKG_P8PANELS;
|
||||
/
|
814
db/PKG_P8PANELS_BASE.pck
Normal file
814
db/PKG_P8PANELS_BASE.pck
Normal file
@ -0,0 +1,814 @@
|
||||
create or replace package PKG_P8PANELS_BASE as
|
||||
|
||||
/*Êîíñòàíòû - Òèïîâîé ïîñòôèêñ òåãà äëÿ ìàññèâà (ïðè ïåðåâîäå XML -> JSON) */
|
||||
SXML_ALWAYS_ARRAY_POSTFIX constant PKG_STD.TSTRING := '__SYSTEM__ARRAY__';
|
||||
|
||||
/* Êîíâåðòàöèÿ ñòðîêè â ÷èñëî */
|
||||
function UTL_S2N
|
||||
(
|
||||
SVALUE in varchar2 -- Êîíâåðòèðóåìîå ñòðîêîâîå çíà÷åíèå
|
||||
) return number; -- Êîíâåðòèðîâàííîå ÷èñëî
|
||||
|
||||
/* Êîíâåðòàöèÿ äàòû â ÷èñëî */
|
||||
function UTL_S2D
|
||||
(
|
||||
SVALUE in varchar2 -- Êîíâåðòèðóåìîå ñòðîêîâîå çíà÷åíèå
|
||||
) return date; -- Êîíâåðòèðîâàííàÿ äàòà
|
||||
|
||||
/* Áàçîâîå èñïîëíåíèå äåéñòâèé */
|
||||
procedure PROCESS
|
||||
(
|
||||
CIN in clob, -- Âõîäíûå ïàðàìåòðû
|
||||
COUT out clob -- Ðåçóëüòàò
|
||||
);
|
||||
|
||||
end PKG_P8PANELS_BASE;
|
||||
/
|
||||
create or replace package body PKG_P8PANELS_BASE as
|
||||
|
||||
/* Êîíñòàíòû - êîäû äåñòâèé çàïðîñîâ */
|
||||
SRQ_ACTION_EXEC_STORED constant PKG_STD.TSTRING := 'EXEC_STORED'; -- Çàïðîñ íà èñïîëíåíèå õðàíèìîé ïðîöåäóðû
|
||||
|
||||
/* Êîíñòàíòû - òýãè çàïðîñîâ */
|
||||
SRQ_TAG_XREQUEST constant PKG_STD.TSTRING := 'XREQUEST'; -- Êîðíåâîé òýã çàïðîñà
|
||||
SRQ_TAG_XPAYLOAD constant PKG_STD.TSTRING := 'XPAYLOAD'; -- Òýã äëÿ äàííûõ çàïðîñà
|
||||
SRQ_TAG_SACTION constant PKG_STD.TSTRING := 'SACTION'; -- Òýã äëÿ äåéñòâèÿ çàïðîñà
|
||||
SRQ_TAG_SSTORED constant PKG_STD.TSTRING := 'SSTORED'; -- Òýã äëÿ èìåíè õðàíèìîãî îáúåêòà â çàïðîñå
|
||||
SRQ_TAG_SRESP_ARG constant PKG_STD.TSTRING := 'SRESP_ARG'; -- Òýã äëÿ èìåíè àðãóìåíòà, ôîðìèðóþùåãî äàííûå îòâåòà
|
||||
SRQ_TAG_XARGUMENTS constant PKG_STD.TSTRING := 'XARGUMENTS'; -- Òýã äëÿ ñïèñêà àðãóìåíòîâ õðàíèìîãî îáúåêòà/âûáîðêè â çàïðîñå
|
||||
SRQ_TAG_XARGUMENT constant PKG_STD.TSTRING := 'XARGUMENT'; -- Òýã äëÿ àðãóìåíòà õðàíèìîãî îáúåêòà/âûáîðêè â çàïðîñå
|
||||
SRQ_TAG_SNAME constant PKG_STD.TSTRING := 'SNAME'; -- Òýã äëÿ íàèìåíîâàíèÿ â çàïðîñå
|
||||
SRQ_TAG_SDATA_TYPE constant PKG_STD.TSTRING := 'SDATA_TYPE'; -- Òýã äëÿ òèïà äàííûõ â çàïðîñå
|
||||
SRQ_TAG_VALUE constant PKG_STD.TSTRING := 'VALUE'; -- Òýã äëÿ çíà÷åíèÿ â çàïðîñå
|
||||
|
||||
/* Êîíñòàíòû - òýãè îòâåòîâ */
|
||||
SRESP_TAG_XPAYLOAD constant PKG_STD.TSTRING := 'XPAYLOAD'; -- Òýã äëÿ äàííûõ îòâåòà
|
||||
SRESP_TAG_XOUT_ARGUMENTS constant PKG_STD.TSTRING := 'XOUT_ARGUMENTS'; -- Òýã äëÿ âûõîäíûõ àðãóìåíòîâ õðàíèìîãî îáúåêòà â îòâåòå
|
||||
SRESP_TAG_SDATA_TYPE constant PKG_STD.TSTRING := 'SDATA_TYPE'; -- Òýã äëÿ òèïà äàííûõ â îòâåòå
|
||||
SRESP_TAG_VALUE constant PKG_STD.TSTRING := 'VALUE'; -- Òýã äëÿ çíà÷åíèÿ â îòâåòå
|
||||
SRESP_TAG_SNAME constant PKG_STD.TSTRING := 'SNAME'; -- Òýã äëÿ íàèìåíîâàíèÿ â îòâåòå
|
||||
|
||||
/* Êîíñòàíòû - òèïû äàííûõ */
|
||||
SDATA_TYPE_STR constant PKG_STD.TSTRING := 'STR'; -- Òèï äàííûõ "ñòðîêà"
|
||||
SDATA_TYPE_NUMB constant PKG_STD.TSTRING := 'NUMB'; -- Òèï äàííûõ "÷èñëî"
|
||||
SDATA_TYPE_DATE constant PKG_STD.TSTRING := 'DATE'; -- Òèï äàííûõ "äàòà"
|
||||
SDATA_TYPE_CLOB constant PKG_STD.TSTRING := 'CLOB'; -- Òèï äàííûõ "òåêñò"
|
||||
|
||||
/* Êîíñòàíòû - ñîñòîÿíèÿ îáúåêòîâ ÁÄ */
|
||||
SDB_OBJECT_STATE_VALID constant PKG_STD.TSTRING := 'VALID'; -- Îáúåêò âàëèäåí
|
||||
|
||||
/* Òèïû äàííûõ - àðãóìåíòû */
|
||||
type TARGUMENT is record
|
||||
(
|
||||
SNAME PKG_STD.TSTRING, -- Íàèìåíîâàíèå
|
||||
SDATA_TYPE PKG_STD.TSTRING, -- Òèï äàííûõ (ñì. êîíñòàíòû SPWS_DATA_TYPE_*)
|
||||
SVALUE PKG_STD.TSTRING, -- Çíà÷åíèå (ñòðîêà)
|
||||
NVALUE PKG_STD.TLNUMBER, -- Çíà÷åíèå (÷èñëî)
|
||||
DVALUE PKG_STD.TLDATE, -- Çíà÷åíèå (äàòà)
|
||||
CVALUE clob -- Çíà÷åíèå (òåêñò)
|
||||
);
|
||||
|
||||
/* Òèïû äàííûõ - êîëëåêöèÿ àðãóìåíòîâ çàïðîñà */
|
||||
type TARGUMENTS is table of TARGUMENT;
|
||||
|
||||
/* Êîíâåðòàöèÿ ñòðîêè â ÷èñëî */
|
||||
function UTL_S2N
|
||||
(
|
||||
SVALUE in varchar2 -- Êîíâåðòèðóåìîå ñòðîêîâîå çíà÷åíèå
|
||||
) return number -- Êîíâåðòèðîâàííîå ÷èñëî
|
||||
is
|
||||
NVALUE PKG_STD.TNUMBER; -- Ðåçóëüòàò ðàáîòû
|
||||
begin
|
||||
/* Ïðîáóåì êîíâåðòèðîâàòü */
|
||||
NVALUE := TO_NUMBER(replace(SVALUE, ',', '.'));
|
||||
/* Îòäà¸ì ðåçóëüòàò */
|
||||
return NVALUE;
|
||||
exception
|
||||
when others then
|
||||
P_EXCEPTION(0, 'Íåâåðíûé ôîðìàò ÷èñëà (%s).', SVALUE);
|
||||
end UTL_S2N;
|
||||
|
||||
/* Êîíâåðòàöèÿ äàòû â ÷èñëî */
|
||||
function UTL_S2D
|
||||
(
|
||||
SVALUE in varchar2 -- Êîíâåðòèðóåìîå ñòðîêîâîå çíà÷åíèå
|
||||
) return date -- Êîíâåðòèðîâàííàÿ äàòà
|
||||
is
|
||||
DVALUE PKG_STD.TLDATE; -- Ðåçóëüòàò ðàáîòû
|
||||
begin
|
||||
/* Ïðîáóåì êîíâåðòèðîâàòü */
|
||||
begin
|
||||
DVALUE := TO_DATE(SVALUE, 'YYYY-MM-DD');
|
||||
exception
|
||||
when others then
|
||||
begin
|
||||
DVALUE := TO_DATE(SVALUE, 'YYYY/MM/DD');
|
||||
exception
|
||||
when others then
|
||||
begin
|
||||
DVALUE := TO_DATE(SVALUE, 'DD.MM.YYYY');
|
||||
exception
|
||||
when others then
|
||||
DVALUE := TO_DATE(SVALUE, 'DD/MM/YYYY');
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
/* Îòäà¸ì ðåçóëüòàò */
|
||||
return DVALUE;
|
||||
exception
|
||||
when others then
|
||||
P_EXCEPTION(0, 'Íåâåðíûé ôîðìàò äàòû (%s).', SVALUE);
|
||||
end UTL_S2D;
|
||||
|
||||
/* Ôîðìèðîâàíèå ñîîáùåíèÿ îá îòñóòñòâèè çíà÷åíèÿ */
|
||||
function MSG_NO_DATA_MAKE
|
||||
(
|
||||
SPATH in varchar2 := null, -- Ïóòü ïî êîòîðîìó îæèäàëîñü çíà÷åíèå
|
||||
SMESSAGE_OBJECT in varchar2 := null -- Íàèìåìíîâàíèå îáúåêòà äëÿ ôîðìóëèðîâàíèÿ ñîîáùåíèÿ îá îøèáêå
|
||||
) return varchar2 -- Ñôîðìèðîâàííîå ñîîáùåíèå îá îøèáêå
|
||||
is
|
||||
SPATH_ PKG_STD.TSTRING; -- Áóôåð äëÿ ïóòè
|
||||
SMESSAGE_OBJECT_ PKG_STD.TSTRING; -- Áóôåð äëÿ íàèìåíîâàíèÿ îáúåêòà
|
||||
begin
|
||||
/* Ïîäãîòîâèì ïóòü ê âûäà÷å */
|
||||
if (SPATH is not null) then
|
||||
SPATH_ := ' (' || SPATH || ')';
|
||||
end if;
|
||||
/* Ïîäãîòîâèì íàèìåíîâàíèå îáúåêòà ê âûäà÷å */
|
||||
if (SMESSAGE_OBJECT is not null) then
|
||||
SMESSAGE_OBJECT_ := ' ýëåìåíòà "' || SMESSAGE_OBJECT || '"';
|
||||
else
|
||||
SMESSAGE_OBJECT_ := ' ýëåìåíòà';
|
||||
end if;
|
||||
/* Âåðí¸ì ñôîðìèðîâàííîå ñîîáùåíèå */
|
||||
return 'Íå óêàçàíî çíà÷åíèå' || SMESSAGE_OBJECT_ || SPATH_ || '.';
|
||||
end MSG_NO_DATA_MAKE;
|
||||
|
||||
/* Êîíâåðòàöèÿ ñòàíäàðòíîãî òèïà äàííûõ (PKG_STD) â òèï äàííûõ ñåðâèñà (PWS) */
|
||||
function STD_DATA_TYPE_TO_STR
|
||||
(
|
||||
NSTD_DATA_TYPE in number -- Ñòàíàðòíûé òèï äàííûõ
|
||||
) return varchar2 -- Ñîîòâåòñòâóþùèé òèï äàííûõ ñåðâèñà
|
||||
is
|
||||
SRES PKG_STD.TSTRING; -- Áóôåð äëÿ ðåçóëüòàòà
|
||||
begin
|
||||
/* Ðàáîòàåì îò òèïà äàííûõ */
|
||||
case NSTD_DATA_TYPE
|
||||
/* Ñòðîêà */
|
||||
when PKG_STD.DATA_TYPE_STR then
|
||||
SRES := SDATA_TYPE_STR;
|
||||
/* ×èñëî */
|
||||
when PKG_STD.DATA_TYPE_NUM then
|
||||
SRES := SDATA_TYPE_NUMB;
|
||||
/* Äàòà */
|
||||
when PKG_STD.DATA_TYPE_DATE then
|
||||
SRES := SDATA_TYPE_DATE;
|
||||
/* Òåêñò */
|
||||
when PKG_STD.DATA_TYPE_CLOB then
|
||||
SRES := SDATA_TYPE_CLOB;
|
||||
/* Íåèçâåñòíûé òèï äàííûõ */
|
||||
else
|
||||
P_EXCEPTION(0, 'Òèï äàííûõ "%s" íå ïîääåðæèâàåòñÿ.', TO_CHAR(NSTD_DATA_TYPE));
|
||||
end case;
|
||||
/* Âîçâðàùàåì ðåçóëüòàò */
|
||||
return SRES;
|
||||
end STD_DATA_TYPE_TO_STR;
|
||||
|
||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ âåòêè XML (ñòðîêà) */
|
||||
function NODE_SVAL_GET
|
||||
(
|
||||
XROOT in PKG_XPATH.TNODE, -- Êîðíåâàÿ âåòêà äëÿ ñ÷èòûâàíèÿ çíà÷åíèÿ
|
||||
SPATH in varchar2, -- Ïóòü äëÿ ñ÷èòûâàíèÿ äàííûõ
|
||||
NREQUIRED in number := 0, -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
SMESSAGE_OBJECT in varchar2 := null -- Íàèìåìíîâàíèå îáúåêòà äëÿ ôîðìóëèðîâàíèÿ ñîîáùåíèÿ îá îøèáêå
|
||||
) return varchar2 -- Ñ÷èòàííîå çíà÷åíèå
|
||||
is
|
||||
XNODE PKG_XPATH.TNODE; -- Èñêîìàÿ âåòêà ñî çíà÷åíèåì (ïîäõîäÿùàÿ ïîä øàáëîí)
|
||||
SVAL PKG_STD.TSTRING; -- Ðåçóëüòàò ðàáîòû
|
||||
begin
|
||||
/* Íàéäåì íóæíóþ âåòêó ïî øàáëîíó */
|
||||
XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => SPATH);
|
||||
/* Åñëè òàì íåò íè÷åãî */
|
||||
if (PKG_XPATH.IS_NULL(RNODE => XNODE)) then
|
||||
/* Åãî è âåðí¸ì */
|
||||
SVAL := null;
|
||||
else
|
||||
/* ×òî-òî åñòü - ÷èòàåì äàííûå */
|
||||
begin
|
||||
SVAL := PKG_XPATH.VALUE(RNODE => XNODE);
|
||||
exception
|
||||
when others then
|
||||
P_EXCEPTION(0, 'Íåâåðíûé ôîðìàò ñòðîêè (%s).', SPATH);
|
||||
end;
|
||||
end if;
|
||||
/* Åñëè çíà÷åíèÿ íåò, à îíî äîëæíî áûòü - ñêàæåì îá ýòîì */
|
||||
if ((SVAL is null) and (NREQUIRED = 1)) then
|
||||
P_EXCEPTION(0, MSG_NO_DATA_MAKE(SPATH => SPATH, SMESSAGE_OBJECT => SMESSAGE_OBJECT));
|
||||
end if;
|
||||
/* Îòäà¸ì ðåçóëüòàò */
|
||||
return SVAL;
|
||||
end NODE_SVAL_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ âåòêè XML (÷èñëî) */
|
||||
function NODE_NVAL_GET
|
||||
(
|
||||
XROOT in PKG_XPATH.TNODE, -- Êîðíåâàÿ âåòêà äëÿ ñ÷èòûâàíèÿ çíà÷åíèÿ
|
||||
SPATH in varchar2, -- Ïóòü äëÿ ñ÷èòûâàíèÿ äàííûõ
|
||||
NREQUIRED in number := 0, -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
SMESSAGE_OBJECT in varchar2 := null -- Íàèìåìíîâàíèå îáúåêòà äëÿ ôîðìóëèðîâàíèÿ ñîîáùåíèÿ îá îøèáêå
|
||||
) return number -- Ñ÷èòàííîå çíà÷åíèå
|
||||
is
|
||||
XNODE PKG_XPATH.TNODE; -- Èñêîìàÿ âåòêà ñî çíà÷åíèåì (ïîäõîäÿùàÿ ïîä øàáëîí)
|
||||
NVAL PKG_STD.TLNUMBER; -- Ðåçóëüòàò ðàáîòû
|
||||
begin
|
||||
/* Íàéäåì íóæíóþ âåòêó ïî øàáëîíó */
|
||||
XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => SPATH);
|
||||
/* Åñëè òàì íåò íè÷åãî */
|
||||
if (PKG_XPATH.IS_NULL(RNODE => XNODE)) then
|
||||
/* Åãî è âåðí¸ì */
|
||||
NVAL := null;
|
||||
else
|
||||
/* ×òî-òî åñòü - ÷èòàåì äàííûå */
|
||||
begin
|
||||
NVAL := PKG_XPATH.VALUE_NUM(RNODE => XNODE);
|
||||
exception
|
||||
when others then
|
||||
P_EXCEPTION(0, 'Íåâåðíûé ôîðìàò ÷èñëà (%s).', SPATH);
|
||||
end;
|
||||
end if;
|
||||
/* Åñëè çíà÷åíèÿ íåò, à îíî äîëæíî áûòü - ñêàæåì îá ýòîì */
|
||||
if ((NVAL is null) and (NREQUIRED = 1)) then
|
||||
P_EXCEPTION(0, MSG_NO_DATA_MAKE(SPATH => SPATH, SMESSAGE_OBJECT => SMESSAGE_OBJECT));
|
||||
end if;
|
||||
/* Îòäà¸ì ðåçóëüòàò */
|
||||
return NVAL;
|
||||
end NODE_NVAL_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ âåòêè XML (äàòà) */
|
||||
function NODE_DVAL_GET
|
||||
(
|
||||
XROOT in PKG_XPATH.TNODE, -- Êîðíåâàÿ âåòêà äëÿ ñ÷èòûâàíèÿ çíà÷åíèÿ
|
||||
SPATH in varchar2, -- Ïóòü äëÿ ñ÷èòûâàíèÿ äàííûõ
|
||||
NREQUIRED in number := 0, -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
SMESSAGE_OBJECT in varchar2 := null -- Íàèìåìíîâàíèå îáúåêòà äëÿ ôîðìóëèðîâàíèÿ ñîîáùåíèÿ îá îøèáêå
|
||||
) return date -- Ñ÷èòàííîå çíà÷åíèå
|
||||
is
|
||||
XNODE PKG_XPATH.TNODE; -- Èñêîìàÿ âåòêà ñî çíà÷åíèåì (ïîäõîäÿùàÿ ïîä øàáëîí)
|
||||
DVAL PKG_STD.TLDATE; -- Ðåçóëüòàò ðàáîòû
|
||||
begin
|
||||
/* Íàéäåì íóæíóþ âåòêó ïî øàáëîíó */
|
||||
XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => SPATH);
|
||||
/* Åñëè òàì íåò íè÷åãî */
|
||||
if (PKG_XPATH.IS_NULL(RNODE => XNODE)) then
|
||||
/* Åãî è âåðí¸ì */
|
||||
DVAL := null;
|
||||
else
|
||||
/* ×òî-òî åñòü - ÷èòàåì äàííûå */
|
||||
begin
|
||||
DVAL := PKG_XPATH.VALUE_DATE(RNODE => XNODE);
|
||||
exception
|
||||
when others then
|
||||
begin
|
||||
DVAL := PKG_XPATH.VALUE_TS(RNODE => XNODE);
|
||||
exception
|
||||
when others then
|
||||
begin
|
||||
DVAL := PKG_XPATH.VALUE_TZ(RNODE => XNODE);
|
||||
exception
|
||||
when others then
|
||||
P_EXCEPTION(0,
|
||||
'Íåâåðíûé ôîðìàò äàòû (%s). Îæèäàëîñü: YYYY-MM-DD"T"HH24:MI:SS.FF3tzh:tzm, YYYY-MM-DD"T"HH24:MI:SS.FF3, YYYY-MM-DD"T"HH24:MI:SS, YYYY-MM-DD.',
|
||||
SPATH);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end if;
|
||||
/* Åñëè çíà÷åíèÿ íåò, à îíî äîëæíî áûòü - ñêàæåì îá ýòîì */
|
||||
if ((DVAL is null) and (NREQUIRED = 1)) then
|
||||
P_EXCEPTION(0, MSG_NO_DATA_MAKE(SPATH => SPATH, SMESSAGE_OBJECT => SMESSAGE_OBJECT));
|
||||
end if;
|
||||
/* Îòäà¸ì ðåçóëüòàò */
|
||||
return DVAL;
|
||||
end NODE_DVAL_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ âåòêè XML (òåêñò) */
|
||||
function NODE_CVAL_GET
|
||||
(
|
||||
XROOT in PKG_XPATH.TNODE, -- Êîðíåâàÿ âåòêà äëÿ ñ÷èòûâàíèÿ çíà÷åíèÿ
|
||||
SPATH in varchar2, -- Ïóòü äëÿ ñ÷èòûâàíèÿ äàííûõ
|
||||
NREQUIRED in number := 0, -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
SMESSAGE_OBJECT in varchar2 := null -- Íàèìåìíîâàíèå îáúåêòà äëÿ ôîðìóëèðîâàíèÿ ñîîáùåíèÿ îá îøèáêå
|
||||
) return clob -- Ñ÷èòàííîå çíà÷åíèå
|
||||
is
|
||||
XNODE PKG_XPATH.TNODE; -- Èñêîìàÿ âåòêà ñî çíà÷åíèåì (ïîäõîäÿùàÿ ïîä øàáëîí)
|
||||
CVAL clob; -- Ðåçóëüòàò ðàáîòû
|
||||
begin
|
||||
/* Íàéäåì íóæíóþ âåòêó ïî øàáëîíó */
|
||||
XNODE := PKG_XPATH.SINGLE_NODE(RPARENT_NODE => XROOT, SPATTERN => SPATH);
|
||||
/* Åñëè òàì íåò íè÷åãî */
|
||||
if (PKG_XPATH.IS_NULL(RNODE => XNODE)) then
|
||||
/* Åãî è âåðí¸ì */
|
||||
CVAL := null;
|
||||
else
|
||||
/* ×òî-òî åñòü - ÷èòàåì äàííûå */
|
||||
begin
|
||||
CVAL := PKG_XPATH.VALUE_CLOB(RNODE => XNODE);
|
||||
exception
|
||||
when others then
|
||||
P_EXCEPTION(0, 'Íåâåðíûé ôîðìàò òåêñòîâûõ äàííûõ (%s).', SPATH);
|
||||
end;
|
||||
end if;
|
||||
/* Åñëè çíà÷åíèÿ íåò, à îíî äîëæíî áûòü - ñêàæåì îá ýòîì */
|
||||
if ((CVAL is null) and (NREQUIRED = 1)) then
|
||||
P_EXCEPTION(0, MSG_NO_DATA_MAKE(SPATH => SPATH, SMESSAGE_OBJECT => SMESSAGE_OBJECT));
|
||||
end if;
|
||||
/* Îòäà¸ì ðåçóëüòàò */
|
||||
return CVAL;
|
||||
end NODE_CVAL_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå àðãóìåíòà èç êîëëåêöèè */
|
||||
function TARGUMENTS_GET
|
||||
(
|
||||
ARGUMENTS in TARGUMENTS, -- Êîëëåêöèÿ àðãóìåíòîâ
|
||||
SARGUMENT in varchar2, -- Êîä àðãóìåíòà
|
||||
NREQUIRED in number := 0 -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
) return TARGUMENT -- Íàéäåííûé àðãóìåíò
|
||||
is
|
||||
begin
|
||||
/* Åñëè äàííûå â êîëëåêöèè åñòü */
|
||||
if ((ARGUMENTS is not null) and (ARGUMENTS.COUNT > 0)) then
|
||||
/* Îáõîäèì å¸ */
|
||||
for I in ARGUMENTS.FIRST .. ARGUMENTS.LAST
|
||||
loop
|
||||
/* Åñëè âñòðåòèëñÿ íóæíûé àðãóìåíò */
|
||||
if (ARGUMENTS(I).SNAME = SARGUMENT) then
|
||||
/* Âåðí¸ì åãî */
|
||||
return ARGUMENTS(I);
|
||||
end if;
|
||||
end loop;
|
||||
end if;
|
||||
/* Åñëè ìû çäåñü - àðãóìåíò íå íàøåëñÿ, áóäåì âûäàâàòü ñîîáùåíèå îá îøèáêå åñëè îí áûë îáÿçàòåëüíûì */
|
||||
if (NREQUIRED = 1) then
|
||||
P_EXCEPTION(0, 'Íå çàäàí îáÿçàòåëüíûé àðãóìåíò "%s".', SARGUMENT);
|
||||
else
|
||||
/* Îí íå îáÿçàòåëüíûé - âåðí¸ì îòñóòñòâèå äàííûõ */
|
||||
return null;
|
||||
end if;
|
||||
end TARGUMENTS_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ àðãóìåíòà èç êîëëåêöèè (ñòðîêà) */
|
||||
function TARGUMENTS_SVAL_GET
|
||||
(
|
||||
ARGUMENTS in TARGUMENTS, -- Êîëëåêöèÿ àðãóìåíòîâ
|
||||
SARGUMENT in varchar2, -- Êîä àðãóìåíòà
|
||||
NREQUIRED in number := 0 -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
) return varchar2 -- Çíà÷åíèå àðãóìåíòà
|
||||
is
|
||||
begin
|
||||
/* Ñ÷èòàåì è âåðí¸ì çíà÷åíèå */
|
||||
return TARGUMENTS_GET(ARGUMENTS => ARGUMENTS, SARGUMENT => SARGUMENT, NREQUIRED => NREQUIRED).SVALUE;
|
||||
end TARGUMENTS_SVAL_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ ïàðàìåòðà èç çàïðîñà (÷èñëî) */
|
||||
function TARGUMENTS_NVAL_GET
|
||||
(
|
||||
ARGUMENTS in TARGUMENTS, -- Êîëëåêöèÿ àðãóìåíòîâ
|
||||
SARGUMENT in varchar2, -- Êîä àðãóìåíòà
|
||||
NREQUIRED in number := 0 -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
) return number -- Çíà÷åíèå àðãóìåíòà
|
||||
is
|
||||
begin
|
||||
/* Ñ÷èòàåì è âåðí¸ì çíà÷åíèå */
|
||||
return TARGUMENTS_GET(ARGUMENTS => ARGUMENTS, SARGUMENT => SARGUMENT, NREQUIRED => NREQUIRED).NVALUE;
|
||||
end TARGUMENTS_NVAL_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ ïàðàìåòðà èç çàïðîñà (äàòà) */
|
||||
function TARGUMENTS_DVAL_GET
|
||||
(
|
||||
ARGUMENTS in TARGUMENTS, -- Êîëëåêöèÿ àðãóìåíòîâ
|
||||
SARGUMENT in varchar2, -- Êîä àðãóìåíòà
|
||||
NREQUIRED in number := 0 -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
) return date -- Çíà÷åíèå àðãóìåíòà
|
||||
is
|
||||
begin
|
||||
/* Ñ÷èòàåì è âåðí¸ì çíà÷åíèå */
|
||||
return TARGUMENTS_GET(ARGUMENTS => ARGUMENTS, SARGUMENT => SARGUMENT, NREQUIRED => NREQUIRED).DVALUE;
|
||||
end TARGUMENTS_DVAL_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå çíà÷åíèÿ ïàðàìåòðà èç çàïðîñà (òåêñò) */
|
||||
function TARGUMENTS_CVAL_GET
|
||||
(
|
||||
ARGUMENTS in TARGUMENTS, -- Êîëëåêöèÿ àðãóìåíòîâ
|
||||
SARGUMENT in varchar2, -- Êîä àðãóìåíòà
|
||||
NREQUIRED in number := 0 -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
) return clob -- Çíà÷åíèå àðãóìåíòà
|
||||
is
|
||||
begin
|
||||
/* Ñ÷èòàåì è âåðí¸ì çíà÷åíèå */
|
||||
return TARGUMENTS_GET(ARGUMENTS => ARGUMENTS, SARGUMENT => SARGUMENT, NREQUIRED => NREQUIRED).CVALUE;
|
||||
end TARGUMENTS_CVAL_GET;
|
||||
|
||||
/* Ïîëó÷åíèå êîðíåâîãî ýëåìåíòà òåëà çàïðîñà */
|
||||
function RQ_ROOT_GET
|
||||
(
|
||||
CRQ in clob -- Çàïðîñ
|
||||
) return PKG_XPATH.TNODE -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
|
||||
is
|
||||
begin
|
||||
/* Âîçâðàùàåì êîðíåâîé ýëåìåíò äîêóìåíòà */
|
||||
return PKG_XPATH.ROOT_NODE(RDOCUMENT => PKG_XPATH.PARSE_FROM_CLOB(LCXML => CRQ));
|
||||
end RQ_ROOT_GET;
|
||||
|
||||
/* Ïîëó÷åíèå ïóòè ê çàïðîñó */
|
||||
function RQ_PATH_GET
|
||||
return varchar2 -- Ïóòü ê çàïðîñó
|
||||
is
|
||||
begin
|
||||
return '/' || SRQ_TAG_XREQUEST;
|
||||
end RQ_PATH_GET;
|
||||
|
||||
/* Ïîëó÷åíèå ïóòè ê ýëåìåíòó äåéñòâèÿ çàïðîñà */
|
||||
function RQ_ACTION_PATH_GET
|
||||
return varchar2 -- Ïóòü ê ýëåìåíòó äåéñòâèÿ çàïðîñà
|
||||
is
|
||||
begin
|
||||
return RQ_PATH_GET() || '/' || SRQ_TAG_SACTION;
|
||||
end RQ_ACTION_PATH_GET;
|
||||
|
||||
/* Ïîëó÷åíèå êîäà äåéñòâèÿ çàïðîñà */
|
||||
function RQ_ACTION_GET
|
||||
(
|
||||
XRQ_ROOT in PKG_XPATH.TNODE := null, -- Êîðíåâàÿ âåòêà çàïðîñà
|
||||
NREQUIRED in number := 0 -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
) return varchar2 -- Êîä äåéñòâèÿ çàïðîñà
|
||||
is
|
||||
begin
|
||||
/* Âåðíåì çíà÷åíèå ýëåìåíòà òåëà ñ êîäîì äåéñòâèÿ */
|
||||
return NODE_SVAL_GET(XROOT => XRQ_ROOT,
|
||||
SPATH => RQ_ACTION_PATH_GET(),
|
||||
NREQUIRED => NREQUIRED,
|
||||
SMESSAGE_OBJECT => 'Êîä äåéñòâèÿ');
|
||||
end RQ_ACTION_GET;
|
||||
|
||||
/* Ïîëó÷åíèå ïóòè ê ïàðàìåòðàì çàïðîñà */
|
||||
function RQ_PAYLOAD_PATH_GET
|
||||
return varchar2 -- Ïóòü ê ïàðàìåòðàì çàïðîñà
|
||||
is
|
||||
begin
|
||||
/* Âåðíåì çíà÷åíèå */
|
||||
return RQ_PATH_GET() || '/' || SRQ_TAG_XPAYLOAD;
|
||||
end RQ_PAYLOAD_PATH_GET;
|
||||
|
||||
/* Ïîëó÷åíèå ïóòè ê ýëêìåíòó ïàðàìåòðîâ çàïðîñà */
|
||||
function RQ_PAYLOAD_ITEM_PATH_GET
|
||||
(
|
||||
SITEM_TAG in varchar2 -- Òýã ýëåìåíòà
|
||||
)
|
||||
return varchar2 -- Ïóòü ê ýëåìåíòó ïàðàìåòðîâ çàïðîñà
|
||||
is
|
||||
begin
|
||||
/* Âåðíåì çíà÷åíèå */
|
||||
return RQ_PAYLOAD_PATH_GET() || '/' || SITEM_TAG;
|
||||
end RQ_PAYLOAD_ITEM_PATH_GET;
|
||||
|
||||
/* Ñ÷èòûâàíèå íàèìåíîâàíèÿ èñïîëíÿåìîãî õðàíèìîãî îáúåêòà èç çàïðîñà */
|
||||
function RQ_PAYLOAD_STORED_GET
|
||||
(
|
||||
XRQ_ROOT in PKG_XPATH.TNODE := null, -- Êîðíåâàÿ âåòêà çàïðîñà
|
||||
NREQUIRED in number := 0 -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
) return varchar2 -- Íàèìåíîâàíèå èñïîëíÿåìîãî õðàíèìîãî îáúåêòà èç çàïðîñà
|
||||
is
|
||||
begin
|
||||
/* Âåðíåì çíà÷åíèå ýëåìåíòà òåëà ñ íàèìåíîâàíèåì õðàíèìîãî îáúåêòà */
|
||||
return NODE_SVAL_GET(XROOT => XRQ_ROOT,
|
||||
SPATH => RQ_PAYLOAD_ITEM_PATH_GET(SITEM_TAG => SRQ_TAG_SSTORED),
|
||||
NREQUIRED => NREQUIRED,
|
||||
SMESSAGE_OBJECT => 'Íàèìåíîâàíèå ïðîöåäóðû/ôóíêöèè');
|
||||
end RQ_PAYLOAD_STORED_GET;
|
||||
|
||||
/* Ïðîâåðêà èñïîëíÿåìîãî õðàíèìîãî îáúåêòà èç çàïðîñà */
|
||||
procedure RQ_PAYLOAD_STORED_CHECK
|
||||
(
|
||||
XRQ_ROOT in PKG_XPATH.TNODE, -- Êîðíåâàÿ âåòêà çàïðîñà
|
||||
SSTORED in varchar2 := null -- Íàèìåíîâàíèå ïðîâåðÿåìîãî õðàíèìîãî îáúåêòà (null - àâòîìàòè÷åñêîå ñ÷èòûâàíèå èç çàïðîñà)
|
||||
)
|
||||
is
|
||||
SSTORED_ PKG_STD.TSTRING; -- Áóôåð äëÿ íàèìåíîâàíèÿ ïðîâåðÿåìîãî õðàíèìîãî îáúåêòà
|
||||
RSTORED PKG_OBJECT_DESC.TSTORED; -- Îïèñàíèå õðàíèìîãî îáúåêòà èç ÁÄ
|
||||
SPROCEDURE PKG_STD.TSTRING; -- Áóôåð äëÿ íàèìåíîâàíèÿ õðàíèìîé ïðîöåäóðû
|
||||
SPACKAGE PKG_STD.TSTRING; -- Áóôåð äëÿ íàèìåíîâàíèÿ ïàêåòà, ñîäåðæàùåãî õðàíèìûé îáúåêò
|
||||
RPACKAGE PKG_OBJECT_DESC.TPACKAGE; -- Îïèñàíèå ïàêåòà, ñîäåðæàùåãî õðàíèìûé îáúåêò
|
||||
begin
|
||||
/* Ñ÷èòàåì íàèìåíîâàíèå îáúåêòà èç çàïðîñà èëè èñïîëüçóåì ïåðåäàííîå â ïàðàìåòðàõ */
|
||||
if (SSTORED is not null) then
|
||||
SSTORED_ := SSTORED;
|
||||
else
|
||||
SSTORED_ := RQ_PAYLOAD_STORED_GET(XRQ_ROOT => XRQ_ROOT, NREQUIRED => 1);
|
||||
end if;
|
||||
/* Ïðîâåðèì, ÷òî ýòî ïðîöåäóðà èëè ôóíêöèÿ è îíà âîîáùå ñóùåñòâóåò */
|
||||
if (PKG_OBJECT_DESC.EXISTS_STORED(SSTORED_NAME => SSTORED_) = 0) then
|
||||
P_EXCEPTION(0,
|
||||
'Õðàíèìàÿ ïðîöåäóðà/ôóíêöèÿ "' || SSTORED_ || '" íå îïðåäåëåíà.');
|
||||
else
|
||||
/* Ïðîâåðèì, ÷òî â èìåíè íåò ññûëêè íà ïàêåò */
|
||||
PKG_EXS.UTL_STORED_PARSE_LINK(SSTORED => SSTORED_, SPROCEDURE => SPROCEDURE, SPACKAGE => SPACKAGE);
|
||||
/* Åñëè â èìåíè åñòü ññûëêà íà ïàêåò - ñíà÷àëà ïðîâåðèì åãî ñîñòîÿíèå */
|
||||
if (SPACKAGE is not null) then
|
||||
RPACKAGE := PKG_OBJECT_DESC.DESC_PACKAGE(SPACKAGE_NAME => SPACKAGE, BRAISE_ERROR => false);
|
||||
end if;
|
||||
/* Åñëè åñòü ññûëêà íà ïàêåò, èëè îí íå âàëèäåí - ýòî îøèáêà */
|
||||
if ((SPACKAGE is not null) and (RPACKAGE.STATUS <> SDB_OBJECT_STATE_VALID)) then
|
||||
P_EXCEPTION(0,
|
||||
'Ïàêåò "' || SPACKAGE ||
|
||||
'", ñîäåðæàùèé õðàíèìóþ ïðîöåäóðó/ôóíêöèþ, íåâàëèäåí. Îáðàùåíèå ê îáúåêòó íåâîçìîæíî.');
|
||||
else
|
||||
/* Íåò ññûëêè íà ïàêåò èëè îí âàëèäåí - ïðîâåðÿåì ãëóáæå, ïîëó÷èì îïèñàíèå îáúåêòà èç ÁÄ */
|
||||
RSTORED := PKG_OBJECT_DESC.DESC_STORED(SSTORED_NAME => SSTORED_, BRAISE_ERROR => false);
|
||||
/* Ïðîâåðèì, ÷òî âàëèäíà */
|
||||
if (RSTORED.STATUS <> SDB_OBJECT_STATE_VALID) then
|
||||
P_EXCEPTION(0,
|
||||
'Õðàíèìàÿ ïðîöåäóðà/ôóíêöèÿ "' || SSTORED_ || '" íåâàëèäíà. Îáðàùåíèå ê îáúåêòó íåâîçìîæíî.');
|
||||
else
|
||||
/* Ïðîâåðèì, ÷òî ýòî êëèåíòñêèé îáúåêò */
|
||||
if (PKG_OBJECT_DESC.EXISTS_PRIV_EXECUTE(SSTORED_NAME => COALESCE(RSTORED.PACKAGE_NAME, SSTORED_)) = 0) then
|
||||
P_EXCEPTION(0,
|
||||
'Õðàíèìàÿ ïðîöåäóðà/ôóíêöèÿ "' || SSTORED_ ||
|
||||
'" íå ÿâëÿåòñÿ êëèåíòñêîé. Îáðàùåíèå ê îáúåêòó íåâîçìîæíî.');
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
end RQ_PAYLOAD_STORED_CHECK;
|
||||
|
||||
/* Ñ÷èòûâàíèå ñïèñêà àðãóìåíòîâ èç çàïðîñà */
|
||||
function RQ_PAYLOAD_ARGUMENTS_GET
|
||||
(
|
||||
XRQ_ROOT in PKG_XPATH.TNODE, -- Êîðíåâàÿ âåòêà çàïðîñà
|
||||
NREQUIRED in number := 0 -- Ôëàã âûäà÷è ñîîáùåíèÿ îá îøèáêå â ñëó÷àå îòñóòñòâèÿ çíà÷åíèÿ (0 - íå âûäàâàòü, 1 - âûäàâàòü)
|
||||
) return TARGUMENTS -- Êîëëåêöèÿ àðãóìåíòîâ èç çàïðîñà
|
||||
is
|
||||
RES TARGUMENTS; -- Ðåçóëüòàò ðàáîòû
|
||||
SRQ_ARGUMENTS_PATH PKG_STD.TSTRING; -- Ïîëíûé ïóòü äî àðãóìåíòîâ âûáîðêè â çàïðîñå
|
||||
XRQ_ARGUMENTS PKG_XPATH.TNODES; -- Êîëëåêöèÿ ýëåìåíòîâ äîêóìåíòà çàïðîñà ñ àðãóìåíòàìè
|
||||
XRQ_ARGUMENT PKG_XPATH.TNODE; -- Ýëåìåíò äîêóìåíòà çàïðîñà ñ àðãóìåíòîâ
|
||||
begin
|
||||
/* Èíèöèàëèçèðóåì ðåçóëüòàò */
|
||||
RES := TARGUMENTS();
|
||||
/* Ñôîðìèðóåì ïîëíûé ïóòü äî àðãóìåíòîâ â âûáîðêå */
|
||||
SRQ_ARGUMENTS_PATH := RQ_PAYLOAD_ITEM_PATH_GET(SITEM_TAG => SRQ_TAG_XARGUMENTS) || '/' || SRQ_TAG_XARGUMENT;
|
||||
/* Ñ÷èòàåì êîëëåêöèþ àðãóìåíòîâ èç äîêóìåíòà */
|
||||
XRQ_ARGUMENTS := PKG_XPATH.LIST_NODES(RPARENT_NODE => XRQ_ROOT, SPATTERN => SRQ_ARGUMENTS_PATH);
|
||||
/* Îáõîäèì êîëëåêöèþ àðãóìåíòîâ èç äîêóìåíòà */
|
||||
for I in 1 .. PKG_XPATH.COUNT_NODES(RNODES => XRQ_ARGUMENTS)
|
||||
loop
|
||||
/* Áåðåì î÷åðåäíîé àðãóìåíò */
|
||||
XRQ_ARGUMENT := PKG_XPATH.ITEM_NODE(RNODES => XRQ_ARGUMENTS, INUMBER => I);
|
||||
/* Äîáàâëÿåì åãî â âûõîäíóþ êîëëåêöèþ */
|
||||
RES.EXTEND();
|
||||
RES(RES.LAST).SNAME := NODE_SVAL_GET(XROOT => XRQ_ARGUMENT, SPATH => SRQ_TAG_SNAME);
|
||||
RES(RES.LAST).SDATA_TYPE := NODE_SVAL_GET(XROOT => XRQ_ARGUMENT, SPATH => SRQ_TAG_SDATA_TYPE);
|
||||
/* Ïðîâåðèì êîððåêòíîñòü äàííûõ - íàèìåíîâàíèå */
|
||||
if (RES(RES.LAST).SNAME is null) then
|
||||
P_EXCEPTION(0,
|
||||
'Äëÿ àðãóìåíòà íå çàäàíî íàèìåíîâàíèå (%s).',
|
||||
SRQ_ARGUMENTS_PATH || '/' || SRQ_TAG_SNAME);
|
||||
end if;
|
||||
/* Ïðîâåðèì êîððåêòíîñòü äàííûõ - òèï äàííûõ */
|
||||
if (RES(RES.LAST).SDATA_TYPE is null) then
|
||||
P_EXCEPTION(0,
|
||||
'Äëÿ àðãóìåíòà "%s" íå çàäàí òèï äàííûõ (%s).',
|
||||
RES(RES.LAST).SNAME,
|
||||
SRQ_ARGUMENTS_PATH || '/' || SRQ_TAG_SDATA_TYPE);
|
||||
end if;
|
||||
/* Ñ÷èòàåì çíà÷åíèå â çàâèñèìîñòè îò òèïà äàííûõ */
|
||||
case
|
||||
/* Ñòðîêà */
|
||||
when (RES(RES.LAST).SDATA_TYPE = SDATA_TYPE_STR) then
|
||||
RES(RES.LAST).SVALUE := NODE_SVAL_GET(XROOT => XRQ_ARGUMENT, SPATH => SRQ_TAG_VALUE);
|
||||
/* ×èñëî */
|
||||
when (RES(RES.LAST).SDATA_TYPE = SDATA_TYPE_NUMB) then
|
||||
RES(RES.LAST).NVALUE := NODE_NVAL_GET(XROOT => XRQ_ARGUMENT, SPATH => SRQ_TAG_VALUE);
|
||||
/* Äàòà */
|
||||
when (RES(RES.LAST).SDATA_TYPE = SDATA_TYPE_DATE) then
|
||||
RES(RES.LAST).DVALUE := NODE_DVAL_GET(XROOT => XRQ_ARGUMENT, SPATH => SRQ_TAG_VALUE);
|
||||
/* Òåêñò */
|
||||
when (RES(RES.LAST).SDATA_TYPE = SDATA_TYPE_CLOB) then
|
||||
RES(RES.LAST).CVALUE := NODE_CVAL_GET(XROOT => XRQ_ARGUMENT, SPATH => SRQ_TAG_VALUE);
|
||||
/* Íåïîääåðæèâàåìûé òèï äàííûõ */
|
||||
else
|
||||
P_EXCEPTION(0,
|
||||
'Óêàçàííûé äëÿ àðãóìåíòà "%s" òèï äàííûõ "%s" íå ïîääåðæèâàåòñÿ (%s).',
|
||||
RES(RES.LAST).SNAME,
|
||||
RES(RES.LAST).SDATA_TYPE,
|
||||
SRQ_ARGUMENTS_PATH || '/' || SRQ_TAG_SDATA_TYPE);
|
||||
end case;
|
||||
end loop;
|
||||
/* Ïðîâåðêà îáÿçàòåëüíîñòè */
|
||||
if ((RES.COUNT = 0) and (NREQUIRED = 1)) then
|
||||
P_EXCEPTION(0, 'Íå óêàçàíû àðãóìåíòû (' || SRQ_ARGUMENTS_PATH || ').');
|
||||
end if;
|
||||
/* Âîçâðàùàåì ðåçóëüòàò */
|
||||
return RES;
|
||||
end RQ_PAYLOAD_ARGUMENTS_GET;
|
||||
|
||||
/* Èñïîëíåíèå õðàíèìîé ïðîöåäóðû */
|
||||
procedure EXEC_STORED
|
||||
(
|
||||
XRQ_ROOT in PKG_XPATH.TNODE, -- Êîðíåâîé ýëåìåíò òåëà äîêóìåíòà çàïðîñà
|
||||
COUT out clob -- Îòâåò íà çàïðîñ
|
||||
)
|
||||
is
|
||||
SRQ_STORED PKG_STD.TSTRING; -- Íàèìåíîâàíèå èñïîëíÿåìîãî õðàíèìîãî îáúåêòà èç çàïðîñà
|
||||
SRQ_RESP_ARG PKG_STD.TSTRING; -- Íàèìåíîâàíèå âûõîäíîãî àðãóìåíòà õðàíèìîãî îáúåêòà èç çàïðîñà äëÿ ôîðìèðîâàíèÿ òåëà îòâåòà
|
||||
RQ_ARGUMENTS TARGUMENTS; -- Êîëëåêöèÿ àðãóìåíòîâ õðàíèìîãî îáúåêòà èç çàïðîñà
|
||||
ARGS PKG_OBJECT_DESC.TARGUMENTS; -- Êîëëåêöèÿ ôîðìàëüíûõ ïàðàìåòðîâ õðàíèìîãî îáúåêòà
|
||||
RARG PKG_OBJECT_DESC.TARGUMENT; -- Ôîðìàëüíûé ïàðàìåòð õðàíèìîãî îáúåêòà
|
||||
ARGS_VALS PKG_CONTPRMLOC.TCONTAINER; -- Êîíòåéíåð äëÿ ôàêòè÷åñêèõ ïàðàìåòðîâ õðàíèìîãî îáúåêòà
|
||||
RARG_VAL PKG_CONTAINER.TPARAM; -- Ôàêòè÷åñêèé ïàðàìåòð õðàíèìîãî îáúåêòà
|
||||
SARG_NAME PKG_STD.TSTRING; -- Íàèìåíîâàíèå òåêóùåãî îáðàáàòûâàåìîãî ôàêòè÷åñêîãî ïàðàìåòðà õðàíèìîãî îáúåêòà
|
||||
XRESP integer; -- Äîêóìåíò äëÿ îòâåòà
|
||||
XRESP_OUT_ARGUMENTS PKG_XMAKE.TNODE; -- Ýëåìåíò äëÿ êîëëåêöèè âûõîäíûõ ïàðàìåòðîâ õðàíèìîãî îáúåêòà
|
||||
RRESP_ARGUMENT_VALUE PKG_XMAKE.TVALUE; -- Çíà÷åíèå âûõîäíîãî ïàðàìåòðà õðàíèìîãî îáúåêòà
|
||||
BRESP_ARG_FOUND boolean := false; -- Ôëàã ïðèñóòñòâèÿ â ñîñòàâå âûõîäíûõ àðãóìåíòîâ àðãóìåíòà ñ òèïîì CLOB è èìåíåì, óêàçàííûì â ïàðàìåòðå çàïðîñà SRESP_ARG
|
||||
begin
|
||||
/* Ñîçäà¸ì äîêóìåíò äëÿ îòâåòà */
|
||||
XRESP := PKG_XMAKE.OPEN_CURSOR();
|
||||
/* Ïðîâåðèì õðàíèìûé îáúåêò â çàïðîñå */
|
||||
RQ_PAYLOAD_STORED_CHECK(XRQ_ROOT => XRQ_ROOT);
|
||||
/* Ñ÷èòûâàåì íàèìåíîâàíèå õðàíèìîãî îáúåêòà èç çàïðîñà */
|
||||
SRQ_STORED := RQ_PAYLOAD_STORED_GET(XRQ_ROOT => XRQ_ROOT, NREQUIRED => 1);
|
||||
/* Ñ÷èòûâàåì íàèìåíîâàíèå âûõîäíîãî àðãóìåíòà õðàíèìîãî îáúåêòà èç çàïðîñà äëÿ ôîðìèðîâàíèÿ òåëà îòâåòà */
|
||||
SRQ_RESP_ARG := NODE_SVAL_GET(XROOT => XRQ_ROOT,
|
||||
SPATH => RQ_PAYLOAD_ITEM_PATH_GET(SITEM_TAG => SRQ_TAG_SRESP_ARG),
|
||||
NREQUIRED => 0,
|
||||
SMESSAGE_OBJECT => 'Íàèìåíîâàíèå âûõîäíîãî àðãóìåíòà äëÿ ôîðìèðîâàíèÿ òåëà îòâåòà');
|
||||
/* Ñ÷èòàåì ñïèñîê àðãóìåíòîâ èç çàïðîñà */
|
||||
RQ_ARGUMENTS := RQ_PAYLOAD_ARGUMENTS_GET(XRQ_ROOT => XRQ_ROOT);
|
||||
/* Ñ÷èòûâàåì îïèñàíèå ïàðàìåòðîâ õðàíèìîãî îáúåêòà */
|
||||
ARGS := PKG_OBJECT_DESC.DESC_ARGUMENTS(SSTORED_NAME => SRQ_STORED, BRAISE_ERROR => true);
|
||||
/* Îáõîäèì âõîäíûå ïàðàìåòðû è ôîðìèðóåì êîëëåêöèþ çíà÷åíèé */
|
||||
for I in 1 .. PKG_OBJECT_DESC.COUNT_ARGUMENTS(RARGUMENTS => ARGS)
|
||||
loop
|
||||
/* Ñ÷èòûâàåì î÷åðåäíîé ïàðàìåòð */
|
||||
RARG := PKG_OBJECT_DESC.FETCH_ARGUMENT(RARGUMENTS => ARGS, IINDEX => I);
|
||||
/* Åñëè ýòî âõîäíîé ïàðàìåòð */
|
||||
if (RARG.IN_OUT in (PKG_STD.PARAM_TYPE_IN, PKG_STD.PARAM_TYPE_IN_OUT)) then
|
||||
/* Äîáàâèì åãî çíà÷åíèå â êîëëåêöèþ ôàêòè÷åñêèõ ïàðàìåòðîâ */
|
||||
case RARG.DATA_TYPE
|
||||
/* Ñòðîêà */
|
||||
when PKG_STD.DATA_TYPE_STR then
|
||||
PKG_CONTPRMLOC.APPENDS(RCONTAINER => ARGS_VALS,
|
||||
SNAME => RARG.ARGUMENT_NAME,
|
||||
SVALUE => TARGUMENTS_SVAL_GET(ARGUMENTS => RQ_ARGUMENTS,
|
||||
SARGUMENT => RARG.ARGUMENT_NAME),
|
||||
NIN_OUT => RARG.IN_OUT);
|
||||
/* ×èñëî */
|
||||
when PKG_STD.DATA_TYPE_NUM then
|
||||
PKG_CONTPRMLOC.APPENDN(RCONTAINER => ARGS_VALS,
|
||||
SNAME => RARG.ARGUMENT_NAME,
|
||||
NVALUE => TARGUMENTS_NVAL_GET(ARGUMENTS => RQ_ARGUMENTS,
|
||||
SARGUMENT => RARG.ARGUMENT_NAME),
|
||||
NIN_OUT => RARG.IN_OUT);
|
||||
/* Äàòà */
|
||||
when PKG_STD.DATA_TYPE_DATE then
|
||||
PKG_CONTPRMLOC.APPENDD(RCONTAINER => ARGS_VALS,
|
||||
SNAME => RARG.ARGUMENT_NAME,
|
||||
DVALUE => TARGUMENTS_DVAL_GET(ARGUMENTS => RQ_ARGUMENTS,
|
||||
SARGUMENT => RARG.ARGUMENT_NAME),
|
||||
NIN_OUT => RARG.IN_OUT);
|
||||
/* Òåêñò */
|
||||
when PKG_STD.DATA_TYPE_CLOB then
|
||||
PKG_CONTPRMLOC.APPENDLC(RCONTAINER => ARGS_VALS,
|
||||
SNAME => RARG.ARGUMENT_NAME,
|
||||
LCVALUE => TARGUMENTS_CVAL_GET(ARGUMENTS => RQ_ARGUMENTS,
|
||||
SARGUMENT => RARG.ARGUMENT_NAME),
|
||||
NIN_OUT => RARG.IN_OUT);
|
||||
/* Íåèçâåñòíûé òèï äàííûõ */
|
||||
else
|
||||
P_EXCEPTION(0,
|
||||
'Òèï äàííûõ (%s) âõîäíîãî ïàðàìåòðà "%s" íå ïîääåðæèâàåòñÿ.',
|
||||
RARG.DB_DATA_TYPE,
|
||||
RARG.ARGUMENT_NAME);
|
||||
end case;
|
||||
end if;
|
||||
end loop;
|
||||
/* Èñïîëíÿåì ïðîöåäóðó */
|
||||
PKG_SQL_CALL.EXECUTE_STORED(SSTORED_NAME => SRQ_STORED, RPARAM_CONTAINER => ARGS_VALS);
|
||||
/* Îáõîäèì âûõîäíûå ïàðàìåòðû è ñîáèðàåì èõ â îòâåò */
|
||||
SARG_NAME := PKG_CONTPRMLOC.FIRST_(RCONTAINER => ARGS_VALS);
|
||||
while (SARG_NAME is not null)
|
||||
loop
|
||||
/* Ñ÷èòûâàåì î÷åðåäíîé ïàðàìåòð */
|
||||
RARG_VAL := PKG_CONTPRMLOC.GET(RCONTAINER => ARGS_VALS, SNAME => SARG_NAME);
|
||||
/* Åñëè ýòî âûõîäíîé ïàðàìåòð */
|
||||
if (RARG_VAL.IN_OUT in (PKG_STD.PARAM_TYPE_IN_OUT, PKG_STD.PARAM_TYPE_OUT)) then
|
||||
/* Ñôîðìèðóåì äëÿ íåãî çíà÷åíèå â çàâèñèìîñòè îò åãî òèïà */
|
||||
case RARG_VAL.DATA_TYPE
|
||||
/* Ñòðîêà */
|
||||
when PKG_STD.DATA_TYPE_STR then
|
||||
RRESP_ARGUMENT_VALUE := PKG_XMAKE.VALUE(ICURSOR => XRESP,
|
||||
SVALUE => PKG_CONTPRMLOC.GETS(RCONTAINER => ARGS_VALS,
|
||||
SNAME => RARG_VAL.NAME));
|
||||
/* ×èñëî */
|
||||
when PKG_STD.DATA_TYPE_NUM then
|
||||
RRESP_ARGUMENT_VALUE := PKG_XMAKE.VALUE(ICURSOR => XRESP,
|
||||
NVALUE => PKG_CONTPRMLOC.GETN(RCONTAINER => ARGS_VALS,
|
||||
SNAME => RARG_VAL.NAME));
|
||||
/* Äàòà */
|
||||
when PKG_STD.DATA_TYPE_DATE then
|
||||
RRESP_ARGUMENT_VALUE := PKG_XMAKE.VALUE(ICURSOR => XRESP,
|
||||
DVALUE => PKG_CONTPRMLOC.GETD(RCONTAINER => ARGS_VALS,
|
||||
SNAME => RARG_VAL.NAME));
|
||||
/* Òåêñò */
|
||||
when PKG_STD.DATA_TYPE_CLOB then
|
||||
RRESP_ARGUMENT_VALUE := PKG_XMAKE.VALUE(ICURSOR => XRESP,
|
||||
LCVALUE => PKG_CONTPRMLOC.GETLC(RCONTAINER => ARGS_VALS,
|
||||
SNAME => RARG_VAL.NAME));
|
||||
if ((SRQ_RESP_ARG is not null) and (RARG_VAL.NAME = SRQ_RESP_ARG)) then
|
||||
COUT := PKG_CONTPRMLOC.GETLC(RCONTAINER => ARGS_VALS, SNAME => RARG_VAL.NAME);
|
||||
BRESP_ARG_FOUND := true;
|
||||
exit;
|
||||
end if;
|
||||
/* Íåèçâåñòíûé òèï äàííûõ */
|
||||
else
|
||||
P_EXCEPTION(0,
|
||||
'Òèï äàííûõ (%s) âûõîäíîãî ïàðàìåòðà "%s" íå ïîääåðæèâàåòñÿ.',
|
||||
RARG.DB_DATA_TYPE,
|
||||
RARG.ARGUMENT_NAME);
|
||||
end case;
|
||||
/* Äîáàâèì âåòêó âûõîäíîãî ïàðàìåòðà â âûõîäíóþ êîëëåêöèþ */
|
||||
XRESP_OUT_ARGUMENTS := PKG_XMAKE.CONCAT(ICURSOR => XRESP,
|
||||
RNODE00 => XRESP_OUT_ARGUMENTS,
|
||||
RNODE01 => PKG_XMAKE.ELEMENT(ICURSOR => XRESP,
|
||||
SNAME => SRESP_TAG_XOUT_ARGUMENTS,
|
||||
RNODE00 => PKG_XMAKE.ELEMENT(ICURSOR => XRESP,
|
||||
SNAME => SRESP_TAG_SNAME,
|
||||
RVALUE00 => PKG_XMAKE.VALUE(ICURSOR => XRESP,
|
||||
SVALUE => RARG_VAL.NAME)),
|
||||
RNODE01 => PKG_XMAKE.ELEMENT(ICURSOR => XRESP,
|
||||
SNAME => SRESP_TAG_VALUE,
|
||||
RVALUE00 => RRESP_ARGUMENT_VALUE),
|
||||
RNODE02 => PKG_XMAKE.ELEMENT(ICURSOR => XRESP,
|
||||
SNAME => SRESP_TAG_SDATA_TYPE,
|
||||
RVALUE00 => PKG_XMAKE.VALUE(ICURSOR => XRESP,
|
||||
SVALUE => STD_DATA_TYPE_TO_STR(NSTD_DATA_TYPE => RARG_VAL.DATA_TYPE)))));
|
||||
end if;
|
||||
/* Ñ÷èòûâàåì íàèìåíîâàíèå ñëåäóþùåãî ïàðàìåòðà */
|
||||
SARG_NAME := PKG_CONTPRMLOC.NEXT_(RCONTAINER => ARGS_VALS, SNAME => SARG_NAME);
|
||||
end loop;
|
||||
/* Ïðîâåðèì, ÷òî áûë íàéäåí îïöèîíàëüíûé àðãóìåíò äëÿ ôîðìèðîâàíèÿ ïîëíîãî îòâåòà */
|
||||
if ((SRQ_RESP_ARG is not null) and (not BRESP_ARG_FOUND)) then
|
||||
P_EXCEPTION(0,
|
||||
'Â ñîñòàâå âûõîäíûõ ïàðàìåòðîâ "%s" îòñóñòâóåò àðãóìåíò "%s" òèïà "CLOB".',
|
||||
SRQ_STORED,
|
||||
SRQ_RESP_ARG);
|
||||
end if;
|
||||
/* Ñîáèðàåì îòâåò (òîëüêî åñëè íå ôîðìèðîâàëè ïîëíûé îòâåò ÷åðåç àðãóìåíò äëÿ ôîðìèðîâàíèÿ ïîëíîãî îòâåòà) */
|
||||
if (not BRESP_ARG_FOUND) then
|
||||
COUT := PKG_XMAKE.SERIALIZE_TO_CLOB(ICURSOR => XRESP,
|
||||
ITYPE => PKG_XMAKE.CONTENT_,
|
||||
RNODE => PKG_XMAKE.ELEMENT(ICURSOR => XRESP,
|
||||
SNAME => SRESP_TAG_XPAYLOAD,
|
||||
RNODE00 => XRESP_OUT_ARGUMENTS));
|
||||
end if;
|
||||
/* Î÷èñòèì êîíòåéíåð ïàðàìåòðîâ */
|
||||
PKG_CONTPRMLOC.PURGE(RCONTAINER => ARGS_VALS);
|
||||
/* Îñâîáîæäàåì äîêóìåíò ðåçóëüòàòà */
|
||||
PKG_XMAKE.CLOSE_CURSOR(ICURSOR => XRESP);
|
||||
exception
|
||||
when others then
|
||||
/* Çàêðîåì êóðñîð è âåðíåì îøèáêó */
|
||||
PKG_XMAKE.CLOSE_CURSOR(ICURSOR => XRESP);
|
||||
/* Ïîêàæåì îøèáêó */
|
||||
PKG_STATE.DIAGNOSTICS_STACKED();
|
||||
P_EXCEPTION(0, PKG_STATE.SQL_ERRM());
|
||||
end EXEC_STORED;
|
||||
|
||||
/* Áàçîâîå èñïîëíåíèå äåéñòâèé */
|
||||
procedure PROCESS
|
||||
(
|
||||
CIN in clob, -- Âõîäíûå ïàðàìåòðû
|
||||
COUT out clob -- Ðåçóëüòàò
|
||||
)
|
||||
is
|
||||
XRQ_ROOT PKG_XPATH.TNODE; -- Êîðíåâîé ýëåìåíò òåëà äîêóìåíòà çàïðîñà
|
||||
SRQ_ACTION PKG_STD.TSTRING; -- Êîä äåéñòâèÿ èç çàïðîñà
|
||||
begin
|
||||
PKG_TRACE.REGISTER(SDATA => 'P8PANELS', SDATA1 => CIN);
|
||||
/* Ðàçáèðàåì çàïðîñ */
|
||||
XRQ_ROOT := RQ_ROOT_GET(CRQ => CIN);
|
||||
/* Ñ÷èòûâàåì êîä äåéñòâèÿ èç çàïðîñà */
|
||||
SRQ_ACTION := RQ_ACTION_GET(XRQ_ROOT => XRQ_ROOT, NREQUIRED => 1);
|
||||
/* Âûçûâàåì îáðàáîò÷èê â çàâèñèìîñòè îò êîäà äåéñòâèÿ */
|
||||
case SRQ_ACTION
|
||||
/* Èñïîëíåíèå õðàíèìîé ïðîöåäóðû */
|
||||
when SRQ_ACTION_EXEC_STORED then
|
||||
EXEC_STORED(XRQ_ROOT => XRQ_ROOT, COUT => COUT);
|
||||
/* Íåèçâåñòíîå äåéñòâèå */
|
||||
else
|
||||
P_EXCEPTION(0, 'Äåéñòâèå "%s" íå ïîääåðæèâàåòñÿ.', SRQ_ACTION);
|
||||
end case;
|
||||
end PROCESS;
|
||||
|
||||
end PKG_P8PANELS_BASE;
|
||||
/
|
2827
db/PKG_P8PANELS_PROJECTS.pck
Normal file
2827
db/PKG_P8PANELS_PROJECTS.pck
Normal file
File diff suppressed because it is too large
Load Diff
1131
db/PKG_P8PANELS_VISUAL.pck
Normal file
1131
db/PKG_P8PANELS_VISUAL.pck
Normal file
File diff suppressed because it is too large
Load Diff
143
db/UDO_P_P8PANELS_AGNLIST.prc
Normal file
143
db/UDO_P_P8PANELS_AGNLIST.prc
Normal file
@ -0,0 +1,143 @@
|
||||
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;
|
||||
/
|
23
db/UDO_P_P8PANELS_TEST.prc
Normal file
23
db/UDO_P_P8PANELS_TEST.prc
Normal file
@ -0,0 +1,23 @@
|
||||
create or replace procedure UDO_P_P8PANELS_TEST
|
||||
(
|
||||
NRN in number,
|
||||
DDATE in date,
|
||||
CFILTERS in clob,
|
||||
CORDERS in clob,
|
||||
NRES out number,
|
||||
SRES out varchar2,
|
||||
COUT out clob,
|
||||
DD out date
|
||||
)
|
||||
is
|
||||
begin
|
||||
NRES:=NRN*2;
|
||||
--DBMS_LOCK.SLEEP(3);
|
||||
if (DDATE is not null) then p_exception(0, to_char(ddate, 'dd.mm.yyyy hh24:mi:ss')); end if;
|
||||
SRES:='Î÷åíü õîðîøàÿ ïîãîäà';
|
||||
COUT:='Ïðîñòî òåêñò';
|
||||
--COUT:='<DATA><XROWS><COL1>333</COL1><COL2>444</COL2></XROWS><EXTRA>123</EXTRA><MORE>dfgsfg</MORE></DATA>';
|
||||
--COUT:='<DATA><XOUT_ARGUMENTS><SNAME>333</SNAME><VALUE>444</VALUE></XOUT_ARGUMENTS><XOUT_ARGUMENTS><SNAME>qqq</SNAME><VALUE>555</VALUE></XOUT_ARGUMENTS><XOUT_ARGUMENTS><SNAME>qsvfvr</SNAME><VALUE>432</VALUE></XOUT_ARGUMENTS><EXTRA>123</EXTRA><MORE>dfgsfg</MORE></DATA>';
|
||||
DD := DDATE;
|
||||
end;
|
||||
/
|
Loading…
x
Reference in New Issue
Block a user