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

Posted

技术标签:

【中文标题】从 Oracle Apex 页面获取多个值并将其存储在表中【英文标题】:Taking multiple value from Oracle Apex page and store it in an table 【发布时间】:2017-03-03 10:42:11 【问题描述】:

我开发了 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 将有多个用逗号分隔的值,因为它是 apex 页面中的文本字段,但 analyze_id 将是常量。

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

【问题讨论】:

在 SO 上的每个人都有社会责任来教育他人 SO 礼仪,所以请阅读此***.com/help/someone-answers 【参考方案1】:

您应该利用APEX_UTIL 包的STRING_TO_TABLE 功能。将以下代码添加到 Submit 过程中,您的 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

【讨论】:

【参考方案2】:

怎么样:

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

【讨论】:

以上是关于从 Oracle Apex 页面获取多个值并将其存储在表中的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Apex 页面在导航到另一个页面并返回后无法获取数据

具有自动完成 oracle apex 的文本字段

根据 Oracle APEX 项目值更新和插入

如何在页眉 oracle apex 中设置项目值

如何获取 Oracle APEX 文本字段值(现在我得到的都是 NULL)(Oracle APEX Application Express 21.1)

Apex Oracle - 多个动态操作