#oracle #oracle-apex-5
#Oracle #oracle-apex-5
Вопрос:
У меня есть поле поиска, которое выполняет поиск (без учета регистра) и возвращает соответствующие значения в табличной форме.
select STOCKCODE, BARCODE, NAME from TABLE where regexp_like(NAME, :P1_SEARCH, 'i') or regexp_like(BARCODE, :P1_SEARCH, 'i') or regexp_like(STOCKCODE, :P1_SEARCH, 'i')
Таким образом, если поиск выполняется для части биржевого КОДА, штрих-кода или НАЗВАНИЯ, он вернет результаты в таблицу. Это означает все результаты, которые соответствуют строке поиска.
Как только у меня есть то, что я хочу, я добавляю значение количества в строку, а затем нажимаю кнопку «Добавить». Эта кнопка только выбирает и вставляет в другую таблицу, используя инструкцию PL / SQL с помощью процедуры.
BEGIN
insert into TEMP_TABLE (STOCKCODE, NAME, BARCODE) values (:STOCKCODE, :NAME, BARCODE);
END;
Все это работает отлично, но выполнение многочисленных поисковых запросов становится сложной задачей, когда вы находите совпадение, а затем должны выбрать его, а затем нажать Добавить. Итак, я хочу сделать следующее. Выполнение поиска при частичном совпадении должно вернуть результаты в табличной форме. Однако известно много кодов, поэтому, если я знаю одно из значений полностью и ввожу его, не отображайте его только в табличной форме, а выполняйте прямую вставку в TEMP_TABLE.
Что-то вроде этого
select STOCKCODE, BARCODE, NAME from TABLE where regexp_like(NAME, :P1_SEARCH, 'i') or regexp_like(BARCODE, :P1_SEARCH, 'i') or regexp_like(STOCKCODE, :P1_SEARCH, 'i')
if (NAME=:P1_SEARCH) or (BARCODE=P1:SEARCH) or (STOCKCODE=:P1_SEARCH) then
insert into TEMP_TABLE (STOCKCODE, NAME, BARCODE) values (:STOCKCODE, :NAME, BARCODE);
end if;
Есть идеи? 😀
Ответ №1:
У вас может быть процесс страницы, который запускается при загрузке страницы и проверяет, соответствует ли ввод полному совпадению:
begin
select name, barcode, stockcode
into l_name, l_barcode, l_stockcode
from table
where (NAME=:P1_SEARCH) or (BARCODE=P1:SEARCH) or (STOCKCODE=:P1_SEARCH);
-- Full match if no exception raised
insert into TEMP_TABLE (STOCKCODE, NAME, BARCODE)
values (l_stockcode, l_name, l_barcode);
:P1_SHOW_TABFORM := 'N';
exception
when too_many_rows
-- Partial match (more than one match found)
:P1_SHOW_TABFORM := 'Y';
when no_data_found then
-- No match found
(Do whatever you think best here)
end;
Затем сделайте отображение отчета в форме табуляции условным для P1_SHOW_TABFORM, равным Y.
Комментарии:
1. Большое спасибо, это работает. Мне пришлось внести некоторые незначительные изменения, чтобы мой regexp_like все еще работал, но он делает именно то, что я хотел!