oracle sql 根据表字段查询表名(可以根据多个字段,查询出唯一的表名)

本文介绍了一种通过AOP获取系统字段权限的方法,并提出了一种SQL优化策略,用于快速定位字段对应的唯一表名,解决了传统查询效率低下的问题。但随着字段数量增加,查询速度变慢,寻求更优解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我之前有一个需求,一个系统加字段权限,那么一一更改比较麻烦,我用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值