在oracle中显示表的模式

时间:2016-06-02 23:43:20

标签: oracle

以下mysql查询返回约束和默认值以及column_name,is_null和其他详细信息 -

mysql查询 - select TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE, COLUMN_TYPE, COLUMN_KEY, EXTRA from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = 'DB_NAME'

我想在Oracle中编写类似的查询,以下查询返回data_type和is_null但不返回约束和默认值 -

Oracle查询 - SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, NULLABLE FROM DBA_TAB_COLUMNS where owner = 'USERNAME'

如何从oracle表中提取这些信息。 注意:我不想使用describe table

2 个答案:

答案 0 :(得分:1)

Select tc.TABLE_NAME, tc.COLUMN_NAME, tc.DATA_TYPE, tc.NULLABLE, tc.DATA_DEFAULT,
  con.cons
from DBA_TAB_COLUMNS tc
left join
  ( select  listagg( cc.constraint_name, ',') within group (order by cc.constraint_name)  cons, 
         table_name, owner , column_name 
         from  DBA_CONS_COLUMNS cc 
          group by  table_name, owner , column_name ) con
  on con.table_name = tc.table_name and 
     con.owner = tc.owner and
     con.column_name = tc.column_name
where  tc.owner = 'USERNAME'
order by 1 ,2 

每列可能有多个约束(或没有约束)。因为使用左连接并且listagg函数在一列中显示所有约束。

TABLE_NAME         COLUMN_NAME  DATA_TYPE   NULLABLE    DATA_DEFAULT    CONS

AQ$_QUEUE_TABLES    OBJNO           NUMBER      N                        AQ$_QUEUE_TABLES_PRIMARY,SYS_C001643
AQ$_QUEUE_TABLES    SCHEMA          VARCHAR2    N                        SYS_C001640
AQ$_QUEUE_TABLES    SORT_COLS       NUMBER      N                        SYS_C001645
AQ$_QUEUE_TABLES    TABLE_COMMENT   VARCHAR2    Y       
AQ$_QUEUE_TABLES    TIMEZONE        VARCHAR2    Y   

答案 1 :(得分:0)

您仍然可以尝试使用以下代码段获取所需的详细信息。希望这会有所帮助。

注意:这是针对索引列的,因为我认为您可能也需要它

SELECT DISTINCT col.owner,
  col.table_name,
  col.DATA_TYPE,
  Col.Column_Name,
  DECODE(nullable,'Y','Yes','N','No') nullable,
  high_value(col.table_name,col.column_name), -- This is own created function to deal with LONG datatype columns
  Ind.Index_Name
FROM SYS.All_Tab_Cols col,
  All_Ind_Columns ind
WHERE Col.Table_Name = Ind.Table_Name
AND Col.Column_Name  = Ind.Column_Name(+)
AND Col.Table_Name   = UPPER('<TABLE_NAME>')
AND Col.Owner        = '<SCHEMA_NAME>';