БД: Серверный API - процедура подготовки поисковой строки от клиента для использования в SQL-запросе

This commit is contained in:
Mikhail Chechnev 2025-02-14 13:28:40 +03:00
parent ba8b7a5ce0
commit 83b0c75a3b

View File

@ -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
(