From 83b0c75a3b58ab1358104705945380957d05a912 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 14 Feb 2025 13:28:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D0=94:=20=D0=A1=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BD=D1=8B=D0=B9=20API=20-=20=D0=BF=D1=80=D0=BE=D1=86?= =?UTF-8?q?=D0=B5=D0=B4=D1=83=D1=80=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B9=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BE=D1=82=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2=20SQL-=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_BASE.pck | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/db/PKG_P8PANELS_BASE.pck b/db/PKG_P8PANELS_BASE.pck index 2a54068..483dffa 100644 --- a/db/PKG_P8PANELS_BASE.pck +++ b/db/PKG_P8PANELS_BASE.pck @@ -27,6 +27,13 @@ create or replace package PKG_P8PANELS_BASE as NDOCUMENT in number -- Рег. номер документа ) return number; -- Флаг доступности (см. константы NACCESS_*) + /* Подготовка пользовательской строки поиска для вставки в запрос */ + procedure UTL_SEARCH_PREPARE + ( + SSEARCH in varchar2, -- Пользовательская строка поиска + SSEARCH_PREPARED out varchar2 -- Подготовленная строка поиска + ); + /* Базовое исполнение действий */ procedure PROCESS ( @@ -191,6 +198,36 @@ create or replace package body PKG_P8PANELS_BASE as return NACCESS_NO; end UTL_DOC_ACCESS_CHECK; + /* Подготовка пользовательской строки поиска для вставки в запрос */ + procedure UTL_SEARCH_PREPARE + ( + SSEARCH in varchar2, -- Пользовательская строка поиска + SSEARCH_PREPARED out varchar2 -- Подготовленная строка поиска + ) + is + /* Локальные константы */ + SANY_SYS constant char(1) := '%'; -- Маска "любое количество любых символов" Oracle + SONE_SYS constant char(1) := '_'; -- Маска "любой один символ" Oracle + SENT_WRD_DELIM constant varchar2(1) := ' '; -- Разделитель слов в предложении + SANY_PRS constant varchar2(240) := PKG_OPTIONS.STARSYMB; -- Маска "любое количество любых символов" Парус + SONE_PRS constant varchar2(240) := PKG_OPTIONS.QUESTSYMB; -- Маска "любой один символ" Парус + begin + /* Если пользовательская строка пустая - то это всё что угодно */ + if (SSEARCH is null) + then + SSEARCH_PREPARED := SANY_SYS; + else + /* Подменим пользовательские маски на системные и соберем подготовленную строку поиска */ + SSEARCH_PREPARED := '%' || replace(replace(replace(SSEARCH + ,SANY_PRS + ,SANY_SYS) + ,SONE_PRS + ,SONE_SYS) + ,SENT_WRD_DELIM + ,SANY_SYS) || '%'; + end if; + end UTL_SEARCH_PREPARE; + /* Формирование сообщения об отсутствии значения */ function MSG_NO_DATA_MAKE (