Oracle SQL:如何根据列名查找表名?

10

如果我知道一个表的每一列的名称,但不知道表的名称,我该如何找到我需要的表的名称?


如果每个表的主键列名都是唯一的,那么您可以尝试访问数据库的元数据并搜索表吗? - NcDreamy
3个回答

14
根据 @Roobie 的解决方案,下面的代码将在您有权限访问的所有模式中搜索,以防表格不在您自己的模式中。还添加了不区分大小写的匹配。

根据 @Roobie 的解决方案,下面的代码将在您有权限访问的所有模式中搜索,以防表格不在您自己的模式中。还添加了不区分大小写的匹配。

SELECT owner, table_name
  FROM all_tab_columns
  WHERE UPPER(column_name) = UPPER('MYCOL');

嘿,乔希,编辑得不错。我认为你左边不需要使用UPPER(column_name)。干杯! - Roobie
2
@Roobie,99.8% 的时间没问题,但总有可能会出现一些疯狂的特殊情况,比如某个供应商编写了一个针对 SQL Server 设计的应用程序却制作了 Oracle 版本。在 Oracle 中可以创建混合大小写列,但最好不要这样做。例如:CREATE TABLE stupid_table ( "MixedCaseColumn" INTEGER PRIMARY KEY );UPPER 应用于两侧几乎可以解决 100% 的问题。想开怀大笑一下,请看我刚刚制作的这个 fiddle: http://sqlfiddle.com/#!4/2840e/1/0 - Joshua Huber

10

尝试这个(已知一列):

CREATE TABLE mytab(mycol VARCHAR2(30 CHAR));

SELECT table_name FROM user_tab_columns WHERE column_name='MYCOL';

注意MYCOLcolumn_name='MYCOL'中是大写;

干杯!


1
还有其他可用的视图:USER_TAB_COLS、ALL_TAB_COLS、ALL_TAB_COLUMNS。根据您的访问权限,这些也可用:DBA_TAB_COLS、DBA_TAB_COLUMNS。 - Roobie

-4
select * from all_updatable_columns where column_name like 'reqd col name';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接