2015-05-04 3 views
2

Мне нужен запрос Oracle DB, где я могу получить первичные ключи, тип данных и длину атрибута в BYTES.Запрос Oracle DB

В настоящее время я делаю:

SELECT cols.table_name, cols.column_name 
FROM all_constraints cons, all_cons_columns cols 
WHERE cons.constraint_type = 'P' 
    AND cons.constraint_name = cols.constraint_name 
    AND cons.owner like 'DBP%'; 

где я получаю имя таблицы, имя столбца, который является первичным ключом. Теперь мне нужен тип данных и длина столбца в BYTES.

ответ

1

Соединитесь с all_tab_columns, чтобы получить тип данных и (максимальную) длину в байтах.

select 
    cols.table_name, 
    cols.column_name, 
    tab_cols.data_type, 
    tab_cols.data_length 
from all_constraints cons 
join all_cons_columns cols 
    on cons.owner = cols.owner 
    and cons.constraint_name = cols.constraint_name 
join all_tab_columns tab_cols 
    on cols.owner = tab_cols.owner 
    and cols.table_name = tab_cols.table_name 
    and cols.column_name = tab_cols.column_name 
where cons.constraint_type = 'P' 
    and cons.owner like 'DBP%'; 

Вы не указали, но я предполагаю, что вы хотите максимальную длину. Если вы хотите использовать фактический использованный размер для столбца, вы можете использовать AVG_COL_LENGTH и умножить его на NUM_ROWS в ALL_TABLES.

Смежные вопросы