Oracle APEX ERR-1002错误求助:动态动作引用交互式网格列失败
解决APEX动态动作PL/SQL引用交互式网格列报错ERR-1002的问题
问题原因
交互式网格(Interactive Grid)的列不属于APEX的标准页面项(Page Item),无法直接通过:CODE这种绑定变量格式在PL/SQL动态动作中引用,这就是报错ERR-1002: Unable to find item ID for item :CODE的根本原因。
可行解决方案
1. 通过JavaScript获取列值后传递给PL/SQL
调整动态动作执行顺序:
- 第一步:执行JavaScript代码,获取当前行的
CODE列值并存入隐藏页面项(需提前创建,比如P1_HIDDEN_CODE)
注意替换var ig = apex.region("YOUR_IG_STATIC_ID").widget().interactiveGrid("getViews", "grid"); var selectedRow = ig.getSelectedRecords()[0]; if (selectedRow) { apex.item("P1_HIDDEN_CODE").setValue(selectedRow[0].CODE); }YOUR_IG_STATIC_ID为你的交互式网格实际静态ID,隐藏项数据类型要和CODE列匹配。 - 第二步:执行PL/SQL代码,通过
:P1_HIDDEN_CODE引用目标值-- 示例逻辑:输出获取到的CODE值 DBMS_OUTPUT.PUT_LINE('CODE值:' || :P1_HIDDEN_CODE);
2. 在PL/SQL中通过数据表查询值
如果交互式网格基于数据表,可结合会话变量和主键列查询目标值(需提前用隐藏项存储当前选中行的主键,比如P1_SELECTED_ID):
DECLARE l_code VARCHAR2(100); BEGIN SELECT CODE INTO l_code FROM YOUR_TABLE_NAME WHERE PRIMARY_KEY_COLUMN = :P1_SELECTED_ID; -- 后续业务逻辑处理 END;
3. 利用网格行选择触发的内置变量
若动态动作由网格行选择触发,可直接在PL/SQL中使用APEX$ROW变量访问当前行的列值:
DECLARE l_code VARCHAR2(100); BEGIN l_code := APEX$ROW.CODE; -- 业务逻辑处理 END;
额外注意事项
- 确认交互式网格的静态ID配置正确,否则JavaScript无法定位网格实例
- 测试时开启APEX调试模式,查看动态动作各步骤的执行日志,排查值传递是否异常
内容的提问来源于stack exchange,提问作者Adrián
相关产品推荐
相关产品推荐

