简体   繁体   English

在oracle中显示表的架构

[英]show the schema of a table in oracle

The following mysql query returns the constraints and the default values along with column_name, is_null and other details - 以下mysql查询返回约束和默认值以及column_name,is_null和其他详细信息-

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

I want to write a similar query in Oracle, the following query returns data_type and is_null but doesn't return constraints and default values - 我想在Oracle中编写类似的查询,以下查询返回data_type和is_null,但不返回约束和默认值-

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

How can I extract those information from an oracle table. 如何从oracle表中提取这些信息。 Note: I don't want to use describe table 注意:我不想使用describe表

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 

There can be multiple constraints (or none) for each column. 每列可以有多个约束(或没有约束)。 Because of that left join is used and listagg function to display all constraint in one column. 由于使用了左listagg ,因此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   

You can still try to use this below snippet to get the requested details. 您仍然可以尝试使用下面的代码片段来获取所需的详细信息。 Hope this helps. 希望这可以帮助。

Note : This is for indexed columns as I thought you might need this too 注意:这是针对索引列的,因为我认为您可能也需要此列

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>';

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM