暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓数据库SQL之KES获取用户组成员信息

原创 数据猿 2024-01-16
403


关键字:

SQL、用户组成员信息、人大金仓、KingbaseES

前言

KES中用户组成员的oid以数组的形式存储在视图sys_usergroup中、成员的详细信息存储于系统表sys_ authid中。

现需求如下:执行一次查询,获取指定用户组的成员的详细信息。

分析:可以通过sys_usergroup视图获取指定用户组的成员oid,再根据获取到的成员oid到系统表sys_ authid中获取成员的详细信息。

难点:用户组成员的oid以数组的形式存储在视图sys_usergroup中,联立查询时如何处理成员oid数组?

解决:通过函数UNNEST和函数ANY解决

UNNEST()

UNSEST函数用于在SQL中将数组解包为一行行的元素。通常情况下,一个数组是作为单个值存储在数据库中的。但是,当需要对数组中的单个元素进行查询时,就需要使用UNNEST函数将其解包后再进行查询操作;

UNNEST函数简单使用示例如下:

SELECT UNNEST('{1,2,3,4,5,6,7}'::INT[]);

执行上述SQL可得到结果如下:

KES中用户组成员的oid以数组的形式存储在视图sys_usergroup中,执行SQL:SELECT * FROM sys_usergroup结果如字段group_members:

使用UNNEST函数查询用户组oid为18482的字段group_memebers,执行SQL:SELECT UNNEST(group_members) FROM sys_usergroup WHERE group_oid =18482结果如下:

可以看到成员OID数组被展开为行数据了。

ANY()

ANY函数是在SQL语言中用于判断值与集合的关系的函数。它通常用于子查询中,用来判断一个值是否在一个集合中。

其用法如下:value operator ANY(subquery)

value是要进行判断的值,operator是比较操作符(=、<、>等),subquery是一个子查询,用来返回一个值的集合

获取用户组成员详细信息

综上所述可以得到SQL:

SELECT * FROM sys_authid a WHERE a.oid = any (SELECT UNNEST(group_members) FROM sys_usergroup WHERE group_oid =18482)

执行结果如下:


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论