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

Oracle APEX报表多选checkbox仅单条记录入库问题求助

Oracle APEX交互式报表勾选多行批量更新仅生效1条的解决方案

问题原因

你当前代码的核心问题是使用了双层嵌套循环:

  • APEX_APPLICATION.G_F01数组仅存储所有勾选行的支票号,长度等于你勾选的行数
  • APEX_APPLICATION.G_F02数组存储报表所有行的备注输入值,长度等于报表总显示行数
    双层循环会导致每一条勾选的支票号,都会被所有行的备注循环覆盖更新,最终每条支票号的备注只会保留最后一次循环的备注值,甚至会出现多条勾选记录被更新成同一条备注的异常,也就是你看到的仅1条记录生效的问题。

修复步骤

1. 修改交互式报表SQL查询

调整APEX_ITEM.CHECKBOX的返回值,拼接行号和支票号,用于后续匹配同一行的备注输入:

select  
APEX_ITEM.CHECKBOX(1, ROWNUM||':'||pdcq.CHEQUE_NUMBER)"SELECT", 
pdc.CUST_NAME ,pdr.RECEIPT_NUMBER ,pdcq.INSTALLMENT,
pdcq.CHEQUE_NUMBER,pdcq.CHEQUE_AMOUNT, APEX_ITEM.TEXT(2,null) Remarks
from pdc_customer pdc,pdc_receipt pdr,pdc_cheques pdcq
where pdc.CUST_ID=pdr.CUST_ID and pdc.CUST_ID=pdcq.CUST_ID and pdcq.status='Pending'  AND pdcq.RECEIPT_NUMBER=pdr.receipt_number
 and pdcq.APPROVER=NVL(SYS_CONTEXT('APEX$SESSION','APP_USER'), USER) 

2. 修改PL/SQL处理逻辑

去掉嵌套循环,拆分勾选值得到行号和支票号,直接匹配对应行的备注:

declare
    v_user varchar2(100);
    v_rn number;
    v_cheque_number varchar2(100);
    v_colon_pos number;
begin 
    v_user := NVL(SYS_CONTEXT('APEX$SESSION','APP_USER'), USER); 
    FOR I in 1 ..APEX_APPLICATION.G_f01.COUNT 
    LOOP 
        -- 拆分获取当前勾选行的行号和支票号
        v_colon_pos := INSTR(APEX_APPLICATION.G_F01(i), ':');
        v_rn := TO_NUMBER(SUBSTR(APEX_APPLICATION.G_F01(i), 1, v_colon_pos-1));
        v_cheque_number := SUBSTR(APEX_APPLICATION.G_F01(i), v_colon_pos+1);
        
        UPDATE PDC_STATUS_HISTORY SET STATUS='Approved', 
          REMARKS=APEX_APPLICATION.G_F02(v_rn), 
          APPROVED_DATE=sysdate ,
          APPROVED_BY=v_user 
          WHERE APPROVAL_LEVEL=1 and 
          CHEQUE_NUMBER=v_cheque_number; 
    END LOOP; 
    COMMIT;
end;

注意事项

  • 如果你需要处理报表多页的勾选记录,需要将交互式报表的分页模式调整为「所有行」,或者开启报表的「提交所有行」属性
  • 如果你的支票号本身包含冒号,可以替换为其他不会出现在支票号中的特殊字符作为分隔符,例如|
  • 可根据业务需要添加异常捕获逻辑,避免更新出错导致数据异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:36:05