Oracle Apex 5 搜索,显示结果但如果完全匹配则插入

Oracle Apex 5 Search, display results but insert if exact match

我有一个搜索字段(不区分大小写),return将相关值转换为表格形式。

  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')

因此,如果对部分股票代码、条形码或名称进行搜索,它将 return 结果添加到 table。这意味着与搜索字符串匹配的所有结果。

一旦我得到我想要的,我就在该行中添加一个数量值,然后点击 "Add" 按钮。此按钮仅获取 selection 并通过过程使用 PL/SQL 语句插入另一个 Table。

BEGIN
insert into TEMP_TABLE (STOCKCODE, NAME, BARCODE) values (:STOCKCODE, :NAME, BARCODE);
END;

这一切都很完美,但是当您找到匹配项然后必须 select 它,然后单击添加时,进行大量搜索就成了一项任务。所以我想做以下事情。对部分匹配进行搜索应该 return 结果以表格形式显示。但是很多代码都是已知的,所以如果我知道其中一个完整的值并将其放入,请不要仅以表格形式显示它,而是直接插入 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;

有什么想法吗? :D

您可以有一个在页面加载时运行并检查输入是否完全匹配的页面进程:

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;

然后使 tabform 报告显示条件为 P1_SHOW_TABFORM 等于 Y。