我已经从视图创建了表格形式 - 因此只有选中的项目才会添加到表格中。到目前为止,我只能插入所有记录而不是单独选择的行。
这是我使用的代码:
DECLARE
v_insertcount NUMBER := 0;
BEGIN
FOR i IN 1 .. apex_application.g_f02.COUNT
LOOP
IF apex_application.g_f01 (i) IS NOT NULL THEN -- this is the checkbox
insert into my_table (pme_id, MYREF, STAC, START_DATE)
values ( SEQ_PME.NEXTVAL,
:P5_MYREF
apex_application.g_f02(i),
apex_application.g_f03(i)
)
v_insertcount := v_insertcount + 1;
END IF;
END LOOP;
END;
答案 0 :(得分:1)
首先你必须记住only checked checkboxes are submitted。因此,您无法测试NULL
以识别未选中的框。这只是数组中的不。
因此,由于复选框数组大小小于或等于其他字段数组大小,因此您无法使用 index 查找同一行的相应值。
有一些clever tricks to overcome that limitations。但是,对于简单的情况,解决方案只是使用查找功能将id
映射到索引。
FUNCTION array_search(value IN VARCHAR2, arr IN apex_application_global.vc_arr2)
RETURN PLS_INTEGER
IS
BEGIN
FOR i IN 1 .. arr.COUNT
LOOP
IF arr(i) = value THEN
RETURN i;
END IF;
END LOOP;
return 0;
END;
这是线性搜索。所以表演不非常好。无论如何,表格处理可能就足够了。鉴于该功能,您现在可以写:
地区来源
SELECT APEX_ITEM.CHECKBOX(1,pme_id) " ", ...
提交流程
FOR i IN 1 .. apex_application.g_f01.COUNT -- your checkboxes LOOP -- identify the "row index" idx := array_search(apex_application.g_f01(i), apex_application.g_f02); -- ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ -- checkboxes array id array -- assuming now idx > 0 -- (in production code, should check and log in case of `0`) -- do whatever you want, using `idx` as index insert into my_table (pme_id, MYREF, STAC, START_DATE ) values ( SEQ_PME.NEXTVAL, :P5_MYREF apex_application.g_f02 (idx), apex_application.g_f03 (idx) ); END LOOP;