Oracle Apex 5.1:拆分页面项目的值

时间:2018-09-05 11:17:10

标签: oracle oracle-apex oracle-apex-5.1

我尝试在Oracle Apex 5.1中拆分页面项的值。 我首先要做的是将这样的值结合起来以实现自动完成。用户需要了解员工的部门。结果保存在页面项目PX_Employee中。

select name || ',' || department from table;

结果:部门1的John Cooper

为了获得John Cooper的电子邮件,我需要将值彼此分开。要获取电子邮件,我使用以下代码(无需concat即可正常运行)

DECLARE
  mail VARCHAR(40);
BEGIN 
  select email 
    into mail 
    FROM table 
    WHERE NAME = :PX_Employee;

  :PX_MAIL := mail;

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    mail := NULL;
END; 

2 个答案:

答案 0 :(得分:2)

一个简单的SUBSTRINSTR就可以了。一些注意事项:

  • 您不需要局部变量;将结果直接放入PX_MAIL项目
  • 为了不处理可能的NO_DATA_FOUND,请使用聚合函数(例如MAX,我已经做到了):
    • 如果有一个同名员工,SELECT将返回其电子邮件地址
    • 如果有两个(或多个)同名员工,则它将返回最后一个员工的电子邮件地址(按字母顺序排列)。这是可能的情况;您宁愿不依赖名称作为标识符-切换到某种唯一ID
    • 如果没有这样的员工行,它将不会返回NO_DATA_FOUND而是NULL(因此您不必单独处理)

begin
  select max(t.mail)
    into :PX_MAIL
    from your_table t
    where t.name = substr(:PX_EMPLOYEE, 1, instr(:PX_EMPLOYEE, ',') - 1);
end;

例如:

SQL> with test (px_employee) as
  2    (select 'John Cooper, Department 1' from dual)
  3  select substr(PX_EMPLOYEE, 1, instr(PX_EMPLOYEE, ',') - 1)
  4  from test;

SUBSTR(PX_E
-----------
John Cooper

SQL>

答案 1 :(得分:1)

您可以使用Apex Util函数STRING_TO_TABLE再次拆分字符串并以这种方式提取名称。

DECLARE
    l_vc_arr2    APEX_APPLICATION_GLOBAL.VC_ARR2;
    mail VARCHAR(40);
BEGIN
    l_vc_arr2 := APEX_UTIL.STRING_TO_TABLE('John Cooper, Department1', ',');
    BEGIN select email into mail FROM table WHERE NAME = l_vc_arr2(1);
END;