Oracle APEX:如何将APP_USER替换为用户姓名而非登录名?
在Oracle APEX中显示用户姓名而非登录名的正确实现方法
你的代码存在的核心问题
- 数据源错误:
all_users是数据库级用户视图,并不包含用户姓名(first_name)字段,APEX的用户信息存储在APEX_WORKSPACE_APEX_USERS(对应新版APEX的APEX_USERS视图)中 - 输出方式不合理:
htp.prn直接输出的内容无法在页面上灵活复用,应该将用户姓名存入应用项后再引用 - 放置位置错误:9999密码页面负责密码相关操作,不适合用来初始化用户姓名这类会话级信息
正确实现步骤
1. 创建应用级存储项
先在应用的共享组件 > 应用项中创建一个项(比如命名为P_USER_FULL_NAME),用于存储用户的全名。
2. 编写正确的PL/SQL逻辑获取姓名
替换你的查询语句,从APEX专属用户表中提取信息:
DECLARE v_first_name VARCHAR2(20); v_last_name VARCHAR2(20); BEGIN SELECT first_name, last_name INTO v_first_name, v_last_name FROM APEX_WORKSPACE_APEX_USERS WHERE user_name = :APP_USER; :P_USER_FULL_NAME := v_first_name || ' ' || v_last_name; EXCEPTION WHEN NO_DATA_FOUND THEN :P_USER_FULL_NAME := :APP_USER; -- 查询不到姓名时,默认显示登录名 END;
3. 放置代码的正确位置
方案一:认证后执行的应用进程
在共享组件 > 应用进程中新建进程:- 进程点选择
After Authentication(用户登录认证完成后) - 类型选择
PL/SQL - 将上述代码粘贴到进程体中
- 进程点选择
方案二:应用项的自动计算
编辑之前创建的P_USER_FULL_NAME项:- 计算类型选择
PL/SQL表达式 - 计算点设置为
After Authentication - 计算体填入上述PL/SQL逻辑
- 计算类型选择
4. 在页面中展示姓名
在需要显示用户姓名的页面(比如导航栏、首页),直接引用&P_USER_FULL_NAME.即可。例如在页面的HTML区域中添加:
欢迎回来,&P_USER_FULL_NAME.
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

