You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Apex中的PL/SQL代码以支持多角色分配?

解决APEX多角色分配PL/SQL代码问题

问题背景

我有两段用于添加、编辑用户并分配角色的PL/SQL代码,目前仅支持单角色分配:

  • 单角色时添加、编辑功能正常
  • 尝试分配多角色时,提交报错No data was found.

原添加用户代码

begin
APEX_CUSTOM_AUTH.SET_USER(:P7_USER_NAME);

APEX_ACL.ADD_USER_ROLE (
p_application_id => 100,
p_user_name => :P7_USER_NAME,
p_role_static_id => :P7_USER_ROLE
);
end;

原编辑用户代码

DECLARE
l_as_user_any_role BOOLEAN := false;
BEGIN
l_as_user_any_role := APEX_ACL.HAS_USER_ANY_ROLES (
p_application_id => 100,
p_user_name => :P7_USER_NAME);

if l_as_user_any_role then
APEX_ACL.REPLACE_USER_ROLES (
p_application_id => 100,
p_user_name => :P7_USER_NAME,
p_role_static_ids => wwv_flow_t_varchar2( :P7_USER_ROLE) );
end if;
end;

问题原因

报错核心是:当:P7_USER_ROLE为多角色(比如逗号分隔的字符串)时,原代码直接将整个字符串作为单个角色ID传入API,导致APEX找不到对应角色,触发**No data was found.**错误。APEX的ACL相关API需要接收wwv_flow_t_varchar2类型的集合参数,而非拼接后的字符串。

修正后的代码

1. 添加用户(支持多角色)

使用APEX_ACL.ADD_USER_ROLES(复数形式),配合apex_string.split将多角色字符串拆分为集合:

begin
APEX_CUSTOM_AUTH.SET_USER(:P7_USER_NAME);

-- 将逗号分隔的角色字符串拆分为集合,传入多角色添加API
APEX_ACL.ADD_USER_ROLES (
p_application_id => 100,
p_user_name => :P7_USER_NAME,
p_role_static_ids => apex_string.split(:P7_USER_ROLE, ',') -- 按逗号拆分角色,可根据实际分隔符调整
);
end;

2. 编辑用户(支持多角色)

同样需要将角色字符串拆分为集合,同时补充用户原本无角色的处理逻辑:

DECLARE
l_as_user_any_role BOOLEAN := false;
BEGIN
l_as_user_any_role := APEX_ACL.HAS_USER_ANY_ROLES (
p_application_id => 100,
p_user_name => :P7_USER_NAME);

if l_as_user_any_role then
APEX_ACL.REPLACE_USER_ROLES (
p_application_id => 100,
p_user_name => :P7_USER_NAME,
p_role_static_ids => apex_string.split(:P7_USER_ROLE, ',') -- 拆分多角色为集合
);
else
-- 用户原本无角色,直接添加多角色
APEX_ACL.ADD_USER_ROLES (
p_application_id => 100,
p_user_name => :P7_USER_NAME,
p_role_static_ids => apex_string.split(:P7_USER_ROLE, ',')
);
end if;
end;

补充说明

  • 确保:P7_USER_ROLE的输入格式为逗号分隔的角色静态ID(比如ROLE_ADMIN,ROLE_EDITOR),如果使用其他分隔符,需调整apex_string.split的第二个参数。
  • 编辑代码中补充了无角色用户的处理,避免遗漏新角色分配。

内容的提问来源于stack exchange,提问作者user5543283

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:42:38