Реализованы процедуры обмена для позиций ведомостей инвентаризации (GETSHEETITEMS), мест хранения (GETSTORAGES), импорта данных инвентаризации (SAVESHEETITEM). Сервисные процедуры: поиска структурной части адреса, формирования ответа с ошибкой

This commit is contained in:
Mikhail Chechnev 2019-01-14 00:38:27 +03:00
parent 75f02e4528
commit 64c97fd00d

View File

@ -1,5 +1,12 @@
create or replace package UDO_PKG_EXS_INV as create or replace package UDO_PKG_EXS_INV as
/* Ñ÷èòûâàíèå çíà÷åíèÿ ñòðóêòóðíîãî ýëåìåíòà èç èåðàðõèè àäðåñà ãåîãðàôè÷åñêîãî ïîíÿòèÿ */
function UTL_GEOGRAFY_GET_HIER_ITEM
(
NGEOGRAFY in number, -- Ðåãèñòðàöèîííûé íîìåð ãåîãðàôè÷åñêîãî ïîíÿòèÿ
NGEOGRTYPE in number -- Òèï èñêîìîãî ñòðóêòóðíîãî ýëåìåíòà àäðåñà (1 - ñòðàíà, 2 - ðåãèîí, 3 - ðàéîí, 4 - íàñåëåííûé ïóíêò, 5 - óëèöà, 6 - àäìèíèñòðàòèâíûé îêðóã, 7 - ìóíèöèïàëüíûé îêðóã, 8 - ãîðîä, 9 - óðîâåíü âíóòðèãîðîäñêîé òåððèòîðèè, 10 - óðîâåíü äîïîëíèòåëüíûõ òåððèòîðèé, 11 - óðîâåíü ïîä÷èíåííûõ äîïîëíèòåëüíûì òåððèòîðèÿì îáúåêòîâ)
) return varchar2; -- Íàèìåíîâàíèå íàéäåííîãî ñòóêòóðíîãî ýëåìåíòà àäðåñà
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */ /* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */
procedure CHECKAUTH procedure CHECKAUTH
( (
@ -49,6 +56,13 @@ create or replace package UDO_PKG_EXS_INV as
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
); );
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñîõðàíåíèå ðåçóëüòàòîâ èíâåíòàðèçàöèè (ÄÅÌÎ, óáðàòü!!!!) */
procedure SAVESHEETITEM_TMP
(
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
);
end; end;
/ /
create or replace package body UDO_PKG_EXS_INV as create or replace package body UDO_PKG_EXS_INV as
@ -59,6 +73,9 @@ create or replace package body UDO_PKG_EXS_INV as
SGETUSERSRESPONSE constant varchar2(40) := 'GetUsersResponse'; SGETUSERSRESPONSE constant varchar2(40) := 'GetUsersResponse';
SGETSHEETTYPESRESPONSE constant varchar2(40) := 'GetSheetTypesResponse'; SGETSHEETTYPESRESPONSE constant varchar2(40) := 'GetSheetTypesResponse';
SGETSHEETSRESPONSE constant varchar2(40) := 'GetSheetsResponse'; SGETSHEETSRESPONSE constant varchar2(40) := 'GetSheetsResponse';
SGETSTORAGESRESPONSE constant varchar2(40) := 'GetStoragesResponse';
SGETSHEETITEMSRESPONSE constant varchar2(40) := 'GetSheetItemsResponse';
SSAVESHEETITEMRESPONSE constant varchar2(40) := 'SaveSheetItemResponse';
SDEVICEID constant varchar2(40) := 'DeviceID'; SDEVICEID constant varchar2(40) := 'DeviceID';
SRESULT constant varchar2(40) := 'Result'; SRESULT constant varchar2(40) := 'Result';
SSOAPENV constant varchar2(40) := 'soapenv'; SSOAPENV constant varchar2(40) := 'soapenv';
@ -72,6 +89,44 @@ create or replace package body UDO_PKG_EXS_INV as
SPREFIX constant varchar2(40) := 'Prefix'; SPREFIX constant varchar2(40) := 'Prefix';
SNUMBER constant varchar2(40) := 'Number'; SNUMBER constant varchar2(40) := 'Number';
SDATE constant varchar2(40) := 'Date'; SDATE constant varchar2(40) := 'Date';
SSHEETCODE constant varchar2(40) := 'SheetCode';
SMNEMOCODE constant varchar2(40) := 'MnemoCode';
SLATITUDE constant varchar2(40) := 'Latitude';
SLONGITUDE constant varchar2(40) := 'Longitude';
SPOSTCODE constant varchar2(40) := 'Postcode';
SCOUNTRY constant varchar2(40) := 'Country';
SREGION constant varchar2(40) := 'Region';
SLOCALITY constant varchar2(40) := 'Locality';
SSTREET constant varchar2(40) := 'Street';
SHOUSENUMBER constant varchar2(40) := 'HouseNumber';
SSTORAGEMNEMOCODE constant varchar2(40) := 'StorageMnemoCode';
SUSERCODE constant varchar2(40) := 'UserCode';
SITEMCODE constant varchar2(40) := 'ItemCode';
SITEMNAME constant varchar2(40) := 'ItemName';
SITEMMNEMOCODE constant varchar2(40) := 'ItemMnemoCode';
SITEMNUMBER constant varchar2(40) := 'ItemNumber';
SQUANTITY constant varchar2(40) := 'Quantity';
SSTORAGEISNEW constant varchar2(40) := 'StorageIsNew';
SSTORAGECODE constant varchar2(40) := 'StorageCode';
SSTORAGENAME constant varchar2(40) := 'StorageName';
SSTORAGEPOSTCODE constant varchar2(40) := 'StoragePostcode';
SSTORAGECOUNTRY constant varchar2(40) := 'StorageCountry';
SSTORAGEREGION constant varchar2(40) := 'StorageRegion';
SSTORAGELOCALITY constant varchar2(40) := 'StorageLocality';
SSTORAGESTREET constant varchar2(40) := 'StorageStreet';
SSTORAGEHOUSENUMBER constant varchar2(40) := 'StorageHouseNumber';
SSTORAGELATITUDE constant varchar2(40) := 'StorageLatitude';
SSTORAGELONGITUDE constant varchar2(40) := 'StorageLongitude';
SCHECKDATE constant varchar2(40) := 'CheckDate';
SCOMMENT constant varchar2(40) := 'Comment';
SDISTANCETOSTORAGE constant varchar2(40) := 'DistanceToStorage';
SFLOOR constant varchar2(40) := 'Floor';
SROOM constant varchar2(40) := 'Room';
SRACK constant varchar2(40) := 'Rack';
SFAULT constant varchar2(40) := 'Fault';
SDETAIL constant varchar2(40) := 'detail';
SMESSAGE constant varchar2(40) := 'Message';
SERRORMESSAGE constant varchar2(40) := 'ErrorMessage';
/* Ñîçäàíèå âåòêè XML */ /* Ñîçäàíèå âåòêè XML */
function UTL_CREATENODE function UTL_CREATENODE
@ -154,12 +209,12 @@ create or replace package body UDO_PKG_EXS_INV as
XCONTENT in DBMS_XMLDOM.DOMNODE -- Íàèìåíîâàíèå òýãà ñ îòïðàâëÿåìûì êîíòåíòîì XCONTENT in DBMS_XMLDOM.DOMNODE -- Íàèìåíîâàíèå òýãà ñ îòïðàâëÿåìûì êîíòåíòîì
) return clob -- Ðåçóëüòàò ðàáîòû ) return clob -- Ðåçóëüòàò ðàáîòû
is is
XMAIN_NODE DBMS_XMLDOM.DOMNODE; XMAIN_NODE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò äîêóìåíòà
XENVELOPE_EL DBMS_XMLDOM.DOMELEMENT; XENVELOPE_EL DBMS_XMLDOM.DOMELEMENT; -- Ýëåìåíò äëÿ îá¸ðòêè îòâåòà
XENVELOPE DBMS_XMLDOM.DOMNODE; XENVELOPE DBMS_XMLDOM.DOMNODE; -- Îá¸ðòêà îòâåòà
XHEADER DBMS_XMLDOM.DOMNODE; XHEADER DBMS_XMLDOM.DOMNODE; -- Ýëåìåíò äëÿ çàãîëîâîêà îòâåòà
XBODY DBMS_XMLDOM.DOMNODE; XBODY DBMS_XMLDOM.DOMNODE; -- Ýëåìåíò äëÿ òåëà îòâåòà
XNODE DBMS_XMLDOM.DOMNODE; XNODE DBMS_XMLDOM.DOMNODE; -- Òåêóùèé ýëåìåíò äîêóìåíòà
CDATA clob; -- Áóôåð äëÿ ðåçóëüòàòà CDATA clob; -- Áóôåð äëÿ ðåçóëüòàòà
begin begin
/* Ïîäãîòîâèì äîêóìåíò */ /* Ïîäãîòîâèì äîêóìåíò */
@ -190,6 +245,59 @@ create or replace package body UDO_PKG_EXS_INV as
return CDATA; return CDATA;
end UTL_CREATERESPONSE; end UTL_CREATERESPONSE;
/* Ôîðìèðîâàíèå îòâåòà ñ îøèáêîé */
function UTL_CREATEERRORRESPONSE
(
XDOC in DBMS_XMLDOM.DOMDOCUMENT, -- Äîêóìåíò
SMSG in varchar2 -- Ñîîáùåíèå îá îøèáêå
) return clob -- Ðåçóëüòàò ðàáîòû
is
XFAULT DBMS_XMLDOM.DOMNODE; --
XDETAIL DBMS_XMLDOM.DOMNODE; --
XERRMSG DBMS_XMLDOM.DOMNODE; --
XMSG DBMS_XMLDOM.DOMNODE; --
XNODE DBMS_XMLDOM.DOMNODE; --
CDATA clob; -- Áóôåð äëÿ ðåçóëüòàòà
begin
/* Ñîáèðàåì îøèáêó â îòâåò */
XFAULT := UTL_CREATENODE(XDOC => XDOC, STAG => SFAULT, SNS => SSOAPENV);
XDETAIL := UTL_CREATENODE(XDOC => XDOC, STAG => SDETAIL);
XERRMSG := UTL_CREATENODE(XDOC => XDOC, STAG => SERRORMESSAGE, SNS => STSD);
XMSG := UTL_CREATENODE(XDOC => XDOC, STAG => SMESSAGE, SNS => STSD, SVAL => SMSG);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XERRMSG, NEWCHILD => XMSG);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XDETAIL, NEWCHILD => XERRMSG);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XFAULT, NEWCHILD => XDETAIL);
CDATA := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XFAULT);
/* Âîçâðàùàåì ðåçóëüòàò */
return CDATA;
end UTL_CREATEERRORRESPONSE;
/* Ñ÷èòûâàíèå çíà÷åíèÿ ñòðóêòóðíîãî ýëåìåíòà èç èåðàðõèè àäðåñà ãåîãðàôè÷åñêîãî ïîíÿòèÿ */
function UTL_GEOGRAFY_GET_HIER_ITEM
(
NGEOGRAFY in number, -- Ðåãèñòðàöèîííûé íîìåð ãåîãðàôè÷åñêîãî ïîíÿòèÿ
NGEOGRTYPE in number -- Òèï èñêîìîãî ñòðóêòóðíîãî ýëåìåíòà àäðåñà (1 - ñòðàíà, 2 - ðåãèîí, 3 - ðàéîí, 4 - íàñåëåííûé ïóíêò, 5 - óëèöà, 6 - àäìèíèñòðàòèâíûé îêðóã, 7 - ìóíèöèïàëüíûé îêðóã, 8 - ãîðîä, 9 - óðîâåíü âíóòðèãîðîäñêîé òåððèòîðèè, 10 - óðîâåíü äîïîëíèòåëüíûõ òåððèòîðèé, 11 - óðîâåíü ïîä÷èíåííûõ äîïîëíèòåëüíûì òåððèòîðèÿì îáúåêòîâ)
) return varchar2 -- Íàèìåíîâàíèå íàéäåííîãî ñòóêòóðíîãî ýëåìåíòà àäðåñà
is
SRES PKG_STD.TSTRING; -- Ðåçóëüòàò ðàáîòû
begin
/* Îáõîäèì àäðåñ ñíèçó ââåðõ */
for REC in (select G.GEOGRNAME,
G.GEOGRTYPE
from GEOGRAFY G
connect by prior G.PRN = G.RN
start with G.RN = NGEOGRAFY)
loop
if (REC.GEOGRTYPE = NGEOGRTYPE) then
SRES := REC.GEOGRNAME;
exit;
end if;
end loop;
/* Âåðí¸ì ðåçóëüòàò */
return SRES;
end UTL_GEOGRAFY_GET_HIER_ITEM;
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */ /* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - àóòåíòèôèêàöèÿ */
procedure CHECKAUTH procedure CHECKAUTH
( (
@ -209,7 +317,7 @@ create or replace package body UDO_PKG_EXS_INV as
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
CREQ clob; -- Áóôåð äëÿ çàïðîñà CREQ clob; -- Áóôåð äëÿ çàïðîñà
SREQDEVICEID varchar2(30); -- Идентификатор устройства из запроса SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
begin begin
/* Ñ÷èòàåì çàïèñü î÷åðåäè */ /* Ñ÷èòàåì çàïèñü î÷åðåäè */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE); REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
@ -275,7 +383,7 @@ create or replace package body UDO_PKG_EXS_INV as
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
CREQ clob; -- Áóôåð äëÿ çàïðîñà CREQ clob; -- Áóôåð äëÿ çàïðîñà
SREQDEVICEID varchar2(30); -- Идентификатор устройства из запроса SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
begin begin
/* Ñ÷èòàåì çàïèñü î÷åðåäè */ /* Ñ÷èòàåì çàïèñü î÷åðåäè */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE); REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
@ -355,7 +463,7 @@ create or replace package body UDO_PKG_EXS_INV as
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
CREQ clob; -- Áóôåð äëÿ çàïðîñà CREQ clob; -- Áóôåð äëÿ çàïðîñà
SREQDEVICEID varchar2(30); -- Идентификатор устройства из запроса SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
begin begin
/* Ñ÷èòàåì çàïèñü î÷åðåäè */ /* Ñ÷èòàåì çàïèñü î÷åðåäè */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE); REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
@ -385,7 +493,7 @@ create or replace package body UDO_PKG_EXS_INV as
if (SREQDEVICEID is not null) then if (SREQDEVICEID is not null) then
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */ /* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XGETSHEETTYPESRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSHEETTYPESRESPONSE, SNS => STSD); XGETSHEETTYPESRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSHEETTYPESRESPONSE, SNS => STSD);
/* Обходим типы документов связанные с разделом "Электронные инвенторизации" */ /* Îáõîäèì òèïû äîêóìåíòîâ ñâÿçàííûå ñ ðàçäåëîì "Ýëåêòðîííûå èíâåíòàðèçàöèè" */
for REC in (select T.RN, for REC in (select T.RN,
T.DOCCODE T.DOCCODE
from DOCTYPES T, from DOCTYPES T,
@ -441,11 +549,11 @@ create or replace package body UDO_PKG_EXS_INV as
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
CREQ clob; -- Áóôåð äëÿ çàïðîñà CREQ clob; -- Áóôåð äëÿ çàïðîñà
SREQDEVICEID varchar2(30); -- Идентификатор устройства из запроса SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
NREQTYPECODE number(17); -- Тип ведомости из запроса (параметр отбора) NREQTYPECODE PKG_STD.TREF; -- Òèï âåäîìîñòè èç çàïðîñà (ïàðàìåòð îòáîðà)
SREQPREFIX varchar2(30); -- Префикс ведомости из запроса (параметр отбора) SREQPREFIX PKG_STD.TSTRING; -- Ïðåôèêñ âåäîìîñòè èç çàïðîñà (ïàðàìåòð îòáîðà)
SREQNUMBER varchar2(30); -- Номер ведомости из запроса (параметр отбора) SREQNUMBER PKG_STD.TSTRING; -- Íîìåð âåäîìîñòè èç çàïðîñà (ïàðàìåòð îòáîðà)
DREQDATE date; -- Дата ведомости из запроса (параметр отбора) DREQDATE PKG_STD.TLDATE; -- Äàòà âåäîìîñòè èç çàïðîñà (ïàðàìåòð îòáîðà)
begin begin
/* Ñ÷èòàåì çàïèñü î÷åðåäè */ /* Ñ÷èòàåì çàïèñü î÷åðåäè */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE); REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
@ -483,7 +591,7 @@ create or replace package body UDO_PKG_EXS_INV as
if (SREQDEVICEID is not null) then if (SREQDEVICEID is not null) then
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */ /* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XGETSHEETSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSHEETSRESPONSE, SNS => STSD); XGETSHEETSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSHEETSRESPONSE, SNS => STSD);
/* Обходим типы документов связанные с разделом "Электронные инвенторизации" */ /* Îáõîäèì çàïèñè ðàçäåëà "Ýëåêòðîííûå èíâåíòàðèçàöèè" óäîâëåòâîðÿþùèå óñëîâèÿì îòáîðà */
for REC in (select T.RN, for REC in (select T.RN,
T.DOC_TYPE, T.DOC_TYPE,
DT.DOCCODE as DOC_TYPE_CODE, DT.DOCCODE as DOC_TYPE_CODE,
@ -542,8 +650,127 @@ create or replace package body UDO_PKG_EXS_INV as
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
) )
is is
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
XGETSHEETITEMSRESPONSE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò îòâåòà
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ âåòêè îòâåòà
XITEM DBMS_XMLDOM.DOMNODE; -- Ýëåìåíò îòâåòíîãî ñïèñêà
XSTORAGEMNEMOCODE DBMS_XMLDOM.DOMNODE; -- Ìíåìîêîä ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XUSERCODE DBMS_XMLDOM.DOMNODE; -- ÌÎË äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XITEMCODE DBMS_XMLDOM.DOMNODE; -- Èäåíòèôèêàòîð ÎÑ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XITEMNAME DBMS_XMLDOM.DOMNODE; -- Íàèìåíîâàíèå ÎÑ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XITEMMNEMOCODE DBMS_XMLDOM.DOMNODE; -- Êîä ÎÑ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XITEMNUMBER DBMS_XMLDOM.DOMNODE; -- Íîìåð ÎÑ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XQUANTITY DBMS_XMLDOM.DOMNODE; -- Êîëè÷åñòâî ÎÑ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Äîêóìåíò
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
CREQ clob; -- Áóôåð äëÿ çàïðîñà
SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
NREQSHEETCODE PKG_STD.TREF; -- Âåäîìîñòü èç çàïðîñà (ïàðàìåòð îòáîðà)
begin begin
null; /* Ñ÷èòàåì çàïèñü î÷åðåäè */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
/* Âîçüìåì òåêñò çàïðîñà */
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
/* Ðàçáèðàåì XML èç çàïðîñà */
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
/* Ñ÷èòûâàåì èäåíòèôèêàòîð óñòðîéñòâà */
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
/* Ñ÷èòûâàåì "Ðåãèñòðàöèîííûé íîìåð âåäîìîñòè" (ïàðàìåòð îòáîðà) */
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSHEETCODE));
/* Êîíòðîëü èíäåòèôèêàòîðà óñòðîéñòâà ïî ëèöåíçèè */
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
/* Ïîäãîòàâëèâàåì äîêóìåíò äëÿ îòâåòà */
UTL_CREATERESPONSEDOC(XDOC => XDOC);
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
if (SREQDEVICEID is not null) then
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XGETSHEETITEMSRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSHEETITEMSRESPONSE, SNS => STSD);
/* Îáõîäèì òèïû äîêóìåíòîâ ñâÿçàííûå ñ ðàçäåëîì "Ýëåêòðîííûå èíâåíòàðèçàöèè" */
for REC in (select DECODE(T.INVPACK, null, O.PLACE_MNEMO, OP.PLACE_MNEMO) SSTORAGEMNEMOCODE,
DECODE(T.INVPACK, null, O.BARCODE, OP.BARCODE) SOBARCODE,
T.INVPERSONS NINVPERSONS,
DECODE(PS.RN,
null,
DECODE(T.INVPACK, null, DECODE(T.INVSUBST, null, I.BARCODE, U.BARCODE), P.BARCODE),
PS.BARCODE) SIBARCODE,
N1.NOMEN_CODE SNOM_CODE,
N1.NOMEN_NAME SNOM_NAME,
I.INV_NUMBER SINV_NUMBER,
'1' SQUANTITY
from ELINVOBJECT T,
INVENTORY I,
DICPLACE O,
DICPLACE OP,
INVPACK P,
INVPACKPOS PS,
INVSUBST U,
DICNOMNS N1
where T.COMPANY = 136018
and T.PRN = NREQSHEETCODE
and T.INVENTORY = I.RN
and I.OBJECT_PLACE = O.RN(+)
and T.INVPACK = P.RN(+)
and P.OBJECT_PLACE = OP.RN(+)
and T.INVPACK = PS.PRN(+)
and T.INVSUBST = PS.INVSUBST(+)
and T.INVSUBST = U.RN(+)
and I.NOMENCLATURE = N1.RN)
loop
/* Ñîáèðàåì èíôîðìàöèþ ïî ýëåìåíòàì âåäîìîñòè â îòâåò */
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SITEM, SNS => STSD);
XSTORAGEMNEMOCODE := UTL_CREATENODE(XDOC => XDOC,
STAG => SSTORAGEMNEMOCODE,
SNS => STSD,
SVAL => REC.SSTORAGEMNEMOCODE);
XUSERCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SUSERCODE, SNS => STSD, SVAL => trim(REC.NINVPERSONS));
XITEMCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SITEMCODE, SNS => STSD, SVAL => trim(REC.SIBARCODE));
XITEMNAME := UTL_CREATENODE(XDOC => XDOC, STAG => SITEMNAME, SNS => STSD, SVAL => trim(REC.SNOM_NAME));
XITEMMNEMOCODE := UTL_CREATENODE(XDOC => XDOC,
STAG => SITEMMNEMOCODE,
SNS => STSD,
SVAL => trim(REC.SNOM_CODE));
XITEMNUMBER := UTL_CREATENODE(XDOC => XDOC,
STAG => SITEMNUMBER,
SNS => STSD,
SVAL => trim(REC.SINV_NUMBER));
XQUANTITY := UTL_CREATENODE(XDOC => XDOC, STAG => SQUANTITY, SNS => STSD, SVAL => REC.SQUANTITY);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XSTORAGEMNEMOCODE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XUSERCODE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XITEMCODE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XITEMNAME);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XITEMMNEMOCODE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XITEMNUMBER);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XQUANTITY);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XGETSHEETITEMSRESPONSE, NEWCHILD => XITEM);
end loop;
/* Îáîðà÷èâàåì îòâåò â êîíâåðò */
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSHEETITEMSRESPONSE);
end if;
/* Âîçâðàùàåì îòâåò */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT,
SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK,
BRESP => CLOB2BLOB(LCDATA => CRESPONSE, SCHARSET => 'UTF8'));
exception
when others then
/* Âåðí¸ì îøèáêó */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR, SMSG => sqlerrm);
end GETSHEETITEMS; end GETSHEETITEMS;
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñ÷èòûâàíèå ìåñò õðàíåíèÿ */ /* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñ÷èòûâàíèå ìåñò õðàíåíèÿ */
@ -553,8 +780,127 @@ create or replace package body UDO_PKG_EXS_INV as
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
) )
is is
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
XGETSTORAGESRESPONSE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò îòâåòà
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ âåòêè îòâåòà
XITEM DBMS_XMLDOM.DOMNODE; -- Ýëåìåíò îòâåòíîãî ñïèñêà
XCODE DBMS_XMLDOM.DOMNODE; -- Êîä ýëåìåíòà îòâåòíîãî ñïèñêà
XNAME DBMS_XMLDOM.DOMNODE; -- Íèìåíîâàíèå ýëåìåíòà îòâåòíîãî ñïèñêà
XMNEMOCODE DBMS_XMLDOM.DOMNODE; -- Ìíåìîêîä ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XLATITUDE DBMS_XMLDOM.DOMNODE; -- Øèðîòà ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XLONGITUDE DBMS_XMLDOM.DOMNODE; -- Äîëãîòà ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XPOSTCODE DBMS_XMLDOM.DOMNODE; -- Ïî÷òîâûé èíäåêñ ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XCOUNTRY DBMS_XMLDOM.DOMNODE; -- Ñòðàíà ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XREGION DBMS_XMLDOM.DOMNODE; -- Ðåãèîí ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XLOCALITY DBMS_XMLDOM.DOMNODE; -- Íàñåë¸ííûé ïóíêò ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XSTREET DBMS_XMLDOM.DOMNODE; -- Óëèöà ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XHOUSENUMBER DBMS_XMLDOM.DOMNODE; -- Íîìåð äîìà ìåñòîïîëîæåíèÿ äëÿ ýëåìåíòà îòâåòíîãî ñïèñêà
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Äîêóìåíò
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
CREQ clob; -- Áóôåð äëÿ çàïðîñà
SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
NREQSHEETCODE PKG_STD.TREF; -- Âåäîìîñòü èç çàïðîñà (ïàðàìåòð îòáîðà)
begin begin
null; /* Ñ÷èòàåì çàïèñü î÷åðåäè */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
/* Âîçüìåì òåêñò çàïðîñà */
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
/* Ðàçáèðàåì XML èç çàïðîñà */
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
/* Ñ÷èòûâàåì èäåíòèôèêàòîð óñòðîéñòâà */
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
/* Ñ÷èòûâàåì "Ðåãèñòðàöèîííûé íîìåð âåäîìîñòè" (ïàðàìåòð îòáîðà) */
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSHEETCODE));
/* Êîíòðîëü èíäåòèôèêàòîðà óñòðîéñòâà ïî ëèöåíçèè */
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
/* Ïîäãîòàâëèâàåì äîêóìåíò äëÿ îòâåòà */
UTL_CREATERESPONSEDOC(XDOC => XDOC);
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
if (SREQDEVICEID is not null) then
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XGETSTORAGESRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SGETSTORAGESRESPONSE, SNS => STSD);
/* Îáõîäèì ìåñòà õðàíåíèÿ */
for REC in (select T.RN NRN,
T.PLACE_MNEMO SMNEMOCODE,
T.PLACE_NAME SNAME,
UDO_F_GET_DOC_PROP_VAL_STR('LATITUDE', 'ObjPlace', T.RN) SLATITUDE,
UDO_F_GET_DOC_PROP_VAL_STR('LONGITUDE', 'ObjPlace', T.RN) SLONGITUDE,
nvl(T.ADDR_POST, G.POSTAL_CODE) SPOSTCODE,
UTL_GEOGRAFY_GET_HIER_ITEM(G.RN, 1) SCOUNTRY,
UTL_GEOGRAFY_GET_HIER_ITEM(G.RN, 2) SREGION,
NVL(UTL_GEOGRAFY_GET_HIER_ITEM(G.RN, 8),
NVL(UTL_GEOGRAFY_GET_HIER_ITEM(G.RN, 4),
NVL(UTL_GEOGRAFY_GET_HIER_ITEM(G.RN, 3), UTL_GEOGRAFY_GET_HIER_ITEM(G.RN, 2)))) SLOCALITY,
UTL_GEOGRAFY_GET_HIER_ITEM(G.RN, 5) SSTREET,
T.ADDR_HOUSE SHOUSENUMBER
from DICPLACE T,
GEOGRAFY G
where T.COMPANY = 136018
and T.GEOGRAFY = G.RN(+)
and ((NREQSHEETCODE is null) or
((NREQSHEETCODE is not null) and
(T.RN in (select DECODE(EO.INVPACK, null, INV.OBJECT_PLACE, P.OBJECT_PLACE)
from ELINVOBJECT EO,
INVENTORY INV,
INVPACK P
where EO.PRN = NREQSHEETCODE
and EO.INVENTORY = INV.RN
and EO.INVPACK = P.RN(+))))))
loop
/* Ñîáèðàåì èíôîðìàöèþ ïî ìåñòó õðàíåíèÿ â îòâåò */
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SITEM, SNS => STSD);
XCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SCODE, SNS => STSD, SVAL => REC.NRN);
XNAME := UTL_CREATENODE(XDOC => XDOC, STAG => SNAME, SNS => STSD, SVAL => REC.SNAME);
XMNEMOCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SMNEMOCODE, SNS => STSD, SVAL => REC.SMNEMOCODE);
XLATITUDE := UTL_CREATENODE(XDOC => XDOC, STAG => SLATITUDE, SNS => STSD, SVAL => REC.SLATITUDE);
XLONGITUDE := UTL_CREATENODE(XDOC => XDOC, STAG => SLONGITUDE, SNS => STSD, SVAL => REC.SLONGITUDE);
XPOSTCODE := UTL_CREATENODE(XDOC => XDOC, STAG => SPOSTCODE, SNS => STSD, SVAL => REC.SPOSTCODE);
XCOUNTRY := UTL_CREATENODE(XDOC => XDOC, STAG => SCOUNTRY, SNS => STSD, SVAL => REC.SCOUNTRY);
XREGION := UTL_CREATENODE(XDOC => XDOC, STAG => SREGION, SNS => STSD, SVAL => REC.SREGION);
XLOCALITY := UTL_CREATENODE(XDOC => XDOC, STAG => SLOCALITY, SNS => STSD, SVAL => REC.SLOCALITY);
XSTREET := UTL_CREATENODE(XDOC => XDOC, STAG => SSTREET, SNS => STSD, SVAL => REC.SSTREET);
XHOUSENUMBER := UTL_CREATENODE(XDOC => XDOC, STAG => SHOUSENUMBER, SNS => STSD, SVAL => REC.SHOUSENUMBER);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCODE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XNAME);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XMNEMOCODE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XLATITUDE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XLONGITUDE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XPOSTCODE);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XCOUNTRY);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XREGION);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XLOCALITY);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XSTREET);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XITEM, NEWCHILD => XHOUSENUMBER);
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XGETSTORAGESRESPONSE, NEWCHILD => XITEM);
end loop;
/* Îáîðà÷èâàåì îòâåò â êîíâåðò */
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XGETSTORAGESRESPONSE);
end if;
/* Âîçâðàùàåì îòâåò */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT,
SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK,
BRESP => CLOB2BLOB(LCDATA => CRESPONSE, SCHARSET => 'UTF8'));
exception
when others then
/* Âåðí¸ì îøèáêó */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR, SMSG => sqlerrm);
end GETSTORAGES; end GETSTORAGES;
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñîõðàíåíèå ðåçóëüòàòîâ èíâåíòàðèçàöèè */ /* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñîõðàíåíèå ðåçóëüòàòîâ èíâåíòàðèçàöèè */
@ -564,9 +910,259 @@ create or replace package body UDO_PKG_EXS_INV as
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
) )
is is
REXSQUEUE EXSQUEUE%rowtype; -- Çàïèñü ïîçèöèè î÷åðåäè
XSAVESHEETITEMRESPONSE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò îòâåòà
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ âåòêè îòâåòà
XITEM DBMS_XMLDOM.DOMNODE; -- Ýëåìåíò îòâåòíîãî ñïèñêà
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Äîêóìåíò
XMLPARCER DBMS_XMLPARSER.PARSER; -- Ïàðñåð
XENVELOPE DBMS_XMLDOM.DOMNODE; -- Êîíâåðò
XBODY DBMS_XMLDOM.DOMNODE; -- Òåëî äîêóìåíòà
XNODELIST DBMS_XMLDOM.DOMNODELIST; -- Âåòêè òåëà äîêóìåíòà
XNODE_ROOT DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò ïåðâîé âåòêè òåëà äîêóìåíòà
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
CREQ clob; -- Áóôåð äëÿ çàïðîñà
SREQDEVICEID PKG_STD.TSTRING; -- Èäåíòèôèêàòîð óñòðîéñòâà èç çàïðîñà
NREQSHEETCODE PKG_STD.TREF; -- Âåäîìîñòü èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NREQUSERCODE PKG_STD.TREF; -- Ðåãèñòðàöèîííûé íîìåð ÌÎË èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGEMNEMOCODE PKG_STD.TSTRING; -- Ìíåìîêîä ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NREQSTORAGEISNEW PKG_STD.TNUMBER; -- Ïðèçíàê íîâîãî ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGECODE PKG_STD.TSTRING; -- Øòðèõ-êîä ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGENAME PKG_STD.TSTRING; -- Íàèìåíîâàíèå ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGEPOSTCODE PKG_STD.TSTRING; -- Ïî÷òîâûé èíäåêñ ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGECOUNTRY PKG_STD.TSTRING; -- Ñòðàíà ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGEREGION PKG_STD.TSTRING; -- Ðåãèîí ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGELOCALITY PKG_STD.TSTRING; -- Íàñåëåííûé ïóíêò ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGESTREET PKG_STD.TSTRING; -- Óëèöà ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQSTORAGEHOUSENUMBER PKG_STD.TSTRING; -- Íîìåð äîìà ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NREQSTORAGELATITUDE PKG_STD.TLNUMBER; -- Øèðîòà ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NREQSTORAGELONGITUDE PKG_STD.TLNUMBER; -- Äîëãîòà ìåñòà õðàíåíèÿ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQITEMCODE PKG_STD.TSTRING; -- Øòðèõ-êîä ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQITEMNAME PKG_STD.TSTRING; -- Íàèìåíîâàíèå íîìåíêëàòóðû ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQITEMMNEMOCODE PKG_STD.TSTRING; -- Ìíåìîêîä íîìåíêëàòóðû ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQITEMNUMBER PKG_STD.TSTRING; -- Èíâåíòàðíûé íîìåð ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NREQQUANTITY PKG_STD.TQUANT; -- Êîëè÷åñòâî ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
DREQCHECKDATE PKG_STD.TLDATE; -- Äàòà ïðîâåäåíèÿ èíâåíòàðèçàöèè ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQCOMMENT PKG_STD.TLSTRING; -- Êîììåíòàðèé ÌÎË ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NREQLATITUDE PKG_STD.TLNUMBER; -- Øèðîòà èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NREQLONGITUDE PKG_STD.TLNUMBER; -- Äîëãîòà èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NREQDISTANCETOSTORAGE PKG_STD.TLNUMBER; -- Ðàññòîÿíèå äî ìåñòà õðàíåíèÿ ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQFLOOR PKG_STD.TSTRING; -- Ýòàæ ðàñïîëîæåíèÿ ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQROOM PKG_STD.TSTRING; -- Ïîìåùåíèå ðàñïîëîæåíèÿ ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
SREQRACK PKG_STD.TSTRING; -- Ñòåëëàæ ðàñïîëîæåíèÿ ÎÑ èç çàïðîñà (ïàðàìåòð ñîõðàíåíèÿ)
NELINVOBJECT PKG_STD.TREF; -- Ðåã. íîìåð ïîçèöèè âåäîìîñòè èíâåíòàðèçàöèè
NDICPLACE PKG_STD.TREF; -- Ðåã. íîìåð ìåñòà õðàíåíèÿ
NINVENTORY PKG_STD.TREF; -- Ðåã. íîìåð ÎÑ (êàðòî÷êè "Èíâåíòàðíîé êàðòîòåêè")
NCOMPANY PKG_STD.TREF; -- Ðåã. íîìåð îðãàíèçàöèè
SERR PKG_STD.TSTRING; -- Áóôåð äëÿ îøèáîê
begin begin
null; /* Èíèöèàëèçèðóåì îðãàíèçàöèþ */
NCOMPANY := 136018;
/* Ñ÷èòàåì çàïèñü î÷åðåäè */
REXSQUEUE := GET_EXSQUEUE_ID(NFLAG_SMART => 0, NRN => NEXSQUEUE);
/* Âîçüìåì òåêñò çàïðîñà */
CREQ := BLOB2CLOB(LBDATA => REXSQUEUE.MSG);
/* Ñîçäàåì èíñòàíñ XML ïàðñåðà */
XMLPARCER := DBMS_XMLPARSER.NEWPARSER;
/* Ðàçáèðàåì XML èç çàïðîñà */
DBMS_XMLPARSER.PARSECLOB(P => XMLPARCER, DOC => CREQ);
/* Áåðåì XML äîêóìåíò èç ðàçîáðàííîãî */
XDOC := DBMS_XMLPARSER.GETDOCUMENT(P => XMLPARCER);
/* Ñ÷èòûâàåì êîðíåâîé ýëåìåíò */
XENVELOPE := DBMS_XMLDOM.MAKENODE(ELEM => DBMS_XMLDOM.GETDOCUMENTELEMENT(DOC => XDOC));
/* Ñ÷èòûâàåì ýëåìåíò òåëî */
XBODY := DBMS_XSLPROCESSOR.SELECTSINGLENODE(N => XENVELOPE, PATTERN => SBODY);
/* Ñ÷èòûâàåì äî÷åðíèå ýëåìåíòû òåëà */
XNODELIST := DBMS_XMLDOM.GETCHILDNODES(N => XBODY);
/* Áåðåì ïåðâûé äî÷åðíèé ýëåìåíò */
XNODE_ROOT := DBMS_XMLDOM.ITEM(NL => XNODELIST, IDX => 0);
/* Ñ÷èòûâàåì èäåíòèôèêàòîð óñòðîéñòâà */
SREQDEVICEID := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDEVICEID);
/* Ñ÷èòûâàåì "Ðåãèñòðàöèîííûé íîìåð âåäîìîñòè" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQSHEETCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSHEETCODE));
/* Ñ÷èòûâàåì "Ðåãèñòðàöèîííûé íîìåð ÌÎË" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQUSERCODE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SUSERCODE));
/* Ñ÷èòûâàåì "Ìíåìîêîä ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGEMNEMOCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEMNEMOCODE);
/* Ñ÷èòûâàåì "Ïðèçíàê íîâîãî ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQSTORAGEISNEW := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEISNEW));
/* Ñ÷èòûâàåì "Øòðèõ-êîä ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGECODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGECODE);
/* Ñ÷èòûâàåì "Íàèìåíîâàíèå ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGENAME := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGENAME);
/* Ñ÷èòûâàåì "Ïî÷òîâûé èíäåêñ ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGEPOSTCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEPOSTCODE);
/* Ñ÷èòûâàåì "Ñòðàíà ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGECOUNTRY := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGECOUNTRY);
/* Ñ÷èòûâàåì "Ðåãèîí ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGEREGION := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEREGION);
/* Ñ÷èòûâàåì "Íàñåëåííûé ïóíêò ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGELOCALITY := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGELOCALITY);
/* Ñ÷èòûâàåì "Óëèöà ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGESTREET := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGESTREET);
/* Ñ÷èòûâàåì "Íîìåð äîìà ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQSTORAGEHOUSENUMBER := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGEHOUSENUMBER);
/* Ñ÷èòûâàåì "Øèðîòà ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQSTORAGELATITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGELATITUDE));
/* Ñ÷èòûâàåì "Äîëãîòà ìåñòà õðàíåíèÿ" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQSTORAGELONGITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SSTORAGELONGITUDE));
/* Ñ÷èòûâàåì "Øòðèõ-êîä ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQITEMCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SITEMCODE);
/* Ñ÷èòûâàåì "Íàèìåíîâàíèå íîìåíêëàòóðû ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQITEMNAME := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SITEMNAME);
/* Ñ÷èòûâàåì "Ìíåìîêîä íîìåíêëàòóðû ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQITEMMNEMOCODE := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SITEMMNEMOCODE);
/* Ñ÷èòûâàåì "Èíâåíòàðíûé íîìåð ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQITEMNUMBER := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SITEMNUMBER);
/* Ñ÷èòûâàåì "Êîëè÷åñòâî ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQQUANTITY := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SQUANTITY));
/* Ñ÷èòûâàåì "Äàòà ïðîâåäåíèÿ èíâåíòàðèçàöèè ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
DREQCHECKDATE := TO_DATE(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SCHECKDATE), 'yyyy-mm-dd');
/* Ñ÷èòûâàåì "Êîììåíòàðèé ÌÎË ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQCOMMENT := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SCOMMENT);
/* Ñ÷èòûâàåì "Øèðîòà" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQLATITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SLATITUDE));
/* Ñ÷èòûâàåì "Äîëãîòà" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQLONGITUDE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SLONGITUDE));
/* Ñ÷èòûâàåì "Ðàññòîÿíèå äî ìåñòà õðàíåíèÿ ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
NREQDISTANCETOSTORAGE := TO_NUMBER(UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SDISTANCETOSTORAGE));
/* Ñ÷èòûâàåì "Ýòàæ ðàñïîëîæåíèÿ ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQFLOOR := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SFLOOR);
/* Ñ÷èòûâàåì "Ïîìåùåíèå ðàñïîëîæåíèÿ ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQROOM := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SROOM);
/* Ñ÷èòûâàåì "Ñòåëëàæ ðàñïîëîæåíèÿ ÎÑ" (ïàðàìåòð ñîõðàíåíèÿ) */
SREQRACK := UTL_GETNODEVAL(XROOTNODE => XNODE_ROOT, SPATTERN => SRACK);
/* Êîíòðîëü èíäåòèôèêàòîðà óñòðîéñòâà ïî ëèöåíçèè */
/* UTL_CHECK_DEVICEID(SDEVICEID => SREQDEVICEID); */
/* Ïîäãîòàâëèâàåì äîêóìåíò äëÿ îòâåòà */
UTL_CREATERESPONSEDOC(XDOC => XDOC);
/* Âìåñòî ïðîâåðêè ïî ëèöåíçèè - ïîêà ïðîñòî ïðîâåðêà íà òî, ÷òî èäåíòèôèêàòîð óñòðîéñòâà áûë ïåðåäàí */
if (SREQDEVICEID is not null) then
if ((NREQSHEETCODE is not null) and (DREQCHECKDATE is not null)) then
/*
TODO: owner="root" created="14.01.2019"
text="Ïîíÿòü çà÷åì ìû ýòî äåëàåì (äàëüøå ðåçóëüòàòû ïðîâåðêè íå èäóò).
Íàäî ðåàëèçîâàòü äîáàâëåíèå íîâîãî ìåñòîíàõîæäåíèÿ + ñìåíó òåêóùåãî"
*/
/* Åñëè çàäàí øòðèõ-êîä ìåñòàíõîæäåíèÿ ÎÑ */
if (SREQSTORAGECODE is not null) then
/* Ïðîâåðÿåì ìåñòîíàõîõæäåíèå ïî øòðèõ-êîäó */
begin
select T.RN
into NDICPLACE
from DICPLACE T
where T.COMPANY = NCOMPANY
and T.BARCODE = SREQSTORAGECODE;
exception
when NO_DATA_FOUND then
SERR := 'Ìåñòîíàõîæäåíèå èíâåíòàðíûõ îáúåêòîâ ñ øòðèõ-êîäîì: ' || SREQSTORAGECODE || ' íå íàéäåíî';
end;
end if;
/* Ïðîáóåì íàéòè ïîçèöèþ âåäîìîñòè èíâåíòàðèçàöèè ïî øòðèõ-êîäó (åñëè ïåðåäàí ðåã. íîìåð âåäîìîñòè è ïîêà íåò îøèáîê) */
if ((NREQSHEETCODE is not null) and (SERR is null)) then
begin
select T.NRN
into NELINVOBJECT
from V_ELINVOBJECT T
where T.NCOMPANY = NCOMPANY
and T.NPRN = NREQSHEETCODE
and T.SIBARCODE = SREQITEMCODE;
exception
when NO_DATA_FOUND then
/* Èùåì ðåã. íîìåð ÈÊ ïî øòðèõêîäó, åñëè íå íàøëè ïîçèöèþ âåäîìîñòè èíâåíòàðèçàöèè */
begin
select T.RN
into NINVENTORY
from INVENTORY T
where T.BARCODE = SREQITEMCODE
and T.COMPANY = NCOMPANY;
exception
when NO_DATA_FOUND then
SERR := 'Èíâåíòàðíàÿ êàðòî÷êà ñ øòðèõ-êîäîì: ' || SREQITEMCODE || ' íå íàéäåíà';
end;
end;
end if;
/* Åñëè íåò îøèáîê ïðè ïðîâåðêàõ */
if (SERR is null) then
/* Åñëè ïîçèöèÿ âåäîìîñòè èíâåíòàðèçàöèè íàéäåíà */
if (NELINVOBJECT is not null) then
/* Îáíîâèì å¸ */
P_ELINVOBJECT_BASE_UPDATE(NCOMPANY => NCOMPANY,
NRN => NELINVOBJECT,
DUNLOAD_DATE => null,
DINV_DATE => DREQCHECKDATE,
NINVPERSONS => NREQUSERCODE,
SBARCODE => SREQSTORAGECODE,
NIS_LOADED => 0);
else
/* Èëè äîáàâèì â âåäîìîñòü íàéäåííóþ ÈÊ åñëè íå íàøëè ïîçèöèþ âåäîìîñòè ïî øòðèõ-êîäó */
P_ELINVOBJECT_BASE_INSERT(NCOMPANY => NCOMPANY,
NPRN => NREQSHEETCODE,
NINVENTORY => NINVENTORY,
NINVSUBST => null,
NINVPACK => null,
DUNLOAD_DATE => null,
DINV_DATE => DREQCHECKDATE,
NINVPERSONS => NREQUSERCODE,
SBARCODE => SREQSTORAGECODE,
NIS_LOADED => 1,
NRN => NELINVOBJECT);
end if;
end if;
end if;
/* Åñëè íåò îøèáîê */
if (SERR is null) then
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XSAVESHEETITEMRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SSAVESHEETITEMRESPONSE, SNS => STSD);
/* Ôîðìèðóåì ðåçóëüòàò */
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SRESULT, SNS => STSD, SVAL => 'true');
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XSAVESHEETITEMRESPONSE, NEWCHILD => XITEM);
/* Îáîðà÷èâàåì îòâåò â êîíâåðò */
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XSAVESHEETITEMRESPONSE);
else
CRESPONSE := UTL_CREATEERRORRESPONSE(XDOC => XDOC, SMSG => SERR);
end if;
end if;
/* Âîçâðàùàåì îòâåò */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT,
SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK,
BRESP => CLOB2BLOB(LCDATA => CRESPONSE, SCHARSET => 'UTF8'));
exception
when others then
/* Âåðí¸ì îøèáêó */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR, SMSG => sqlerrm);
end SAVESHEETITEM; end SAVESHEETITEM;
/* Ýëåêòðîííàÿ èíâåíòàðèçàöèÿ - ñîõðàíåíèå ðåçóëüòàòîâ èíâåíòàðèçàöèè (ÄÅÌÎ, óáðàòü!!!!) */
procedure SAVESHEETITEM_TMP
(
NIDENT in number, -- Èäåíòèôèêàòîð ïðîöåññà
NEXSQUEUE in number -- Ðåãèñòðàöèîííûé íîìåð îáðàáàòûâàåìîé ïîçèöèè î÷åðåäè îáìåíà
)
is
CRESPONSE clob; -- Áóôåð äëÿ îòâåòà
XSAVESHEETITEMRESPONSE DBMS_XMLDOM.DOMNODE; -- Êîðíåâîé ýëåìåíò îòâåòà
XNODE DBMS_XMLDOM.DOMNODE; -- Áóôåð äëÿ âåòêè îòâåòà
XITEM DBMS_XMLDOM.DOMNODE; -- Ýëåìåíò îòâåòíîãî ñïèñêà
XDOC DBMS_XMLDOM.DOMDOCUMENT; -- Äîêóìåíò
begin
UTL_CREATERESPONSEDOC(XDOC => XDOC);
/* Ñîçäà¸ì ïðîñòðàíñòâî èì¸í äëÿ îòâåòà */
XSAVESHEETITEMRESPONSE := UTL_CREATENODE(XDOC => XDOC, STAG => SSAVESHEETITEMRESPONSE, SNS => STSD);
/* Ôîðìèðóåì ðåçóëüòàò */
XITEM := UTL_CREATENODE(XDOC => XDOC, STAG => SRESULT, SNS => STSD, SVAL => 'true');
XNODE := DBMS_XMLDOM.APPENDCHILD(N => XSAVESHEETITEMRESPONSE, NEWCHILD => XITEM);
/* Îáîðà÷èâàåì îòâåò â êîíâåðò */
CRESPONSE := UTL_CREATERESPONSE(XDOC => XDOC, XCONTENT => XSAVESHEETITEMRESPONSE);
/* Âîçâðàùàåì îòâåò */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT,
SRESULT => PKG_EXS.SPRC_RESP_RESULT_OK,
BRESP => CLOB2BLOB(LCDATA => CRESPONSE, SCHARSET => 'UTF8'));
exception
when others then
/* Âåðí¸ì îøèáêó */
PKG_EXS.PRC_RESP_RESULT_SET(NIDENT => NIDENT, SRESULT => PKG_EXS.SPRC_RESP_RESULT_ERR, SMSG => sqlerrm);
end SAVESHEETITEM_TMP;
end; end;
/ /