如何在 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 列表的选项。

  1. 创建一个 pageItem 类型:'select list'。
  2. 使'允许多 selection' 到 'Yes'.
  3. 为您的 select 列表编写 SQL 查询 'List of Values' 属性。
  4. 然后 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 listShuttle,因为它有对象列表的内部搜索字段,让用户更容易找到目标值。此外,正如 Select ListShuttle 项一样,您可以为所选字段设置 Separator 字符。