从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将是常量。

我想编写过程,以便它可以分隔每当逗号出现,并且不应该通过任何错误,如果我只插入一个值。

+0

这是为大家SO向他人SO礼仪社会负有责任,所以请仔细阅读本 http://stackoverflow.com/help/有人-答案 – XING

如何像:

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