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 个执行代码类型的页面进程:
- “添加到 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
- “从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
)。
我有两个带有复选框的交互式报告。如果用户 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 个执行代码类型的页面进程:
- “添加到 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
- “从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
)。