2016-06-02 2 views
0

Следующая 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'

Как извлечь этот Informa из таблицы оракула. Примечание: Я не хочу использовать таблицу описания

+0

Используйте '' ALL_TAB_COLUMNS' и таблицы ALL_CONSTRAINTS'. – MT0

ответ

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 
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>'; 
Смежные вопросы