如何在 APEX ORACLE 中创建和使用多 select 列表?
How to create and use a multi-select list in APEX ORACLE?
我有一个名为 Employees 的 table,其中包含 Employee_id 和 Employee_Name 列。现在我想在每个员工姓名前面创建一个带有复选框的页面,select 需要的那些,将它们存储到临时 table 中并用于进一步的操作。我面临的问题是如何创建多个 select 列表并将 select 值存储在 table 中。是否有 multi select 的项目?如果没有,我应该怎么做?
有 班车项目。在左侧,您将显示所有员工的列表。项目按钮允许您将所有(或仅其中一些)移动到项目的右侧。提交页面后,员工 ID 列表将以冒号分隔值的形式存储在 table 列中,例如
6547:8879:5587:9987
这是一种简单的方法。但是,一旦您必须对这些值进行实际 do 操作,就必须将它们拆分成行。不过没问题。这是一个查询:
SQL> with emps (shuttle_item) as
2 (select '6547:8879:5587:9987' from dual)
3 select regexp_substr(shuttle_item, '[^:]+', 1, level) one_item
4 from emps
5 connect by level <= regexp_count(shuttle_item, ':') + 1;
ONE_ITEM
---------------------------------------------------------------------
6547
8879
5587
9987
SQL>
或者,您可以创建一个表格表单,该表单还显示所有员工并且在每行的开头都有复选框。然后,您将创建一个流程,该流程 - 在循环中 - 将所选值存储到您提到的 临时 table 中。例如:
-- F01 = row selector. If you check 1st and 3rd row, f01.count = 2 (2 rows checked)
-- f01(1) = 1 (row #1), f01(2) = 3 (row #3)
-- F02 = EMP_ID. f02(1) = EMP_ID that belongs to employee in 1st row,
-- f02(3) = EMP_ID that belongs to emplyee in 3rd row
declare
l_id number;
begin
for j in 1 .. apex_application.g_f01.count
loop
l_id := apex_application.g_f02(apex_application.g_f01(j));
insert into temp_table (emp_id) values (l_id);
end loop;
end;
在 oracle apex 5.1 中有一个创建多 select 列表的选项。
- 创建一个 pageItem 类型:'select list'。
- 使'允许多
selection' 到 'Yes'.
- 为您的 select 列表编写 SQL 查询
'List of Values' 属性。
- 然后 select 列表将是
根据我们的查询显示。
查询格式为:
select [displayValue],
[returnValue]
from ...
where ...
order by ...
现在,一旦您 select 来自 select 列表的多个值(使用 ctrl+click),这些值将存储为 select 列表页面项目中的“:”分隔值。
我之前制作了一个视频来解决您的问题。这是如何创建复选框并处理它们的分步教程。
视频可在此处获得:
https://www.youtube.com/watch?v=T-LXRMWQbPk
此致
如果列表太大,我建议使用 Popup LOV
项目并激活 Multiple Values
开关,而不是 Select list
或 Shuttle
,因为它有对象列表的内部搜索字段,让用户更容易找到目标值。此外,正如 Select List
或 Shuttle
项一样,您可以为所选字段设置 Separator
字符。
我有一个名为 Employees 的 table,其中包含 Employee_id 和 Employee_Name 列。现在我想在每个员工姓名前面创建一个带有复选框的页面,select 需要的那些,将它们存储到临时 table 中并用于进一步的操作。我面临的问题是如何创建多个 select 列表并将 select 值存储在 table 中。是否有 multi select 的项目?如果没有,我应该怎么做?
有 班车项目。在左侧,您将显示所有员工的列表。项目按钮允许您将所有(或仅其中一些)移动到项目的右侧。提交页面后,员工 ID 列表将以冒号分隔值的形式存储在 table 列中,例如
6547:8879:5587:9987
这是一种简单的方法。但是,一旦您必须对这些值进行实际 do 操作,就必须将它们拆分成行。不过没问题。这是一个查询:
SQL> with emps (shuttle_item) as
2 (select '6547:8879:5587:9987' from dual)
3 select regexp_substr(shuttle_item, '[^:]+', 1, level) one_item
4 from emps
5 connect by level <= regexp_count(shuttle_item, ':') + 1;
ONE_ITEM
---------------------------------------------------------------------
6547
8879
5587
9987
SQL>
或者,您可以创建一个表格表单,该表单还显示所有员工并且在每行的开头都有复选框。然后,您将创建一个流程,该流程 - 在循环中 - 将所选值存储到您提到的 临时 table 中。例如:
-- F01 = row selector. If you check 1st and 3rd row, f01.count = 2 (2 rows checked)
-- f01(1) = 1 (row #1), f01(2) = 3 (row #3)
-- F02 = EMP_ID. f02(1) = EMP_ID that belongs to employee in 1st row,
-- f02(3) = EMP_ID that belongs to emplyee in 3rd row
declare
l_id number;
begin
for j in 1 .. apex_application.g_f01.count
loop
l_id := apex_application.g_f02(apex_application.g_f01(j));
insert into temp_table (emp_id) values (l_id);
end loop;
end;
在 oracle apex 5.1 中有一个创建多 select 列表的选项。
- 创建一个 pageItem 类型:'select list'。
- 使'允许多 selection' 到 'Yes'.
- 为您的 select 列表编写 SQL 查询 'List of Values' 属性。
- 然后 select 列表将是 根据我们的查询显示。
查询格式为:
select [displayValue],
[returnValue]
from ...
where ...
order by ...
现在,一旦您 select 来自 select 列表的多个值(使用 ctrl+click),这些值将存储为 select 列表页面项目中的“:”分隔值。
我之前制作了一个视频来解决您的问题。这是如何创建复选框并处理它们的分步教程。
视频可在此处获得: https://www.youtube.com/watch?v=T-LXRMWQbPk
此致
如果列表太大,我建议使用 Popup LOV
项目并激活 Multiple Values
开关,而不是 Select list
或 Shuttle
,因为它有对象列表的内部搜索字段,让用户更容易找到目标值。此外,正如 Select List
或 Shuttle
项一样,您可以为所选字段设置 Separator
字符。