You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex提交页面时如何将两个页项值作为两行插入表

Oracle Apex 多页项批量插入解决方案

思路可行性验证

你提到的按命名规则筛选页项循环插入的思路是可行的,但直接查APEX_APPLICATION_PAGE_ITEMS有两个需要注意的点:

  • 该视图存储的是页项元数据,如果你后续新增其他符合P1_ITEM%命名规则但不需要插入的页项,会导致误插入无效数据
  • 动态获取页项值需要调用V()函数或者APEX_UTIL.GET_SESSION_STATE方法,不能直接引用元数据返回的页项名字符串

循环插入的具体实现

可以根据页项是否会后续扩容,选择两种实现方案:

方案1:固定页项硬编码(最稳妥,适合页项数量固定的场景)

直接在页面提交后的「处理」节点新增一个PL/SQL类型的处理逻辑,代码如下:

-- 可根据需求加非空判断
IF :P1_ITEM_01 IS NOT NULL THEN
  INSERT INTO mos.items (str) VALUES (:P1_ITEM_01);
END IF;
IF :P2_ITEM_02 IS NOT NULL THEN
  INSERT INTO mos.items (str) VALUES (:P2_ITEM_02);
END IF;

该方案不需要循环,执行效率最高,也不会出现页项误匹配的问题。

方案2:动态匹配循环插入(适合页项后续会扩容的场景)

如果你后续会不断新增符合命名规则的页项,不想每次修改插入代码,可以用你提到的动态筛选方案,代码示例如下:

FOR rec IN (
  SELECT item_name
  FROM APEX_APPLICATION_PAGE_ITEMS
  WHERE application_id = :APP_ID
    AND page_id = :APP_PAGE_ID
    AND item_name LIKE 'P1_ITEM%'
) LOOP
  -- 非空过滤
  IF APEX_UTIL.GET_SESSION_STATE(rec.item_name) IS NOT NULL THEN
    INSERT INTO mos.items (str)
    VALUES (APEX_UTIL.GET_SESSION_STATE(rec.item_name));
  END IF;
END LOOP;

注意必须加上application_id和page_id的过滤条件,避免匹配到其他应用、其他页面的同名页项。


内容的提问来源于stack exchange,提问作者Oguen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 21:42:00