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



我只想在标签表中插入表中不存在的值。对于该字段,我使用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可以有多个值,我需要单独检查这些值,如果该值不在表中,它们就会插入。

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

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

样品表;最初,它包含BMW:

SQL> create table tags (name varchar2(20));
Table created.
SQL> insert into tags (name) values ('BMW');
1 row created.

当我在这个演示中使用SQL*Plus时,我使用了一个替代变量来模拟您的多选值弹出列表项。假设它包含三个名称,其中一个是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.

这张表现在包含什么?

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

最新更新