如何在特定架构的数据库的所有表中搜索列名

时间:2014-11-25 13:44:02

标签: oracle

select table_name, column_name
from all_tab_columns 
where column_name = '<YOUR_COLUMN_HERE_IN_CAPITAL_CASE>'

如何在Oracle DB上使用上述列搜索查询来查找特定模式?

我问,因为我已经尝试了查询,并且它还返回了我感兴趣的架构之外的许多表,因此它们对我没有兴趣。

3 个答案:

答案 0 :(得分:5)

select table_name, column_name
FROM all_tab_columns 
where column_name = '<YOUR_COLUMN_HERE_IN_CAPITAL_CASE>' 
  and owner = '<schema>';

all_tab_columns包含当前用户拥有权限的所有列。所以它可能不会返回所有数据。

dba_tab_columns包含有关所有列的信息,但您可能需要一些特殊权限才能查询此字典视图。

最后,如果您只对当前用户拥有的所有表的列感兴趣,可以使用:

select table_name, column_name
FROM user_tab_columns 
where column_name = '<YOUR_COLUMN_HERE_IN_CAPITAL_CASE>';

但是这个视图没有OWNER列(它只包含当前用户拥有的所有列)

答案 1 :(得分:0)

您可以使用LIKE功能优化搜索。 我不知道列的确切名称,但您可以将所有者和表名添加到此列:

select table_name, column_name
from all_tab_columns 
where column_name = '<YOUR_COLUMN_HERE_IN_CAPITAL_CASE>'

以类似的方式:

select column1,column2,column3,more_columns
from all_tables_you_need
where column1 like '%&column1%'
and column2 like '%&column2%'
and column3 like '%&column3%';

这3个变量中的任何一个也可以为空,但你也可以在其中放置一个非常具体的变量,这样结果会有很大变化。如果你不确定这种情况,或者你想忽略区分大小写,请使用UPPER功能。

答案 2 :(得分:0)

使用以下内容。

您可以通过

使用的 SQL工具进行尝试
select table_name from all_tab_columns where column_name = 'PICK_COLUMN';

或者,如果您拥有 DBA权限

select table_name from dba_tab_columns where column_name = 'PICK_COLUMN';

但如果您不确定列名,可以将LIKE语句添加到当前查询中。

例如:

select table_name from all_tab_columns where column_name LIKE '%PICK_COLUMN%';