如何根据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' 的表”。我过去曾多次看到来自不同用户的此类请求。我仍然不明白这种搜索的合法需求是什么。更不用说搜索其他数据类型:例如搜索给定的日期 - 甚至不知道它是否可以存储为 datetimestamp 甚至 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中的值查找表名[重复]的主要内容,如果未能解决你的问题,请参考以下文章

oracle中已经知道一个具体值,如何根据该值查询出含有该值的表名和列名?

如何根据列名查找表名,然后访问该表

ORACLE 如何按逗号截取查询所得的表名

如何在存储过程中动态传递表名 - ORACLE [重复]

ABAP 通过字段找表程序

oracle中如何对多张表进行动​​态选择查询?使用表名和列名作为其他表的值?