如何插入 table 中不存在的 POPUP LoV 值?

How to insert with POPUP LoV value that doesnt exist in table?

我只想在标签 table 中插入 table 中不存在的值。 对于该字段,我使用 POPUP LoV,它启用了:手动输入、多值、搜索为 Youtube。 我尝试了仅在提交表单页面上执行的应用程序流程和功能,但无法正常工作。 功能:

create or replace FUNCTION check_ins_tags  (p_name VARCHAR2)
RETURN NUMBER
IS
 count_res number := 0;
BEGIN

SELECT count(name)
INTO count_res
from tags
where upper(name) = upper(p_name);

IF count_res < 1 THEN


insert into tags (name)
select regexp_substr(p_name, '[^:]+', 1, level) 
from dual
connect by level <= regexp_count(p_name, ',') + 1;


ELSE
 NULL;

END IF;

RETURN count_res;

EXCEPTION
 WHEN OTHERS THEN
 NULL;

END;

POPUP 可以有多个值,我需要分别检查这些值,如果该值不在 table.

中则插入它们

在我看来,这是一种错误的做法。函数不应该 插入 任何东西 - 为此目的使用 过程

此外,您发布的整个代码可以由单个 MERGE 语句代替。方法如下。

样本table;最初,它包含 BMW:

SQL> create table tags (name varchar2(20));

Table created.

SQL> insert into tags (name) values ('BMW');

1 row created.

当我使用 SQL*Plus 进行演示时,我使用了一个替代变量来模拟您的多 select 值弹出列表项。假设它包含三个名称,其中之一是 BMW,因此不应再次插入 - 这就是 MERGEWHEN 子句所做的:

SQL> merge into tags t
  2    using (select regexp_substr('&&P1_POPUP', '[^:]+', 1, level) name
  3           from dual
  4           connect by level <= regexp_count('&&P1_POPUP', ':') + 1
  5          ) x
  6    on (x.name = t.name)
  7    when not matched then insert (name) values (x.name);
Enter value for p1_popup: Ford:BMW:Mercedes

2 rows merged.

table现在包含什么?

SQL> select * from tags;

NAME
--------------------
BMW
Mercedes
Ford

SQL>

我觉得不错。


当您使用 Apex 时,您的 merge 将是

merge into tags t
  using (select regexp_substr(:P1_POPUP, '[^:]+', 1, level) name
         from dual
         connect by level <= regexp_count(:P1_POPUP, ':') + 1
        ) x
  on (x.name = t.name)        
  when not matched then insert (name) values (x.name);