如何根据Oracle中的值查找表名[重复]
Posted
技术标签:
【中文标题】如何根据Oracle中的值查找表名[重复]【英文标题】:How to find the table name based on a value in Oracle [duplicate] 【发布时间】:2021-06-20 06:15:12 【问题描述】:如何根据我在 Oracle 中传递的值查找表名?查询应该检查模式中的所有表以检查给定值是否存在于任何表中
【问题讨论】:
***.com/questions/205736/… 您为什么需要执行这样的任务?您在寻找恶意软件吗?我很难理解按照您的要求做的合法业务需求.. 我倾向于同意@Mathguy。查找表的存在很简单,如 'SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE TABLE_NAME = 'NAMEOFMYTABLE';正如“基于我传递的值”所暗示的那样,您为什么需要一个过程?哦,考虑到 MixedCaseNames 的可能性(oracle 中的诅咒),您可以将 WHERE 子句改为 WHERE UPPER(TABLE_NAME) = UPPER('MYTABLENAME'); @EdStevens - 我认为情况比这更糟。 OP 希望在该表的行/列组合中找到具有给定值的表。就像“在其中一列的某行中找到一个值为'Mandelbrot'
的表”。我过去曾多次看到来自不同用户的此类请求。我仍然不明白这种搜索的合法需求是什么。更不用说搜索其他数据类型:例如搜索给定的日期 - 甚至不知道它是否可以存储为 date
、timestamp
甚至 varchar2
。
@mathguy - 啊,二读时我明白了。
【参考方案1】:
根据您的描述,您基本上可以使用三种不同的选项来实现所需的结果:
您可以查询 user_tables 表并检查架构上可用的所有表。任何用户都可以调用此表,因此您不需要任何特定权限。
SELECT * FROM USER_TABLES WHERE TABLE_NAME LIKE '%SOMETHING%';
您可以查询 all_tables 表。为此,您很可能需要一些更好的权限,就像调用 user_tables 时需要的那样。
SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE '%SOMETHING%';
您可以查询 dba_tables 表。如您所料,对于此表,您需要很大的权限才能检索所需的信息。
SELECT * FROM DBA_TABLES WHERE TABLE_NAME LIKE '%SOMETHING%';
提示: 如果您不太确定要查找的是表,可以使用 ALL_OBJECTS 表并识别对象的类型。
【讨论】:
看来你和我都误读/误读了 OP 的问题。看看@Mathguy 对我的评论的回复,然后重新阅读(仔细)OP 的问题。以上是关于如何根据Oracle中的值查找表名[重复]的主要内容,如果未能解决你的问题,请参考以下文章