从Oracle Apex页面获取多个值并将其存储在表中
问题描述:
我开发了1个apex页面,其中有一个文本字段。我将通过逗号分隔来插入多个值。我希望当我点击提交按钮时,它应该根据逗号分隔值,并应单独插入不同的行中。例如,如果我在文本字段中传递“abc,cde,efgh,ijhk,gygg”,那么它应该在一行中插入“abc”,在另一行中插入“cde”,依此类推。当我只插入一个值时,它也不应该通过任何错误。从Oracle Apex页面获取多个值并将其存储在表中
我能够存储只有一个数据的值,因为我已经创建了一个过程,该过程只接受一个数据,但我没有想到如果我通过逗号分隔它传递多个值,那么它应该插入。我在这里发布我的程序。
create or replace procedure Exclude_items(
p_analyze_name in varchar2,
p_material_number in varchar2
)
as
p_analyze_id number;
begin
select analyze_id
into p_analyze_id
from analyzes
where table_name = p_analyze_name;
insert into p20da.test_vishal(ANALYZE_ID,MATNR,) values(p_analyze_id,p_material_number)
end;
这里matnr将有多个由逗号分隔的值,因为它是apex页面中的文本字段,但analyze_id将是常量。
我想编写过程,以便它可以分隔每当逗号出现,并且不应该通过任何错误,如果我只插入一个值。
答
如何像:
create or replace procedure exclude_items(p_analyze_name in varchar2, p_material_number in varchar2)
as
comma_pos number;
sub_name varchar2(4000);
temp_name varchar2(4000);
p_analyze_id number;
begin
select analyze_id
into p_analyze_id
from analyzes
where table_name = p_analyze_name;
temp_name := p_material_number;
LOOP
comma_pos := instr(temp_name, ',');
exit when comma_pos = 0;
sub_name := substr(temp_name,1,comma_pos-1);
insert into p20da.test_vishal(ANALYZE_ID,MATNR,) values(p_analyze_id,sub_name)
temp_name := substr(temp_name, comma_pos + 1);
END LOOP;
insert into p20da.test_vishal(ANALYZE_ID,MATNR,) values(p_analyze_id,temp_name)
end;
/
答
你应该采取APEX_UTIL
封装的STRING_TO_TABLE
功能的优势。将以下代码添加到提交过程中,您的exclude_items过程保持不变。在API包函数
DECLARE
L_MATERIAL_NUMBER APEX_APPLICATION_GLOBAL.VC_ARR2;
BEGIN
L_MATERIAL_NUMBER := APEX_UTIL.STRING_TO_TABLE(:P2_MATERIAL_NUMBER,',');
FOR I IN 1..L_MATERIAL_NUMBER.COUNT
LOOP
EXCLUDE_ITEMS('tablea', L_MATERIAL_NUMBER(I));
END LOOP;
END;
更多信息 - >http://docs.oracle.com/cd/E11882_01/appdev.112/e12510/apex_util.htm#CHDFEEJD
这是为大家SO向他人SO礼仪社会负有责任,所以请仔细阅读本 http://stackoverflow.com/help/有人-答案 – XING