【问题标题】:Oracle Apex 5.1: Split values of page itemOracle Apex 5.1:页面项目的拆分值
【发布时间】:2018-09-05 11:17:09
【问题描述】:

我尝试在 Oracle Apex 5.1 中拆分页面项目的值。 我首先做的是连接这样的值来自动完成。用户需要知道员工所在的部门。结果保存在页面项 PX_Employee 中。

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

结果:John Cooper,部门 1

为了获得 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; 

【问题讨论】:

  • 为什么要选择与姓名和部门串联匹配的姓名?您需要准确显示您正在做什么来设置 :PX_Employee 的值。

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


【解决方案1】:

一个简单的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>

【讨论】:

    【解决方案2】:

    您可以使用 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多