NUMBER 데이터 유형

NUMBER 데이터 유형은 Oracle NUMBER 데이터 유형을 사용하는 애플리케이션을 지원합니다. 이 기능은 Db2® Warehouse on Cloud 관리 서비스의 엔트리 플랜에는 적용되지 않습니다.

효과

NUMBER 데이터 유형이 SQL문에서 명시적으로 지정되어 있는 경우 이 데이터 유형은 다음과 같이 내재적으로 맵핑됩니다.
  • 정밀도 및 스케일 속성 없이 NUMBER를 지정하면 DECFLOAT(16)에 맵핑됩니다.
  • NUMBER(p)를 지정하면 DECIMAL(p)에 맵핑됩니다.
  • NUMBER(p,s)를 지정하면 DECIMAL(p,s)에 맵핑됩니다.
지원되는 최대 정밀도는 31이고 스케일은 정밀도 이하의 양수 값이어야 합니다. 또한 내재된 맵핑의 결과, 메시지는 NUMBER 대신 데이터 유형 DECFLOAT 및 DECIMAL을 참조합니다. 또한 컬럼 또는 루틴의 데이터 유형을 기술하는 조작은 NUMBER 대신 DECIMAL 또는 DECFLOAT를 리턴합니다.
팁: DECFLOAT(16) 데이터 유형은 Oracle NUMBER 데이터 유형의 최대 정밀도보다 더 낮은 최대 정밀도를 제공합니다. 컬럼에서 숫자를 저장하는 데 17자리 이상의 정밀도가 필요한 경우 이러한 컬럼을 DECFLOAT(34)로 명시적으로 정의하십시오.

숫자 리터럴 지원은 변경되지 않습니다. 정수, 10진수 및 부동 소수점 상수에 대한 규칙은 계속 적용됩니다. 이러한 규칙은 10진수 리터럴을 31자리로 제한하고 부동 소수점 리터럴을 2진 배정밀도 부동 소수점 값의 범위로 제한합니다. 필요한 경우, CAST 스펙 또는 DECFLOAT 함수의 사용에 의한 문자열에서 DECFLOAT(34)로의 캐스트는 DECIMAL 또는 DOUBLE의 범위를 넘어 DECFLOAT(34) 범위까지의 값에 사용할 수 있습니다. 현재 D(64비트 2진 부동 소수점 값을 나타냄) 또는 F(32비트 2진 부동 소수점 값을 나타냄)로 끝나는 숫자 리터럴에 대한 지원은 없습니다. E를 포함하는 숫자 리터럴은 데이터 유형이 DOUBLE이고 캐스트 함수 REAL 또는 CAST 스펙을 사용하여 REAL로 캐스트할 수 있습니다.

CAST 스펙이나 VARCHAR 또는 CHAR 스칼라 함수를 사용하여 NUMBER 데이터 값을 문자열로 캐스트한 경우 모든 선행 영(0)이 결과에서 삭제됩니다.

CREATE SEQUENCE문의 시퀀스 값에 사용되는 기본 데이터 유형은 INTEGER가 아닌 DECIMAL(27)입니다.

DECIMAL 또는 DECFLOAT 데이터 유형을 포함하는 모든 산술 연산과 산술 또는 수학 함수는 10진수 부동 소수점 산술을 사용하여 효과적으로 수행되며 데이터 유형이 DECFLOAT(34)인 값을 리턴합니다. 이러한 유형의 동작은 두 피연산자 모두 데이터 유형이 DECIMAL 또는 DECFLOAT(16)인 산술 연산에도 적용됩니다. 이는 표현식산술 연산자가 있는 표현식 절에 있는 10진 산술의 설명과는 다릅니다. 또한 정수 데이터 유형(SMALLINT, INTEGER 또는 BIGINT)만 포함하는 모든 나눗셈 연산은 10진수 부동 소수점 산술을 사용하여 효과적으로 수행됩니다. 이러한 연산은 정수 데이터 유형 대신 DECFLOAT(34) 데이터 유형의 값을 리턴합니다. 정수 피연산자를 사용하여 0으로 나누면 무한이 리턴되고 오류 대신 경고가 표시됩니다.

분석 프로세스 중에 데이터 유형 DECIMAL의 인수가 DECFLOAT 값으로 간주되도록 함수 결정도 변경되는 경우가 있습니다. 또한 NUMBER(p[,s]) 데이터 유형에 대응하는 인수가 포함된 함수는 인수 데이터 유형이 NUMBER인 경우와 마찬가지로 효율적으로 처리됩니다. 그러나 함수 결정에서의 이러한 변경은 인수의 수가 가변적이고 결과 데이터 유형이 인수의 데이터 유형 세트를 기반으로 하는 함수 세트에는 적용되지 않습니다. 이 세트에 포함되는 함수는 다음과 같습니다.
  • COALESCE
  • DECODE
  • GREATEST
  • LEAST
  • MAX(스칼라)
  • MIN(스칼라)
  • NVL
  • VALUE
숫자 함수에 대한 일반적인 변경사항 외에 특별한 고려사항도 MOD 함수에 적용됩니다. MOD 함수의 두 번째 인수가 영(0)인 경우 이 함수는 첫 번째 인수의 값을 리턴합니다.
DECIMAL 결과 데이터 유형의 정밀도가 초과한 경우 DECFLOAT(34)를 결과 데이터 유형으로 만들기 위해 결과 데이터 유형의 규칙을 확장하는 방법에 대한 자세한 정보는 결과 데이터 유형의 규칙을 참조하십시오. 이러한 규칙은 다음 항목에도 적용됩니다.
  • 집합 연산(UNION, EXCEPT(MINUS) 및 INTERSECT)의 대응하는 컬럼
  • IN 술어의 IN 목록에 있는 표현식 값
  • 다중 행 VALUES절의 대응하는 표현식
지정 및 캐스트에 사용되는 근사값 설정 모드는 관련된 데이터 유형에 따라 달라집니다. 일부 경우 자르기가 사용됩니다. 대상이 2진 부동 소수점(REAL 또는 DOUBLE) 값인 경우 일반적으로 짝수로 근사값 설정(round-half-even)이 사용됩니다. 그 외의 경우(일반적으로 DECIMAL 또는 DECFLOAT 값을 사용하는 경우), 근사값 설정은 decflt_rounding 데이터베이스 구성 매개변수의 값에 기반합니다. 이 매개변수의 기본값은 짝수로 근사값 설정(round-half-even)이지만 Oracle 근사값 설정 모드와 일치하도록 반올림(round-half-up)으로 설정할 수도 있습니다. 다음 표는 다양한 숫자 지정 및 캐스트에 사용되는 근사값 설정을 요약합니다.
표 1. 숫자 지정 및 캐스트에 사용되는 근사값 설정
소스 데이터 유형 대상 데이터 유형
정수 유형 DECIMAL DECFLOAT REAL/DOUBLE
정수 유형 적용되지 않음 적용되지 않음 decflt_rounding round_half_even
DECIMAL decflt_rounding decflt_rounding decflt_rounding round_half_even
DECFLOAT decflt_rounding decflt_rounding decflt_rounding round_half_even
REAL/DOUBLE 자르기 decflt_rounding decflt_rounding round_half_even
문자열(캐스트 전용) 적용되지 않음 decflt_rounding decflt_rounding round_half_even
Db2 10진 부동 소수점 값은 IEEE 754R 표준에 기반합니다. DECFLOAT 데이터를 검색하여 DECFLOAT 데이터를 문자열로 캐스트하면 소수점 이하의 모든 영(0)이 제거됩니다.

NUMBER 지원이 사용 가능한 데이터베이스에서 정수 입력을 사용하는 내장 함수 STDDEV, VAR, VARIANCE는 DOUBLE 대신, DECFLOAT를 리턴합니다. 결과 유형이 이 함수에 종속되는 뷰 컬럼 또는 구체화된 쿼리 테이블(MQT) 컬럼은 해당 뷰 또는 MQT가 재생성되거나 재작성될 때까지 계속해서 이전 결과 유형을 리턴합니다. MQT의 경우, 이전에 MQT로 경로지정된 쿼리는 MQT가 재작성될 때까지 더 이상 MQT로 경로지정되지 않습니다.

클라이언트-서버 호환성

NUMBER 데이터 유형이 지원되는 데이터베이스 서버와 상호 작용하는 클라이언트 애플리케이션에서는 이 서버에서 NUMBER 데이터 유형을 수신하지 않습니다. Oracle 서버에서 NUMBER를 보고하는 컬럼 또는 표현식은 데이터베이스 서버에서 DECIMAL 또는 DECFLOAT를 보고합니다.

Oracle 환경에서는 근사값 설정 모드가 반올림(round-half-up)이 될 것으로 예상하므로 클라이언트 근사값 설정 모드가 서버 근사값 설정 모드와 일치하는 것이 중요합니다. 즉, db2cli.ini 파일 설정이 decflt_rounding 데이터베이스 구성 매개변수의 값과 일치해야 합니다. Oracle 근사값 설정 모드에 가장 가깝게 하려면 데이터베이스 구성 매개변수에 ROUND_HALF_UP을 지정해야 합니다.

제한사항

NUMBER 데이터 유형 지원에는 다음과 같은 제한사항이 있습니다.
  • 다음 항목에 대한 지원이 없습니다.
    • 31을 초과하는 정밀도 속성
    • 정밀도 속성에서 별표(*) 사용
    • 정밀도 속성을 초과하는 스케일 속성
    • 음수 스케일 속성
    NUMBER 데이터 유형 스펙에 대응하는 DECIMAL 정밀도 및 스케일 지원이 없습니다.
  • 삼각 함수 또는 DIGITS 스칼라 함수는 정밀도(DECFLOAT)가 없는 NUMBER 데이터 유형의 인수를 사용하여 호출할 수 없습니다.
  • NUMBER라는 이름으로 구별 유형을 작성할 수 없습니다.