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

Oracle数据库:查询用户权限并输出true/false格式结果

解决方案

要实现每个用户对应所有权限的权限名=true/false格式输出,核心是先生成用户与所有权限的完整组合,再判断用户是否拥有对应权限,最后拼接结果:

SELECT 
    u.login,
    LISTAGG(
        r.name || '=' || CASE WHEN ur.user_id IS NOT NULL THEN 'true' ELSE 'false' END,
        ';'
    ) WITHIN GROUP (ORDER BY r.id) AS UserRights
FROM 
    Users u
CROSS JOIN 
    Rights r
LEFT JOIN 
    UserRights ur ON u.id = ur.user_id AND r.id = ur.right_id
GROUP BY 
    u.login
ORDER BY 
    u.login;

逻辑说明

  • CROSS JOIN Rights r:生成每个用户与系统所有权限的笛卡尔积,确保不会遗漏用户未拥有的权限项。
  • LEFT JOIN UserRights:关联用户权限关联表,通过ur.user_id IS NOT NULL判断用户是否持有当前权限,用CASE WHEN输出对应的true/false状态。
  • LISTAGG:将每个用户的所有权限状态按权限ID排序后,用分号拼接成指定格式的字符串。

预期输出

针对你提供的测试数据,执行后会得到如下结果:

LOGINUserRights
test1read=true;write=false
test2read=true;write=true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:45:59