Oracle получить размер столбца данных - PullRequest
11 голосов
/ 12 февраля 2011

Я новичок в Oracle db, и мне интересно, смогу ли я узнать тип данных и размер данных ... Я имею в виду: допустим, у меня есть столбец "location" типа varchar2 (20) в таблице "products" Могу ли я написать запрос, который вернул бы меня в результате "varchar2" и "20"?

Спасибо!

Ответы [ 5 ]

25 голосов
/ 12 февраля 2011

Оформить user_tab_columns .

select data_type, data_length 
  from user_tab_columns
 where table_name = 'PRODUCTS'
   and column_name = 'LOCATION';
5 голосов
/ 14 февраля 2011

Вам нужно выяснить тип и размер столбца для понимания данных, или вы пишете программу, которая должна знать это во время выполнения?

Если вам нужно знать это только для своих знаний, введите desc tablename в SQLPlus, чтобы рассказать вам о столбцах в таблице.

Если вам нужно программно определить тип и размер, какой язык вы используете ... PL / SQL? Java

Обратите внимание, что при выборе из USER_TAB_COLUMNS будут перечислены только столбцы в таблицах в вашей собственной схеме. Для других таблиц вам нужно взглянуть на ALL_TAB_COLUMNS (или DBA_TAB_COLUMNS, если администратор БД разрешил вам доступ к нему). Обратите внимание, что ваш работодатель или клиент может запретить компилировать хранимые процедуры или пакеты с любым из них.

3 голосов
/ 12 февраля 2011
SELECT CHAR_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = <TABLENAME> AND COLUMN_NAME = <COLUMNNAME>;     
1 голос
/ 18 марта 2016

Я делаю следующее из sqlplus для оракула:

SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_NAME = 'YOUR';

Надеюсь, у вас это тоже получится!

1 голос
/ 16 февраля 2015

Ответ на этот вопрос был мне полезен.Но есть одно важное различие, которое необходимо учитывать при получении data_length, когда тип столбца равен NVARCAHR2.Длина_данных, возвращаемых для столбца NVARCHA2, удваивается.

Это связано с используемой кодировкой символов. Документация Oracle гласит:

Количество байтов может быть в два раза больше для кодировки AL16UTF16 и в три раза больше для кодировки UTF8.Итак, идеальный запрос будет следующим:

select table_name, column_name, 
data_type, NVL(char_col_decl_length, data_length) 
from user_tab_columns where table_name='T51_NOCOMP';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...