我之前有一个需求,一个系统加字段权限,那么一一更改比较麻烦,我用aop的方式获取了返回值,但是返回的数据不知道是哪个字段哪个表的,如果将所有的字段权限记录表一一查询,那么很费性能,数据还多,我就想到了sql语句,根据字段查询表名,但是查来查去,网上都是只能根据一个字段,查询出这个字段对应的所有表名,这样就查询了很多的表,经过搜索,有了一些启发,才有了下面的sql语句,根据多个字段查询唯一的表名称。
SELECT CASE
WHEN PASSWORD.num =1 THEN 'PASSWORD'
WHEN USERNAME.num =1 THEN 'USERNAME' END FIELDUNIQUENESS FROM
(select count(1) num from user_tab_columns where column_name ='PASSWORD') PASSWORD,
(select count(1) num from user_tab_columns where column_name ='USERNAME') USERNAME
如上sql语句会查询出字段是唯一的字段名称返回
获取到唯一的字段,在用字段去查询表名称,下面就是查询表名的sql语句
Select table_name from user_tab_columns where column_name ='PASSWORD'
查询结果如下:
那么我们就能知道,接口返回值的表名就是上图的表名,可以和字段权限记录的表名进行对比,相同表名进行字段权限对比
唯一美中不足的是,如下的这个sql语句,字段多了以后查询的很慢,不知道应该怎么解决,有思路的小伙伴也可以私信告诉我哦!
SELECT CASE
WHEN PASSWORD.num =1 THEN 'PASSWORD'
WHEN USERNAME.num =1 THEN 'USERNAME' END FIELDUNIQUENESS FROM
(select count(1) num from user_tab_columns where column_name ='PASSWORD') PASSWORD,
(select count(1) num from user_tab_columns where column_name ='USERNAME') USERNAME