APEX表单主键外键查找及动态动作插入P2_USER_ID空值问题求解
APEX排班系统插入空值问题及主键查询解决方案
一、P2_USER_ID空值问题修复
你遇到的空值问题核心是动态动作执行PL/SQL时,默认不会自动提交页面项到会话状态,按以下步骤排查修复:
- 首先调整动态动作配置:打开对应动态动作的执行PL/SQL代码动作属性,找到
要提交的页面项配置框,将P2_USER_ID、P2_START_WORK_TIME等所有你代码里引用的页面项全部添加到这个列表中,APEX才会把页面上填写的数值同步到后台会话供PL/SQL读取。 - 检查页面项的权限配置:如果
P2_USER_ID是隐藏项,确认其值保护属性是否关闭,开启值保护的情况下页面项的前端修改不会被提交到后台。 - 额外代码优化:你当前判断周六的逻辑存在多语言兼容问题,数据库默认语言非英文时会判断失效,将对应查询语句修改为:
select to_char(Start_work_date, 'DAY', 'NLS_DATE_LANGUAGE=AMERICAN') into Day_name from dual;
如果需要调试值传递问题,可以在PL/SQL代码开头加校验语句确认值是否正常传入:
IF :P2_USER_ID IS NULL THEN raise_application_error(-20001, 'USER_ID未正常传入,当前会话值为:'||:P2_USER_ID); END IF;
二、APEX表单主键外键查询方法
表单绑定的主键查询
- 打开页面设计器,选中你的表单区域,在右侧属性面板找到
源分组下的主键列配置项,这里直接显示当前表单关联的表主键列。
表结构的主键外键查询
- 方法1:在APEX后台打开
SQL工作室 > 对象浏览器,找到表单绑定的数据库表,点击约束标签页,就能直接看到该表所有主键(类型为P)、外键(类型为R)的定义,以及外键关联的目标表和列。 - 方法2:直接在SQL命令行执行查询语句(替换为你的表名,注意表名要大写):
-- 查询主键 select constraint_name, column_name from user_constraints c join user_cons_columns col on c.constraint_name = col.constraint_name where c.table_name = '你的表名' and c.constraint_type = 'P'; -- 查询外键 select constraint_name, column_name, r_constraint_name from user_constraints c join user_cons_columns col on c.constraint_name = col.constraint_name where c.table_name = '你的表名' and c.constraint_type = 'R';
内容的提问来源于stack exchange,提问作者GeraRys
相关产品推荐
相关产品推荐

