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)
(未经测试,在另一个但类似的场景中为我工作)
我想从员工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)
(未经测试,在另一个但类似的场景中为我工作)