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

关键字:

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)

执行结果如下: