Oracle APEX用自定义PL/SQL保存IG时company_id值异常变更求助
APEX交互式网格自定义PL/SQL处理时COMPANY_ID值异常排查方向
问题背景
使用区域源作为目标类型时,交互式网格(IG)的更新/插入操作正常,但采用自定义PL/SQL处理时,company_id的值被篡改,插入错误值。自定义PL/SQL结构如下:
begin case :APEX$ROW_STATUS when 'C' then insert into emp ( empno, ename, deptno, company_id ) values ( :EMPNO, :ENAME, :DEPTNO, :company_id ) returning rowid into :ROWID; when 'U' then update emp set ename = :ENAME, deptno = :DEPTNO, company_id = :company_id where rowid = :ROWID; when 'D' then delete emp where rowid = :ROWID; end case; end;
调试日志显示会话状态中COMPANY_ID=1,但实际获取到的值为1834779463308931,且存在关键日志:ignoring component value for COMPANY_ID - always use built-in value。
排查方向
检查IG字段属性配置
查看COMPANY_ID字段的「源」设置:是否配置为「序列」「内置值」等自动生成类型,这类配置会让APEX强制覆盖字段值,忽略会话传入的内容;同时确认字段的「可更新」属性是否正确,避免只读字段在提交时触发内部逻辑冲突。统一绑定变量大小写
日志中会话状态变量为大写COMPANY_ID,但PL/SQL中使用小写:company_id,虽然APEX绑定变量大小写不敏感,但部分场景下可能存在解析偏差,建议统一改为:COMPANY_ID测试。检查IG提交处理规则
查看IG的「处理」配置,确认是否针对COMPANY_ID设置了「计算值」「默认值」等提交规则,这类规则会在提交阶段覆盖传入的字段值。验证会话状态获取方式
尝试在PL/SQL中用V('COMPANY_ID')替代绑定变量,直接获取会话状态值,排查是否是绑定变量解析环节的问题;同时确认COMPANY_ID的会话状态作用域(应用级/页面级),避免提交过程中被内置逻辑重置。
内容的提问来源于stack exchange,提问作者Márlon Ferreira
相关产品推荐
相关产品推荐

