从Oracle Apex页面获取多个值并将其存储在表中

时间:2017-03-03 10:42:12

标签: oracle stored-procedures oracle-apex

我开发了1个顶点页面,其中有一个文本字段。我将通过逗号分隔多个值。我希望当我点击提交按钮时,它应该基于逗号分隔值,并应单独插入不同的行。例如,如果我在我的文本字段中传递“abc,cde,efgh,ijhk,gygg”,那么它应该在一行中插入“abc”,在另一行中插入“cde”,依此类推。当我只插入一个值时,它也不应该通过任何错误。

我能够只存储一个数据的值,因为我创建了一个过程,并且该过程只接受一个数据,但我不知道我是否通过逗号分隔它来传递多个值然后它应该插入。我在这里发布我的程序。

 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将使用逗号分隔多个值,因为它是顶点页面中的文本字段,但analyze_id将是常量。

我想编写程序,以便在逗号出现时它可以分开,如果我只插入一个值,则不应该通过任何错误。

2 个答案:

答案 0 :(得分:0)

如下:

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

答案 1 :(得分:0)

您应该利用STRING_TO_TABLE APEX_UTIL包的功能。将以下代码添加到提交流程,您的 exclude_items 程序保持不变。

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;

有关API包功能的更多信息 - > http://docs.oracle.com/cd/E11882_01/appdev.112/e12510/apex_util.htm#CHDFEEJD