Oracle DB data_length запроса (что он возвращает) - PullRequest
2 голосов
/ 11 августа 2011

Я выполняю несколько запросов к БД Oracle из моей Java-программы.Как только определенная таблица выбрана, этот запрос выполняется и возвращает некоторые черты для пользователя.

Упрощенная версия моего кода выглядит следующим образом.

String query = "SELECT column_name, data_type, data_length FROM all_tab_columns WHERE table_name = 'blahblah'";
String ColumnName;
String DataType;
String DataLength;

System.out.println(ColumName);
System.out.println(DataType);
System.out.println(DataLength);

Я не уверен относительно того, что data_lengthвозвращается.

Возвращает ли длина данных в поле?Или это возвращает максимальное значение.После некоторых поисков я натолкнулся на противоречивые мнения.И при сравнении типа данных, который я получаю, с его соответствующей длиной, кажется, что это может быть максимальная длина, но кто знает, может быть, поле просто максимизировано?

Например:

Data Type = Numberвозвращается Data Length = 22

Data Type = VARCHAR2 возвращается Data Length = 2000

Бонус: (+5 баллов за итоговую оценку и 1 бесплатное отсутствие в классе)

Как я могу изменить запрос, чтобы получить данные, которых у меня нет.(фактическая длина данных или максимальная длина данных).

Ответы [ 2 ]

8 голосов
/ 11 августа 2011

Это должно быть относительно легко проверить.Обратите внимание, что нет представления ALL_TABLE_COLUMNS - есть представления ALL_TAB_COLUMNS и ALL_TAB_COLS, предоставляющие эту информацию.Я создам пустую таблицу и выполню запрос, который, как я полагаю, рассчитывал ваш профессор.

SQL> create table empty_table (
  2    col1 number(10,2),
  3    col2 varchar2(100),
  4    col3 varchar2(100 byte),
  5    col4 varchar2(100 char)
  6  );

Table created.

SQL>   select column_name, data_type, data_length
  2      from all_tab_columns
  3     where table_name = 'EMPTY_TABLE'
  4  order by column_name;

COLUMN_NAME                    DATA_TYPE      DATA_LENGTH
------------------------------ -------------- -----------
COL1                           NUMBER                  22
COL2                           VARCHAR2               100
COL3                           VARCHAR2               100
COL4                           VARCHAR2               300

Теперь, когда вы увидели реальный результат, должно быть ясно, какая длина возвращается в DATA_LENGTHколонка.

0 голосов
/ 11 августа 2011

Это должно представлять длину, с которой был создан столбец.

т.е. числа по умолчанию 22, но вы можете переопределить этот номер (5) или что-то еще. varchar2 (4000) и т. д.

Чтобы узнать фактическую максимальную длину значений, содержащихся в столбце, вам нужно запросить саму таблицу, а не словарь данных.

SELECT max( len( mycol )) from mytab;

может быть собрана некоторая статистика для этих вещей, но она может быть ненадежной для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...