【问题标题】:How to create and use a multi-select list in APEX ORACLE?如何在 APEX ORACLE 中创建和使用多选列表?
【发布时间】:2018-11-06 04:52:04
【问题描述】:

我有一个名为Employees 的表,其中包含Employee_id 和Employee_Name 列。现在我想在每个员工姓名前面创建一个带有复选框的页面,选择需要的那些,将它们存储到一个临时表中并使用它们进行进一步的操作。我面临的问题是如何创建该多选列表并将选择值存储在您的表中。是否有用于多选的项目?如果没有,我该怎么做?

【问题讨论】:

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


    【解决方案1】:

    穿梭项目。在左侧,您将显示所有员工的列表。项目按钮允许您将所有(或仅其中一些)移动到项目的右侧。提交页面后,员工 ID 列表将以冒号分隔值的形式存储到表格列中,例如

    6547:8879:5587:9987
    

    这是一种简单的方法。但是,一旦您必须用这些值实际 一些事情,就必须将它们拆分为行。不过,这不是问题。这是一个查询:

    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>
    

    或者,您可以创建一个表格形式,该表格还显示所有员工并在每行的开头都有复选​​框。然后,您将创建一个流程 - 在循环中 - 将选定的值存储到您提到的 临时表 中。例如:

    -- 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;
    

    【讨论】:

    • 对于第二种方法,是否有一个内置功能可以创建表格形式(报告或网格)来为每一行添加复选框,还是手动完成?
    • 是的;创建页面时,选择“旧版页面” - 您会在其中看到“表格形式”。
    • 感谢您的帮助。有效。我使用了一个 create view 语句来临时使用这些值。尽管使用动态操作创建该视图不起作用。我可以通过 SQL 命令选项卡创建它,但不能在应用程序中创建。代码类似于:-begin execute immediate 'create view as &lt;your query&gt;'; commit; end; 将项目值传递给查询可能存在问题,但我不确定。你能帮忙吗?
    • “它不起作用”是什么意思?有什么错误吗?如果有,是哪一个?从理论上讲,这应该起作用。但是,我不建议您动态地 创建视图(或表格或其他任何东西)。像您已经做的那样创建一个视图 - 在 SQL Workshop 中。另一个问题是:你真的需要它吗?为什么不直接在 Apex 中直接将上述查询用作内联视图?
    • 我使用它是因为我想将一个客户映射到一组员工。假设我有 3 个客户和 10 个团队成员。例如Customer1 -> Employee2, 3, 4 ; Customer2 -> Employee1、8、9 等等。这个映射每个月都在变化,它不是固定的。我想保留这个映射到月底。所以我想我确实需要它。这是我发布的问题,可以帮助您更好地了解情况。 stackoverflow.com/questions/50585001/…
    【解决方案2】:

    在 oracle apex 5.1 中有一个用于创建多选列表的选项。

    1. 创建类型为“选择列表”的 pageItem。
    2. 使'允许多 选择”改为“是”。
    3. 在下面为您的选择列表编写 SQL 查询 “值列表”属性。
    4. 然后选择列表将是 根据我们的查询显示。

    查询格式为:

    select [displayValue],
           [returnValue]
      from ...
     where ...
     order by ...
    

    现在,一旦您从选择列表中选择了多个值(使用 ctrl+单击),这些值将在选择列表页面项中存储为“:”分隔值。

    【讨论】:

      【解决方案3】:

      我之前制作了一个视频来解决您的问题。这是一个分步教程如何创建和处理复选框。

      此处提供视频: https://www.youtube.com/watch?v=T-LXRMWQbPk

      问候

      【讨论】:

        【解决方案4】:

        如果列表太大,我建议使用Popup LOV 项目并激活Multiple Values 开关而不是Select listShuttle,因为它具有对象列表的内部搜索字段,执行让用户更容易找到目标值。此外,就像Select ListShuttle 项一样,您可以为所选字段设置Separator 字符。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多