是的,当您的表格形式包含复选框时,它会变得很棘手。在您的示例中, g_f01 将仅包含 3 个值为 1、3、5 的元素,但数组 g_f30 将包含 10 个元素。
通常在使用 apex_item 构建表格形式时,最好也使用 APEX 集合:
- 使用 my_table 中的相关数据填充页面入口处的 APEX 集合。将 mytable 行的 ID 保存在隐藏项中,例如 apex_item.hidden(2,id)。
- 编写报告以从集合而不是 my_table 工作,并在复选框项目中使用 seq_id 而不是 ID:
apex_item.checkbox2(1,seq_id)
- 提交时,使用 g_fxx 数组更新集合 - 通常使用不止一次。
- 最后使用集合更新 my_table
因此,在您的示例中,您可能首先更新 APEX 集合,以通过将 c050 设置为“Y”来指示哪些行已被勾选:
for i in 1..apex_application.g_f01.count loop
apex_collection.update_member_attribute('MYCOLL', apex_application.g_f01(i),
50, 'Y');
end loop;
然后使用其他更改对其进行更新:
for i in 1..apex_application.g_f02.count loop
apex_collection.update_member_attribute('MYCOLL', apex_application.g_f02(i),
20, apex_application.g_f20(i));
apex_collection.update_member_attribute('MYCOLL', apex_application.g_f02(i),
30, apex_application.g_f30(i));
end loop;
最后将相关更改应用到 my_table:
for r in (select c002, c020, c030
from apex_collection
where collection_name = 'MYCOLL'
and c001 = 'Y' -- Checked rows only
)
loop
update my_table
set my_date = r.c020
, my_comment = r.c030
where id = r.c002;
end loop;
就那么简单...?!