Модификация алгоритмов разбора поискового запроса и поиска в системе

This commit is contained in:
Mikhail Chechnev 2018-12-19 16:27:15 +03:00
parent 9c39977e40
commit 20aafa59f4

View File

@ -145,6 +145,10 @@ create or replace package body UDO_PKG_EXS_ALICE as
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ÿ'; HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ÿ';
HELPER_PATTERNS.EXTEND(); HELPER_PATTERNS.EXTEND();
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñ'; HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñ';
HELPER_PATTERNS.EXTEND();
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'íàéòè';
HELPER_PATTERNS.EXTEND();
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ìîæíî';
end UTL_HELPER_INIT_COMMON; end UTL_HELPER_INIT_COMMON;
/* Ïîäãîòîâêà ïîèñêîâîé ôðàçû ê ó÷àñòèþ â âûáîðêå */ /* Ïîäãîòîâêà ïîèñêîâîé ôðàçû ê ó÷àñòèþ â âûáîðêå */
@ -158,36 +162,49 @@ create or replace package body UDO_PKG_EXS_ALICE as
is is
SRES varchar2(32000); -- Ðåçóëüòàò ðàáîòû SRES varchar2(32000); -- Ðåçóëüòàò ðàáîòû
begin begin
/* Îáõîäèì ñëîâà ïîèñêîâîé ôðàçû */ /* Åñëè ïîèñêîâàÿ ôðàçà çàäàíà */
for W in (select REGEXP_SUBSTR(T.STR, '[^' || SDELIM || ']+', 1, level) SWRD if (SSEARCH_STR is not null) then
from (select replace(replace(replace(replace(replace(replace(replace(replace(replace(SSEARCH_STR, ',', ''), /* Îáõîäèì ñëîâà ïîèñêîâîé ôðàçû */
'.', for W in (select REGEXP_SUBSTR(T.STR, '[^' || SDELIM || ']+', 1, level) SWRD
''), from (select replace(replace(replace(replace(replace(replace(replace(replace(replace(SSEARCH_STR,
'/', ',',
''), ''),
'\', '.',
''), ''),
'''', '/',
''), ''),
'"', '\',
''), ''),
':', '''',
''), ''),
'?', '"',
''), ''),
'!', ':',
'') STR ''),
from DUAL) T '?',
connect by INSTR(T.STR, SDELIM, 1, level - 1) > 0) ''),
loop '!',
/* Åñëè ñëîâî íå â ñïèñêå âñïîìîãàòåëüíûõ */ '') STR
if (not UTL_HELPER_CHECK(SWORD => W.SWRD, HELPER_PATTERNS => HELPER_PATTERNS)) then from DUAL) T
/* Îñòàâëÿåì åãî â èòîãîâîé âûáîðêå */ connect by INSTR(T.STR, SDELIM, 1, level - 1) > 0)
SRES := SRES || '%' || W.SWRD; loop
/* Åñëè ñëîâî íå â ñïèñêå âñïîìîãàòåëüíûõ */
if (not UTL_HELPER_CHECK(SWORD => W.SWRD, HELPER_PATTERNS => HELPER_PATTERNS)) then
/* Îñòàâëÿåì åãî â èòîãîâîé âûáîðêå */
SRES := SRES || '%' || W.SWRD;
end if;
end loop;
/* Óáåðåì ëèøíèå ïðîáåëû è ãîòîâèì äëÿ ïîèñêà */
SRES := '%' || trim(SRES) || '%';
/* Ïðîâåðèì, ÷òî õîòü êàêàÿ-òî çàöåïêà îñòàëîñü äëÿ ïîèñêà */
if (replace(SRES, '%', '') is null) then
/* Èñêàòü âñ¸ ïðîäðÿä - íå âåðíî, ñ÷èòàåì ÷òî ïîèñêîâîé ôðàçû íåò */
SRES := null;
end if; end if;
end loop; else
/* Óáåðåì ëèøíèå ïðîáåëû è ãîòîâèì äëÿ ïîèñêà */ /* Íåò ïîèñêîâîé ôðàçû - íåò ðåçóëüòàòà */
SRES := '%' || trim(SRES) || '%'; SRES := null;
end if;
/* Âåðíåì îòâåò */ /* Âåðíåì îòâåò */
return SRES; return SRES;
end UTL_SEARCH_STR_PREPARE; end UTL_SEARCH_STR_PREPARE;
@ -215,12 +232,12 @@ create or replace package body UDO_PKG_EXS_ALICE as
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'êîíòðàãåíò%'; HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'êîíòðàãåíò%';
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */ /* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8'); CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */ /* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP); CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
/* Åñëè åñòü ÷òî èñêàòü */ /* Åñëè åñòü ÷òî èñêàòü */
if (CTMP is not null) then if (CTMP is not null) then
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */ /* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS); PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
/* Èíèöèàëèçèðóåì îòâåò */ /* Èíèöèàëèçèðóåì îòâåò */
CRESP := 'Êîíòðàãåíò íå íàéäåí'; CRESP := 'Êîíòðàãåíò íå íàéäåí';
/* Èùåì çàïðîøåííîãî êîíòðàãåíòà */ /* Èùåì çàïðîøåííîãî êîíòðàãåíòà */
@ -234,9 +251,14 @@ create or replace package body UDO_PKG_EXS_ALICE as
T.AGN_COMMENT SCONTACT_PERSON T.AGN_COMMENT SCONTACT_PERSON
from AGNLIST T, from AGNLIST T,
ACATALOG CAT ACATALOG CAT
where ((LOWER(T.AGNABBR) like LOWER(CTMP)) or (LOWER(T.AGNNAME) like LOWER(CTMP)) or where ((LOWER(CTMP) like LOWER('%' || replace(T.AGNABBR, ' ', '%') || '%')) or
(LOWER(T.AGNFAMILYNAME_AC) like LOWER(CTMP)) or (LOWER(T.AGNFAMILYNAME_ABL) like LOWER(CTMP)) or (LOWER(CTMP) like LOWER('%' || replace(T.AGNNAME, ' ', '%') || '%')) or
(LOWER(T.AGNFAMILYNAME_TO) like LOWER(CTMP)) or (LOWER(T.AGNFAMILYNAME_FR) like LOWER(CTMP))) ((T.AGNFAMILYNAME is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME || '%'))) or
((T.AGNFAMILYNAME_AC is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_AC || '%'))) or
((T.AGNFAMILYNAME_ABL is not null) and
(LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_ABL || '%'))) or
((T.AGNFAMILYNAME_TO is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_TO || '%'))) or
((T.AGNFAMILYNAME_FR is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_FR || '%'))))
and T.CRN = CAT.RN and T.CRN = CAT.RN
and CAT.NAME = SSEARCH_CATALOG_NAME and CAT.NAME = SSEARCH_CATALOG_NAME
and ROWNUM <= 1) and ROWNUM <= 1)
@ -267,7 +289,7 @@ create or replace package body UDO_PKG_EXS_ALICE as
end if; end if;
end loop; end loop;
else else
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ'; CRESP := 'Íå ïîíÿòíî êàêîãî êîíòðàãåíòà Âû õîòèòå íàéòè, èçâèíèòå...';
end if; end if;
/* Âîçâðàùàåì îòâåò */ /* Âîçâðàùàåì îòâåò */
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT, PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
@ -298,12 +320,12 @@ create or replace package body UDO_PKG_EXS_ALICE as
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'äîãîâîð%'; HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'äîãîâîð%';
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */ /* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8'); CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */ /* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP); CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
/* Åñëè åñòü ÷òî èñêàòü */ /* Åñëè åñòü ÷òî èñêàòü */
if (CTMP is not null) then if (CTMP is not null) then
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */ /* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS); PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
/* Èíèöèàëèçèðóåì îòâåò */ /* Èíèöèàëèçèðóåì îòâåò */
CRESP := 'Äîãîâîð íå íàéäåí'; CRESP := 'Äîãîâîð íå íàéäåí';
/* Èùåì çàïðîøåííûé äîãîâîð */ /* Èùåì çàïðîøåííûé äîãîâîð */
@ -320,8 +342,8 @@ create or replace package body UDO_PKG_EXS_ALICE as
AGNLIST AG, AGNLIST AG,
CURNAMES CN, CURNAMES CN,
ACATALOG CAT ACATALOG CAT
where ((LOWER(T.EXT_NUMBER) like LOWER(CTMP)) or where ((LOWER(CTMP) like LOWER('%' || T.EXT_NUMBER || '%')) or
(LOWER(trim(T.DOC_NUMB)) like LOWER(CTMP))) (LOWER(CTMP) like LOWER('%' || trim(T.DOC_NUMB) || '%')))
and T.AGENT = AG.RN and T.AGENT = AG.RN
and T.CURRENCY = CN.RN and T.CURRENCY = CN.RN
and T.CRN = CAT.RN and T.CRN = CAT.RN
@ -368,7 +390,7 @@ create or replace package body UDO_PKG_EXS_ALICE as
end if; end if;
end loop; end loop;
else else
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ'; CRESP := 'Íå ïîíÿòíî êàêîé äîãîâîð Âû õîòèòå íàéòè, èçâèíèòå...';
end if; end if;
/* Âîçâðàùàåì îòâåò */ /* Âîçâðàùàåì îòâåò */
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT, PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
@ -400,16 +422,16 @@ create or replace package body UDO_PKG_EXS_ALICE as
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'çàêàç%'; HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'çàêàç%';
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */ /* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8'); CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */ /* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP); CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
/* Åñëè åñòü ÷òî èñêàòü */ /* Åñëè åñòü ÷òî èñêàòü */
if (CTMP is not null) then if (CTMP is not null) then
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */ /* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS); PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
/* Èíèöèàëèçèðóåì îòâåò */ /* Èíèöèàëèçèðóåì îòâåò */
CRESP := 'Çàêàç íå íàéäåí'; CRESP := 'Çàêàç íå íàéäåí';
/* Èùåì çàïðîøåííûé çàêàç */ /* Èùåì çàïðîøåííûé çàêàç */
for C in (select 'Çàêàç ¹' || trim(T.ORD_NUMB) || ' îò ' || TO_CHAR(T.ORD_DATE, 'dd.mm.yyyy') SDOC, for C in (select 'Âàø çàêàç ¹' || trim(T.ORD_NUMB) || ' îò ' || TO_CHAR(T.ORD_DATE, 'dd.mm.yyyy') SDOC,
T.PSUMWTAX NSUM, T.PSUMWTAX NSUM,
T.RELEASE_DATE DRELEASE_DATE, T.RELEASE_DATE DRELEASE_DATE,
(select V.STR_VALUE (select V.STR_VALUE
@ -424,7 +446,7 @@ create or replace package body UDO_PKG_EXS_ALICE as
AGNLIST AG, AGNLIST AG,
CURNAMES CN, CURNAMES CN,
ACATALOG CAT ACATALOG CAT
where (LOWER(trim(T.ORD_NUMB)) like LOWER(CTMP)) where (LOWER(CTMP) like LOWER('%' || trim(T.ORD_NUMB) || '%'))
and T.ACC_AGENT = AG.RN and T.ACC_AGENT = AG.RN
and T.CURRENCY = CN.RN and T.CURRENCY = CN.RN
and T.CRN = CAT.RN and T.CRN = CAT.RN
@ -451,7 +473,7 @@ create or replace package body UDO_PKG_EXS_ALICE as
end if; end if;
end loop; end loop;
else else
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ'; CRESP := 'Íå ïîíÿòíî êàêîé çàêàç Âû õîòèòå íàéòè, èçâèíèòå...';
end if; end if;
/* Âîçâðàùàåì îòâåò */ /* Âîçâðàùàåì îòâåò */
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT, PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,
@ -485,17 +507,17 @@ create or replace package body UDO_PKG_EXS_ALICE as
HELPER_PATTERNS.EXTEND(); HELPER_PATTERNS.EXTEND();
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñâÿç%'; HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ñâÿç%';
HELPER_PATTERNS.EXTEND(); HELPER_PATTERNS.EXTEND();
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'íàéòè';
HELPER_PATTERNS.EXTEND();
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ìåíåäæåð%'; HELPER_PATTERNS(HELPER_PATTERNS.LAST) := 'ìåíåäæåð%';
HELPER_PATTERNS.EXTEND();
HELPER_PATTERNS(HELPER_PATTERNS.LAST) := '%ãîâîðèò%';
/* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */ /* Çàáèðàåì äàííûå ñîîáùåíèÿ è êîíâåðòèðóåì â êîäèðîâêó ÁÄ */
CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8'); CTMP := BLOB2CLOB(LBDATA => REXSQUEUE.MSG, SCHARSET => 'UTF8');
/* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */ /* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */
PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP); CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS);
/* Åñëè åñòü ÷òî èñêàòü */ /* Åñëè åñòü ÷òî èñêàòü */
if (CTMP is not null) then if (CTMP is not null) then
/* Ïîäãîòîâèì ïîèñêîâóþ ôðàçó */ /* Êëàä¸ì êîíâåðòèðîâàííîå îáðàòíî (ïðîñòî äëÿ óäîáñòâà ìîíèòîðèíãà) */
CTMP := UTL_SEARCH_STR_PREPARE(SSEARCH_STR => CTMP, SDELIM => ' ', HELPER_PATTERNS => HELPER_PATTERNS); PKG_EXS.QUEUE_MSG_SET(NEXSQUEUE => REXSQUEUE.RN, BMSG => CLOB2BLOB(LCDATA => CTMP), RCQUEUE => RCTMP);
/* Èíèöèàëèçèðóåì îòâåò */ /* Èíèöèàëèçèðóåì îòâåò */
CRESP := 'Êîíòàêò íå íàéäåí'; CRESP := 'Êîíòàêò íå íàéäåí';
/* Èùåì çàïðîøåííîãî êîíòðàãåíòà */ /* Èùåì çàïðîøåííîãî êîíòðàãåíòà */
@ -506,9 +528,14 @@ create or replace package body UDO_PKG_EXS_ALICE as
T.AGN_COMMENT SCONTACT_PERSON T.AGN_COMMENT SCONTACT_PERSON
from AGNLIST T, from AGNLIST T,
ACATALOG CAT ACATALOG CAT
where ((LOWER(T.AGNABBR) like LOWER(CTMP)) or (LOWER(T.AGNNAME) like LOWER(CTMP)) or where ((LOWER(CTMP) like LOWER('%' || replace(T.AGNABBR, ' ', '%') || '%')) or
(LOWER(T.AGNFAMILYNAME_AC) like LOWER(CTMP)) or (LOWER(T.AGNFAMILYNAME_ABL) like LOWER(CTMP)) or (LOWER(CTMP) like LOWER('%' || replace(T.AGNNAME, ' ', '%') || '%')) or
(LOWER(T.AGNFAMILYNAME_TO) like LOWER(CTMP)) or (LOWER(T.AGNFAMILYNAME_FR) like LOWER(CTMP))) ((T.AGNFAMILYNAME is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME || '%'))) or
((T.AGNFAMILYNAME_AC is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_AC || '%'))) or
((T.AGNFAMILYNAME_ABL is not null) and
(LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_ABL || '%'))) or
((T.AGNFAMILYNAME_TO is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_TO || '%'))) or
((T.AGNFAMILYNAME_FR is not null) and (LOWER(CTMP) like LOWER('%' || T.AGNFAMILYNAME_FR || '%'))))
and T.CRN = CAT.RN and T.CRN = CAT.RN
and CAT.NAME = SSEARCH_CATALOG_NAME and CAT.NAME = SSEARCH_CATALOG_NAME
and ROWNUM <= 1) and ROWNUM <= 1)
@ -527,11 +554,11 @@ create or replace package body UDO_PKG_EXS_ALICE as
end if; end if;
/* Êîíòàêòû êîíòðàãåíòà - e-mail */ /* Êîíòàêòû êîíòðàãåíòà - e-mail */
if (C.SMAIL is not null) then if (C.SMAIL is not null) then
CRESP := CRESP || ',à ìîæíî íå çâîíèòü, à íàïèñàòü e-mail: ' || C.SMAIL; CRESP := CRESP || ', à ìîæíî íå çâîíèòü, à íàïèñàòü e-mail: ' || C.SMAIL;
end if; end if;
end loop; end loop;
else else
CRESP := 'Íå óêàçàí ïîèñêîâûé çàïðîñ'; CRESP := 'Íå ïîíÿòíî êàêóþ êîíòàêòíóþ èíôîðìàöèþ Âû õîòèòå íàéòè, èçâèíèòå...';
end if; end if;
/* Âîçâðàùàåì îòâåò */ /* Âîçâðàùàåì îòâåò */
PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT, PKG_EXS.PRC_RESP_ARG_BLOB_SET(NIDENT => NIDENT,