programing

소수(s,p) 또는 숫자(s,p)?

skycolor 2023. 6. 26. 21:11
반응형

소수(s,p) 또는 숫자(s,p)?

최근 db2 -> oracle 마이그레이션 프로젝트를 진행하던 중에 이러한 상황을 접했습니다.개발자들이 실수로 십진수(s,p) 열을 사용하여 새 테이블 구조를 만들고 있었습니다.Oracle이 이를 지원하는 것을 기억하지 못했지만, 몇 가지 조사를 통해 ANSI 데이터 유형이 Oracle에 의해 지원된다는 것을 알 수 있었습니다.

하지만, 나에게 남은 질문은 -

  1. 이 데이터는 내부적으로 어떻게 처리됩니까?
  2. Oracle의 기본 제공 유형 대신 ANSI 유형을 사용하면 비용이 발생합니까?
  3. 대상 유형이 Oracle 기본 제공 유형인 경우 데이터 마이그레이션 중에 영향이 있습니까?

Oracle에서는 다음과 같이 동일합니다.

테이블과 클러스터를 만드는 SQL 문은 IBM 제품 SQL/DS 및 DB2의 ANSI 데이터 유형과 데이터 유형을 사용할 수도 있습니다.오라클은 오라클 데이터베이스 데이터 유형 이름과 다른 ANSI 또는 IBM 데이터 유형 이름을 인식합니다.데이터 유형을 동등한 오라클 데이터 유형으로 변환하고, 열 데이터 유형의 이름으로 오라클 데이터 유형을 기록하며, 다음 표에 표시된 변환을 기반으로 열 데이터를 오라클 데이터 유형에 저장합니다.

이 인용문 아래의 표는 다음을 보여줍니다.DECIMAL(p,s)내부적으로 A로 처리됩니다.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   

사실, 십진수와 숫자 사이에는 차이가 있습니다.10진수는 과도한 크기의 값을 잘라내고 숫자는 값을 반올림합니다.

언급URL : https://stackoverflow.com/questions/11031409/decimals-p-or-numbers-p

반응형