Sql 如何插入表中不存在的弹出LoV值?
我只想在tags表中插入表中不存在的值。 对于该字段,我使用弹出式LoV,它具有启用功能:手动输入、多值、搜索Youtube。 我尝试了只在提交表单页面上执行的应用程序流程和功能,但无法正常工作。 功能:Sql 如何插入表中不存在的弹出LoV值?,sql,oracle,plsql,oracle-apex,Sql,Oracle,Plsql,Oracle Apex,我只想在tags表中插入表中不存在的值。 对于该字段,我使用弹出式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
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;
弹出窗口可以有多个值,我需要分别检查这些值,如果该值不在表中,则插入它们。在我看来,这是一种错误的方法。函数不应该插入任何东西——使用过程来实现这一目的 此外,您发布的整个代码可以由一个MERGE语句替换。这是怎么做的 样本表;最初,它包含宝马: 在本演示中使用SQL*Plus时,我使用了一个替代变量,该变量模拟您的多选值弹出列表项。假设它包含三个名称,其中一个是BMW,因此不应再次插入-这就是MERGE's WHEN子句的作用:
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.
我觉得还可以
当您使用Apex时,合并将是
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);
在我看来,这是一个错误的方法。函数不应该插入任何东西——使用过程来实现这一目的 此外,您发布的整个代码可以由一个MERGE语句替换。这是怎么做的 样本表;最初,它包含宝马: 在本演示中使用SQL*Plus时,我使用了一个替代变量,该变量模拟您的多选值弹出列表项。假设它包含三个名称,其中一个是BMW,因此不应再次插入-这就是MERGE's WHEN子句的作用:
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.
我觉得还可以
当您使用Apex时,合并将是
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);
我可以在“连接方式”中使用“,”而不是“:”作为分隔符吗?不,在本上下文中不可以,因为Apex通过冒号将值与多个选择项分隔开:。但是,一般来说,是的-您可以使用任何分隔符。我是否可以在“连接方式”中使用“,”而不是“:”?否,不在此上下文中,因为Apex通过冒号将值与多选项分隔开:。但是,一般来说,是的,你可以使用任何你想要的分隔符。