Select 基于 oracle apex 中穿梭的多个值

Select multiple values based on shuttle in oracle apex

我想从员工tableselect员工姓名,然后根据员工姓名显示员工编号。当我选择一个名字时,它工作得很好,与员工相关的员工编号如下图所示: works fine with one value

但问题是,当我尝试选择多个名称时,多个员工编号并没有出现,如下图所示:

didn't work for multiple values

对于 SQL 查询和级联 LOV,我执行了以下操作:

SQL query and cascading LOV for employee name shuttle SQL query and cascading LOV for employee number shuttle

我是这样看的:

  • shuttle 项目 只是另一个 值列表

  • 在 Apex 中,他们查询 return 两个值:

    • 显示值
    • return值
  • 通常我们写成

    select ename as display_value,
           empno as return_value
    from emp
    
  • 意思是班车项目显示员工姓名(这是你有的),但是...

  • ...您不必创建包含员工编号的新班车项目,因为 之前的班车项目已将它们包含为“return”值,冒号分隔

因此,当您要对员工编号(在我的示例中为 empno)执行某事 时,您只需将这些值拆分成行,例如

SQL> with
  2  temp (p1_shuttle) as
  3    -- this represents the P1_SHUTTLE item that contains 2 return values: 7369 and 7499
  4    (select '7369:7499' from dual),
  5  split_to_rows as
  6    -- this is how you'd split shuttle item into rows
  7    (select regexp_substr(p1_shuttle, '[^:]+', 1, level) one_value
  8     from temp
  9     connect by level <= regexp_count(p1_shuttle, ':') + 1
 10    )
 11  -- finally, use those values
 12  select e.ename, e.job
 13  from emp e join split_to_rows s on s.one_value = e.empno;

ENAME      JOB
---------- ---------
SMITH      CLERK
ALLEN      SALESMAN

SQL>

很快,我相信你根本不需要第 2 个穿梭项目

请不要为 sql 查询之类的代码使用屏幕截图。没有人喜欢通过逐字输入来复制测试。我们都想复制粘贴但是截图不行

您遇到的问题是,您的第 2 班车的 select 有一个假定单个值的 where 子句

  LIKE :ENAME

穿梭车将 selected 值存储在冒号分隔的列表中(例如 KING:JAMES),但这对您的查询不起作用。这就解释了为什么您看不到任何结果。

解决方案是假设绑定变量以冒号分隔的列表形式出现并将其拆分。 APEX_STRING.SPLIT 在这方面做得很好。将 where 子句更改为:

  WHERE ename IN (SELECT column_value FROM table(apex_string.split(:ENAME,':'))

在EMPNO页面项目的设置中,只将“Parent Item”设置为ENAME,无需提交任何项目。查询中只使用ENAME,默认提交。

您也可以在查询中尝试这样做:

where regexp_like(:ENAME,ename)

(未经测试,在另一个但类似的场景中为我工作)