Вытащить все поля с их типами

bsr
Дата: 30.11.2009 17:58:15
Доброго времени суток!

Поля и их типы хранятся в X_tab_columns
Типов полей много и для каждого есть свои особенности хранения.
Т.е. чтобы сформировать выгрузку всех полей необходимо знать как что хранится, и, соответственно ручками описать каждый тип.

Это долго и напряжно :( :)

Может есть уже у кого готовый выгрузчик полей и их типов?

Спасибо!

ЗЫ. Извините за наглость!
_Alex_SMIRNOV_
Дата: 30.11.2009 18:03:30
А нельзя более поконкретнее что вы хотите выгрузить из базы и в каком виде???

- просто экспорт структуры таблиц - exp / expdp
- dbms_metadata.get_ddl - получить скрипт таблицы
- что-то третье?
bsr
Дата: 30.11.2009 18:12:44
Нужно получить список полей таблицы с их типами
col1 - название поля
col2 - тип поля со всеми длинами :)

например:
на входе запроса(процедуры) имя таблицы
на выходе:
col1 - COL_ID
col2 - NUMBER(10, 3)

Просто, для каждого типа есть свои особенности храниния
Например, если тип NUMBER имеет длину 22, то на выходе будет просто NUMBER
если тип DATE, то если и стоит размерность - 7, то на выходе все-равно будет DATE
и т.д.....
pravednik
Дата: 30.11.2009 18:21:58
инфа в столбцах
COLUMN_NAME                               NOT NULL VARCHAR2(30)
 DATA_TYPE                                          VARCHAR2(106)
 DATA_TYPE_MOD                                      VARCHAR2(3)
 DATA_TYPE_OWNER                                    VARCHAR2(30)
 DATA_LENGTH                               NOT NULL NUMBER
 DATA_PRECISION                                     NUMBER
 DATA_SCALE                                         NUMBER
вас не удовлетворяет ??
bsr
Дата: 30.11.2009 18:26:34
to pravednik
не удовлетворяет... :(
pravednik
Дата: 30.11.2009 18:29:05
bsr
to pravednik
не удовлетворяет... :(

можно поинтересоваться, чем ?
_Alex_SMIRNOV_
Дата: 30.11.2009 18:48:16
pravednik
bsr
to pravednik
не удовлетворяет... :(

можно поинтересоваться, чем ?


Думаю человек хочет получить что-то типа desc table_name и не писать decode и конкатинацию по нескольким полям что бы получить тип поля.

Кстати а desc table_name вам не подойдет?
Тифа
Дата: 30.11.2009 20:34:54
dba_tab_columns?
с декодом если есть варчар сувать data_length
bsr
Дата: 01.12.2009 11:22:26
Эх, всегда найдется человек, который начнет спрашивать "а зачем тебе оно нужно", "чем не устраивает это или то" и т.д. и т.п. :(

В общем все оказалось не так страшно и напряжно :)

select
case when data_type = 'NUMBER' then data_type||decode(data_scale, null, null, 0, '('||data_precision||')', '('||data_precision||','||data_scale||')')
     when data_type LIKE '%CHAR%' or data_type = 'RAW' then data_type||'('||data_length||')'
     else data_type
end type
,t.*
from all_tab_columns t
where 1=1
  and owner = 'XXX'
  and table_name = 'YYY'

надеюсь всё учел...
pravednik
Дата: 01.12.2009 11:26:35
bsr,

Эх, всегда найдется человек, который начнет спрашивать "а зачем тебе оно нужно", "чем не устраивает это или то" и т.д. и т.п. :(
потому что в большинстве случаев, автору или лень что-то писать(он хочет получить готовый ответ), или он просто не видит нужные "источники" для получения необходимой инфы...
и ваш случай - очередное тому подтверждение ;)