Oracle Apex 从集合中删除条目

Oracle Apex delete entry from collection

我有两个带有复选框的交互式报告。如果用户 select 来自交互式报告 1 的条目并按下按钮,selected 条目将被添加到一个集合中并显示在交互式报告 2 中。

在交互式 report2 中,我再次有一个复选框,如果用户 select 一个条目,则应通过按下按钮将其从集合和交互式 report2 中删除。

我定义了一个在按下按钮时触发的进程:

declare v_id number;
begin
FOR i in 1..APEX_APPLICATION.G_F03.count

LOOP
select id into v_id from apex_collections where collection_name = 'SELECTED2' and c001 = APEX_APPLICATION.G_F03(i);
   apex_collection.delete_member(
   p_collection_name => 'SELECTED2',
   p_seq => v_id);
END LOOP;
end;

SELECTED2 是集合的名称。

APEX_APPLICATION.G_F03是交互式报表中checkbox的checkox值2.

问题,整个集合都被删除,而不仅仅是交互式报告 2 中的 selected 行。我怎样才能只删除 selected 行?

这是包含 2 个交互式报告的 emp/dept 架构示例:

  • IR_1 在 emp 上,所有记录都在 table 但不在 collection
  • IR_2 上的 emp 以及 collection
  • 中的所有记录

当用户选中 IR_1 中的复选框并提交时,这些记录将放在 collection 中。当用户选中 IR_2 中的复选框并提交时,记录将从 collection.

中删除

IR_1 有查询:

select EMPNO,
       ENAME,
       APEX_ITEM.CHECKBOX(1,empno,'UNCHECKED') AS CHECKBOX
  from EMP
where NOT EXISTS (SELECT n001 FROM apex_collections WHERE collection_name = 'EMP' AND n001 = empno)

在 IR_1 区域

中有一个带有“提交页面”操作的“添加”按钮

IR_2 有查询:

select EMPNO,
       ENAME,
       APEX_ITEM.CHECKBOX(2,empno,'UNCHECKED') AS CHECKBOX
  from EMP WHERE empno IN (SELECT n001 FROM apex_collections WHERE collection_name = 'EMP')

以及 IR_2 区域中带有“提交页面”操作的“删除”按钮。

创建 2 个执行代码类型的页面进程:

  1. “添加到 Collection”
IF NOT APEX_COLLECTION.COLLECTION_EXISTS ( p_collection_name => 'EMP') THEN
  APEX_COLLECTION.CREATE_COLLECTION( p_collection_name => 'EMP');
END IF;
FOR I in 1..APEX_APPLICATION.G_F01.COUNT LOOP
  APEX_COLLECTION.ADD_MEMBER (
    p_collection_name => 'EMP',
    p_n001 => to_number(APEX_APPLICATION.G_F01(i)));
END LOOP;

条件:按下按钮时 = ADD

  1. “从Collection中删除”
FOR I in 1..APEX_APPLICATION.G_F02.COUNT LOOP
  FOR j IN (SELECT seq_id FROM apex_collections WHERE collection_name = 'EMP' and n001 = to_number(APEX_APPLICATION.G_F02(i)))
  LOOP
    APEX_COLLECTION.DELETE_MEMBER (
      p_collection_name => 'EMP',
      p_seq => j.seq_id);
  END LOOP;
END LOOP;

条件:按下按钮时 = REMOVE

注意: 由于这 2 个交互式报告位于同一个页面上,因此复选框需要使用 2 个不同的 ID。 IR_1 在页面处理中使用 1(和 APEX_APPLICATION.G_F01),IR_2 在页面处理中使用 2 -(和 APEX_APPLICATION.G_F02)。