APEX应用中使用:APP_USER查询无结果的问题求助
问题详情
我在APEX页面中编写了如下查询,用于展示预订记录:
select locs.LOCATION_DESCRIPTION "LOCATION", rsrv.Room_ID "Room Number", rsrv.WORKPLACE_ID "Desk Number", rsrv.RESERVATION_DATE "Date", rsrv.TIME_FROM "From", rsrv.TIME_TO "To" FROM WPB_RESERVATIONS rsrv, WPB_USERNAMES usrs, WPB_LOCATIONS locs WHERE upper(usrs.APEX_USERNAME) = upper(:APP_USER) AND (upper(rsrv.FIRST_NAME) = upper(usrs.FIRST_NAME) AND upper(rsrv.LAST_NAME) = upper(usrs.LAST_NAME)) AND rsrv.LOC_ID = locs.LOC_ID AND rsrv.RESERVATION_DATE >= SYSDATE-1
页面没有返回任何结果,但把upper(usrs.APEX_USERNAME) = upper(:APP_USER)替换为upper(usrs.APEX_USERNAME) = 'MS'后,就能正常显示预期数据。我试过各种:APP_USER和v(APP_USER)的用法都没解决,求助。
排查解决建议
- 确认当前
:APP_USER的实际值:在页面新增一个静态文本区域,设置值为&APP_USER.,或者临时加一个报表区域执行select :APP_USER as current_user from dual,查看当前登录用户的用户名,对比WPB_USERNAMES表中APEX_USERNAME转大写后的值是否匹配。 - 排查大小写转换的特殊情况:如果用户名包含空格、特殊字符,转大写可能出现异常。执行
select upper(APEX_USERNAME) from WPB_USERNAMES where upper(APEX_USERNAME) like '%' || upper(:APP_USER) || '%',看是否能命中目标记录。 - 验证绑定变量的使用场景:确保查询是作为APEX报表的数据源(交互式/经典报表),而非硬编码的静态SQL(静态SQL中绑定变量可能不生效)。如果是在PL/SQL块中调用,要避免字符串拼接,正确使用绑定变量。
- 检查APEX会话的用户上下文:通过APEX会话管理查看当前会话的
APP_USER值,或者在SQL命令窗口执行select v('APP_USER') from dual,确认会话中的用户值是否符合预期(比如SSO登录可能导致用户名和预期不一致)。 - 校验关联条件的完整性:确认
WPB_USERNAMES表中对应当前用户的记录,其FIRST_NAME和LAST_NAME转大写后,在WPB_RESERVATIONS表中有匹配的记录——有时候不是:APP_USER的问题,而是后续关联条件过滤掉了数据。 - 尝试用
v('APP_USER')替代:APP_USER:把查询中的upper(:APP_USER)改成upper(v('APP_USER')),部分场景下这种方式能正确读取会话变量。 - 检查表访问权限:确认当前APEX用户拥有
WPB_USERNAMES、WPB_RESERVATIONS、WPB_LOCATIONS表的读取权限,权限不足可能导致查询无结果但不报错。
内容的提问来源于stack exchange,提问作者mona shiri
相关产品推荐
相关产品推荐

