Как показать комментарии столбца с дескрипцией
Я хочу таблицу desc; чтобы показать комментарии столбцов. Я видел, что некоторые люди достигли этого, однако я не мог понять, как это сделать. Возможно, это зависит от версии SQL Developer, у меня 2.1.0.63. База данных - это Oracle 11g.
Это то, что я получаю при выполнении desc table;:
Desc table;
Name Nullable Type
------------------- -------- -----
ID NOT NULL NUMBER(38)
ITEM_ID NUMBER(38)
И я хотел бы получить что-то вроде этого:
Desc table;
Name Nullable Type Comment
------------------- -------- ---------- ---------------------------------
ID NOT NULL NUMBER(38) Table id
ITEM_ID NUMBER(38) Reference to an item
Ответы
Ответ 1
команда desc интерпретируется по-разному для разных инструментов. Что он делает, так это сделать некоторые стандартные представления Oracle.
Вот запрос на те представления, которые предоставят нужные данные столбца, но я рекомендую вам сделать select *, чтобы увидеть все, что доступно.
У вас есть 3 типа представлений, представления dba_, all_ и user_ *. Я использую user_ *, потому что это доступно для каждой схемы/пользователя, но в нем перечислены только объекты, принадлежащие этой схеме/пользователю. Представления dba_ обычно относятся только к dba, и все представления могут быть доступны или могут быть недоступны для вас в зависимости от того, насколько вы доверяете вам. ^ _ ^
select tc.column_name
, tc.nullable
, tc.data_type || case when tc.data_type = 'NUMBER' and tc.data_precision is not null then '(' || tc.data_precision || ',' || tc.data_scale || ')'
when tc.data_type like '%CHAR%' then '(' || tc.data_length || ')'
else null
end type
, cc.comments
from user_col_comments cc
join user_tab_columns tc on cc.column_name = tc.column_name
and cc.table_name = tc.table_name
where cc.table_name = upper(:tablename)
Ответ 2
Вот определение от Oracle SQL Developer (как показано в виде столбца таблицы):
SELECT "COLUMN_NAME", "DATA_TYPE", "NULLABLE", "DATA_DEFAULT", "COLUMN_ID", "COMMENTS" FROM(
select c.column_name, case when data_type = 'CHAR' then data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'
when data_type = 'VARCHAR' then data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'
when data_type = 'VARCHAR2' then data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'
when data_type = 'NCHAR' then data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'
when data_type = 'NUMBER' then
case when c.data_precision is null and c.data_scale is null then 'NUMBER'
when c.data_precision is null and c.data_scale is not null then 'NUMBER(38,'||c.data_scale||')'
else data_type||'('||c.data_precision||','||c.data_SCALE||')' end
when data_type = 'NVARCHAR' then data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'
when data_type = 'NVARCHAR2' then data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'
else data_type end data_type,
decode(nullable,'Y','Yes','No') nullable,
c.DATA_DEFAULT,column_id, com.comments
from sys.Dba_tab_Columns c,
sys.Dba_col_comments com
where c.owner = :OBJECT_OWNER
and c.table_name = :OBJECT_NAME
and c.table_name = com.table_name
and c.owner = com.owner
and c.column_name = com.column_name
order by column_id
)