我开发了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将是常量。
我想编写程序,以便在逗号出现时它可以分开,如果我只插入一个值,则不应该通过任何错误。
答案 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