Разница между числом и целым типом данных в представлении словаря оракула

Я использовал слова слова оракула, чтобы узнать различия столбцов, если они есть между двумя схемами. При синхронизации несоответствий типов данных я обнаружил, что как типы данных NUMBER, так и INTEGER хранятся в файлах all_tab_columns/user_tab_columns/dba_tab_columns как NUMBER, так что трудно синхронизировать несоответствия типов данных, когда одна схема/столбец имеет тип данных номера, а другая схема/столбец имеет целочисленные типы данных.

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

Ответ 1

Целое число существует только для стандарта sql, то есть не рекомендуется Oracle.

Вместо этого вы должны использовать Number.

Целые числа сохраняются как Number в любом случае Oracle за кулисами.

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

Как было отмечено выше, вы можете искать столбцы (38,0) или аналогичные (т.е. столбцы без десятичных точек), но это только скажет вам, какие столбцы не могут принимать десятичные числа, а не какие столбцы были определены так, чтобы INTS могут быть сохранены.

Предложение: выполните профиль данных в столбцах числа. Что-то вроде этого:

 select max( case when trunc(column_name,0)=column_name then 0 else 1 end ) as has_dec_vals
 from table_name

Ответ 2

лучшее объяснение, которое я нашел, это:

В чем разница между INTEGER и NUMBER? Когда мы должны использовать NUMBER, и когда мы должны использовать INTEGER? Я просто хотел обновить мои комментарии здесь...

NUMBER всегда хранится по мере ввода. Масштаб составляет от -84 до 127. Но INTEGER округляется до целого числа. Шкала для INTEGER равна 0. INTEGER эквивалентен NUMBER (38,0). Это означает, что INTEGER является ограниченным числом. Десятичное число будет округлено. Но NUMBER не ограничено.

  • INTEGER (12,2) = > 12
  • INTEGER (12.5) = > 13
  • INTEGER (12.9) = > 13
  • INTEGER (12.4) = > 12
  • NUMBER (12,2) = > 12.2
  • НОМЕР (12.5) = > 12.5
  • НОМЕР (12.9) = > 12.9
  • НОМЕР (12.4) = > 12.4

INTEGER всегда медленнее, чем NUMBER. Так как integer является числом с добавленным ограничением. Для принудительного ограничения ограничений требуются дополнительные циклы ЦП. Я никогда не наблюдал никакой разницы, но может быть разница, когда мы загружаем несколько миллионов записей в столбце INTEGER. Если нам нужно убедиться, что ввод представляет собой целые числа, тогда лучше всего выбрать INTEGER. В противном случае мы можем придерживаться типа данных NUMBER.

Вот ссылка

Ответ 3

Это то, что я получил из документации оракула, но это для версии оракула 10g 2:

Когда вы определяете переменную NUMBER, вы можете указать ее точность (p) и масштаб (ы), чтобы она была достаточно, но не излишне большой. Точность - это число значащих цифр. Масштаб может быть положительным или отрицательным. Положительная шкала определяет количество цифр справа от десятичной точки; отрицательная шкала определяет количество цифр слева от десятичной точки, которое может быть округлено вверх или вниз.

Тип данных NUMBER поддерживается стандартными библиотеками баз данных Oracle и работает так же, как и в SQL. Он используется для измерений и суррогатов, когда текст или тип INTEGER не подходят. Он обычно присваивается переменным, которые не используются для вычислений (например, прогнозы и агрегации), и он используется для переменных, которые должны соответствовать поведению округления базы данных или требуют высокой степени точности. При принятии решения о назначении переменной типа NUMBER переменной следует учитывать следующие факты, чтобы максимизировать производительность:

  • Аналитические вычисления рабочего пространства по переменным NUMBER медленнее, чем другие числовые типы данных, потому что значения NUMBER рассчитываются в программном обеспечении (для точности), а не в аппаратном обеспечении (для скорости).
  • Когда данные извлекаются из аналитического рабочего пространства в реляционный столбец с типом данных NUMBER, производительность лучше всего, когда данные уже имеют тип данных NUMBER в аналитическом рабочем пространстве, потому что шаг преобразования не требуется.