десятичное число (s, p) или число (s, p)?

недавно во время работы над db2 - & gt; Проект миграции оракула, мы столкнулись с этой ситуацией. разработчики непреднамеренно создавали новые структуры таблиц, используя десятичные (s, p) столбцы. Я не помню, чтобы Oracle поддерживал это, но затем некоторые исследования показали, что это тип данных ANSI, поэтому поддерживается Oracle.

Однако вопрос для меня остался -

how is this data handled internally ? is there a cost of using ANSI types instead of Oracle's built in types ? Will there be an impact during the data migration if the target type was Oracle built-in type ?

Ответы на вопрос(2)

Решение Вопроса

они одинаковые:

SQL statements that create tables and clusters can also use ANSI data types and data types from the IBM products SQL/DS and DB2. Oracle recognizes the ANSI or IBM data type name that differs from the Oracle Database data type name. It converts the data type to the equivalent Oracle data type, records the Oracle data type as the name of the column data type, and stores the column data in the Oracle data type based on the conversions shown in the tables that follow.

Таблица ниже этой цитаты показывает, чтоDECIMAL(p,s) внутренне рассматривается какNUMBER(p,s):

SQL> create table t (a decimal(*,5), b number (*, 5));

Table created

SQL> desc t;
Name Type        Nullable Default Comments 
---- ----------- -------- ------- -------- 
A    NUMBER(*,5) Y                         
B    NUMBER(*,5) Y  

Тем не менее, масштаб по умолчанию равен 0 дляDECIMAL, Который означает, чтоDECIMAL(*) рассматривается какNUMBER(*, 0)т.е.INTEGER:

SQL> create table t (a decimal, b number, c decimal (5), d decimal (5));

Table created

SQL> desc t;
Name Type      Nullable Default Comments 
---- --------- -------- ------- -------- 
A    INTEGER   Y                         
B    NUMBER    Y                         
C    NUMBER(5) Y                         
D    NUMBER(5) Y   
 14 июн. 2012 г., 13:06
@ learn4living - Oracle не конвертирует данные (значения, хранящиеся в столбце), а конвертирует метаданные (которые хранятся в словаре данных). Таким образом, единственная цена - это цена, которую вы платите сейчас: путаница среди практиков Oracle, сталкивающихся с типами данных не-Oracle.
 14 июн. 2012 г., 13:04
Там нет преобразования данных:DECIMAL хранится и рассматривается какNUMBER.
 Gyan14 июн. 2012 г., 13:02
какая-либо стоимость производительности из-за конверсии?
 Gyan16 июн. 2012 г., 10:32
Ну, в нашем проекте масштаб по умолчанию, равный нулю, сделал разницу и исследование стоящими. Спасибо всем за указатели.
 17 июл. 2013 г., 15:21
@ VincentMalgrat: DECIMAL не являетсяexactly так же, как номер. Как определено в SYS.STANDARD, DECIMAL определяется как NUMBER (38, 0), поэтому переменная, определенная как DECIMAL, не может содержать никаких цифр справа от десятичной точки, в то время как что-то, определенное как NUMBER, может. Чтобы иметь ДЕСЯТИЧНЫЕ значения с цифрами справа от десятичной точки, они должны быть определены как, например, ДЕСЯТИЧНЫЙ (38, 4). Поделитесь и наслаждайтесь.

Десятичное число будет усекать значение, которое зашкаливает, число округляет значение.

 22 июл. 2013 г., 00:32
Я очень хотел бы увидеть демонстрацию этого.This fiddle кажется, указывает, что как NUMBER, так и DECIMAL округляют значения, превышающие масштаб.

Ваш ответ на вопрос