2012-03-24 64 views

回答

27

您正在寻找USER_TAB_COLUMNS - 或ALL_TAB_COLUMNS - - 所有架构中的查询执行中的列及其描述,除了都一样用户有权查看的表格。

一个典型的查询可能是:

select * 
    from user_tab_columns 
where table_name = 'MY_TABLE' 
order by column_id 

column_id是在表中的列的“秩序”。

你应该确保'MY_TABLE'是大写,除非你一直在使用套管添加表(一个坏主意),在这种情况下你需要使用类似= "MyTable"的东西。

具体desc相当于我从ss64偷以下,良好的Oracle资源:

select column_name as "Name" 
    , nullable as "Null?" 
    , concat(concat(concat(data_type,'('),data_length),')') as "Type" 
    from user_tab_columns 
where table_name = 'MY_TABLE'; 

您可以通过select * from dictionary找到所有这类观点的,这是data dictionary或顶层通过查看documentation

还有DBA_TAB_COLUMNS,它与ALL_TAB_COLUMNS相同,但是对于数据库中的每个表。这假定您有权查看它和表格。如果您无权访问此表,则需要让您的DBA授予您SELECT ANY DICTIONARY权限。

+0

谢谢!这绝对是我见过的最好解释。 – patricksweeney 2012-03-24 20:57:03

1

Oracle拥有一个包含有关数据库结构元数据的集合表。有一张桌子的桌子。意见表。列表。您可以通过使用诸如USER_TABLES(模式中的表),ALL_TABLES(您有权查看的表),DBA_TABLES(所有表,如果您有权限)查看这些表。更一般地说,许多数据库供应商支持“信息模式”,它提供了供应商间元数据的一致视图。搜索“ALL_TABLES”这里,看看所有可用的其它信息http://docs.oracle.com/cd/B28359_01/server.111/b28320/toc.htm

13

您还可以检索可以用来重新创建表的整个命令:

select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual; 
+1

这个答案很好,因为它还为表提供了索引和键。 – rlobban 2012-03-26 07:08:38

+1

在视觉上更具吸引力的是这个微小的修改:'select ddl from(from gamasutra)dbge_padata(dbms_metadata.get_ddl('TABLE','

','
'),'\ t | \ s {2}',CHR(13)双' – 2014-07-07 06:31:35

+1

@rlobban - 此命令不显示索引 – Kingsly 2014-07-30 14:05:22

相关问题