user2851669
user2851669

Reputation:

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 query - 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 query - 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. Note: I don't want to use describe table

Upvotes: 0

Views: 2818

Answers (2)

Avrajit Roy
Avrajit Roy

Reputation: 3303

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

Upvotes: 0

dcieslak
dcieslak

Reputation: 2715

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.

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   

Upvotes: 1

Related Questions