CREATE TYPE(구별)

CREATE TYPE(구별)문은 구별 유형을 정의합니다. 구별 유형은 항상 내장 데이터 유형 중 하나의 소스를 기반으로 하며 명백한 유형 종속 유형 규칙을 사용하여 정의될 수 있습니다.

강력한 유형의 구별 유형을 정의하는 명령문의 성공적인 실행은 구별 유형과 해당 소스 유형 간에 캐스트하는 함수도 생성하고 선택적으로 구별 유형과 함께 사용할 비교 연산자(=, <>, <, <=, > 및 >=)에 대한 지원을 생성합니다. 모호하게 유형 지정된 구별 유형을 정의하는 명령문의 성공적인 실행은 어떤 함수도 생성하지 않습니다.

호출

이 명령문은 애플리케이션 프로그램에 임베드되거나 동적 SQL문을 사용하여 실행할 수 있습니다. DYNAMICRULES 실행 동작이 패키지에 영향을 주는 경우에만 동적으로 준비될 수 있는 실행문입니다(SQLSTATE 42509).

권한 부여

명령문의 권한 부여 ID가 보유한 권한은 다음 중 하나 이상을 포함해야 합니다.
  • 구별 유형의 스키마 이름이 기존 스키마를 참조하지 않는 경우, 데이터베이스에 대한 IMPLICIT_SCHEMA 권한
  • 구별 유형의 스키마 이름이 기존 스키마를 참조하는 경우 스키마에 대한 CREATEIN 특권
  • 구별 유형의 스키마 이름이 기존 스키마를 참조하는 경우 스키마에 대한 SCHEMAADM 권한
  • DBADM 권한

구문

구문 다이어그램 읽기비주얼 구문 다이어그램 건너뛰기CREATE TYPEdistinct-type-nameASsource-data-typeWITH STRONG TYPE RULESWITH WEAK TYPE RULESdata-type-constraints
source-data-type
구문 다이어그램 읽기비주얼 구문 다이어그램 건너뛰기built-in-typeanchored-data-type
built-in-type
구문 다이어그램 읽기비주얼 구문 다이어그램 건너뛰기SMALLINTINTEGERINTBIGINTDECIMALDECNUMERICNUM(5,0)( 정수,0, 정수)FLOAT(53).( 정수)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1바이트)( 정수OCTETSCODEUNITS32)VARCHARCHARACTERCHARVARYING( 정수OCTETSCODEUNITS32)FOR BIT DATA1CLOBCHARACTERCHARLARGE OBJECT(1M)( 정수KMGOCTETSCODEUNITS32)GRAPHIC(1)( 정수CODEUNITS16CODEUNITS32)VARGRAPHIC( 정수CODEUNITS16CODEUNITS32)DBCLOB(1M)( 정수KMGCODEUNITS16CODEUNITS32)NCHARNATIONALCHARCHARACTER(1)( 정수)NVARCHARNCHAR VARYINGNATIONALCHARCHARACTERVARYING( 정수)NCLOBNCHAR LARGE OBJECTNATIONAL CHARACTER LARGE OBJECT(1M)( 정수KMG)BINARY(1)( 정수)VARBINARYBINARY VARYING(정수)BLOBBINARY LARGE OBJECT(1M)( 정수KMG)DATETIMETIMESTAMP(6)(정수)BOOLEAN
anchored-data-type
구문 다이어그램 읽기비주얼 구문 다이어그램 건너뛰기ANCHORDATA TYPE TO 변수-이름table-name.column-name
data-type-constraints
구문 다이어그램 읽기비주얼 구문 다이어그램 건너뛰기NOT NULLCHECK(check-condition)
참고:
  • 1 FOR BIT DATA절은 다른 컬럼 제한조건이 뒤따르는 순서로 지정될 수 있습니다. FOR BIT DATA 절은 문자열 단위 CODEUNITS32를 사용하여 지정될 수 없습니다(SQLSTATE 42613).

설명

개방 형식 이름
구별 유형의 이름을 지정합니다. 내재적 또는 명시적 규정자를 포함하는 이름은 현재 서버에 존재하는 기타 유형(내장 또는 사용자 정의)을 식별하지 않아야 합니다. 규정되지 않은 이름은 내장 데이터 유형의 이름과 같을 수 없으며(SQLSTATE 42918) ARRAY, INTERVAL 또는 ROWID일 수 없습니다.

동적 SQL문에서 CURRENT SCHEMA 특수 레지스터는 규정되지 않은 오브젝트 이름의 규정자로서 사용됩니다. 정적 SQL문에서 QUALIFIER 프리컴파일 또는 바인드 옵션은 내재적으로 규정되지 않은 오브젝트 이름의 규정자를 지정합니다. 규정된 양식에서는 스키마 이름 다음에 마침표와 SQL ID가 표시됩니다.

술어에서 키워드로 사용되는 여러 이름은 시스템에서 사용하도록 예약되어 있으며 구별 유형 이름으로 사용될 수 없습니다(SQLSTATE 42939). 해당 이름은 SOME, ANY, ALL, NOT, AND, OR, BETWEEN, NULL, LIKE, EXISTS, IN, UNIQUE, OVERLAPS, SIMILAR, MATCH와 비교 연산자입니다.

두 파트로 구성된 이름이 지정된 경우에는 스키마 이름을 SYS 문자로 시작하면 안 됩니다(SQLSTATE 42939).

소스 데이터 유형
구별 유형의 내부 표현을 위한 기초로 사용되는 데이터 유형을 지정합니다. 데이터 유형은 내장 데이터 유형이어야 합니다. 내장 데이터 유형에 대한 자세한 정보는 CREATE TABLE을 참조하십시오. 소스 데이터 유형은 XML 또는 ARRAY 유형일 수 없습니다(SQLSTATE 42601). 플랫폼 사이의 애플리케이션의 이식성을 위해, 다음 권장 데이터 유형 이름을 사용하십시오.
  • FLOAT 대신 DOUBLE 또는 REAL
  • NUMERIC 대신 DECIMAL
  • LONG VARCHAR 대신 VARCHAR, BLOB 또는 CLOB
  • LONG VARGRAPHIC 대신 VARGRAPHIC 또는 DBCLOB
앵커된 데이터 유형
데이터 유형을 판별하기 위해 사용되는 다른 오브젝트를 식별합니다. 앵커 오브젝트의 데이터 유형은 데이터 유형을 직접 지정할 때 적용하는 동일한 제한조건으로 묶이게 됩니다.
ANCHOR DATA TYPE TO
앵커된 데이터 유형이 데이터 유형을 식별하기 위해 사용된다는 것을 표시합니다.
변수 이름
ROW 또는 CURSOR 이외의 내장 유형인 데이터 유형을 갖는 전역 변수를 식별합니다. 전역 변수의 데이터 유형이 구별 유형에 대한 소스 데이터 유형으로 사용됩니다.
table-name.column-name
내장 유형으로 지정되어야 하는 데이터 유형을 갖는 기존 테이블이나 뷰의 컬럼 이름을 식별합니다. 컬럼의 데이터 유형이 구별 유형의 소스 데이터 유형으로 사용됩니다.
WITH STRONG TYPE RULES
명백한 유형 지정 규칙이 이 데이터 유형이 지정 및 비교를 포함하는 피연산자인 조작에 사용되도록 지정합니다. 이는 기본값입니다.
WITH WEAK TYPE RULES
모호하게 유형 지정된 규칙이 이 데이터 유형이 지정, 비교 및 함수 결정을 포함하는 피연산자인 조작에 사용되도록 지정합니다. 모호하게 유형 지정된 구별 유형의 값이 사용되는 경우 연산을 처리할 때 데이터 유형은 지정된 source-data-type으로 효과적으로 처리됩니다.
data-type-constraints
값이 구별 유형에 지정 또는 캐스트될 때 적용되는 구별 유형에 대한 제한조건을 정의합니다.
NOT NULL
이 구별 유형을 갖는 값이 널(NULL) 값을 갖지 못하게 합니다. NOT NULL이 지정되지 않는 경우, 이 구별 유형을 갖는 값은 널(NULL) 값을 가질 수 있습니다.
CHECK (점검 조건)
데이터 유형 검사 제한조건을 정의합니다. 언제든지, check-condition은 이 데이터 유형을 갖는 모든 값에 대해 true 또는 unknown이어야 합니다. check-condition은 컬럼 이름이 테이블 검사 제한조건에서 참조되는 것과 동일한 방식으로 구별 유형에 지정 또는 캐스트되는 값을 참조하기 위해 VALUE 키워드가 사용되는 것 외에 테이블 검사 제한조건의 규칙을 준수하는 search-condition의 한 양식입니다(SQLSTATE 426211). check-condition은 전역 변수를 참조할 수 없음을 참고하십시오.
built-in-type
내장 데이터 유형의 설명은 "CREATE TABLE"을 참조하십시오.

규칙

  • 앵커된 데이터 유형의 사용: 앵커된 데이터 유형은 별칭, 유형이 지정된 테이블, 유형이 지정된 뷰, 표현식 기반 인덱스와 연관되는 통계 뷰, 선언된 임시 테이블, 약하게 유형 지정된 커서와 연관되는 행 정의, 데이터베이스 코드 페이지 또는 데이터베이스 데이터 정렬과 다른 데이터 정렬이나 코드 페이지를 가지고 있는 오브젝트를 참조할 수 없습니다(SQLSTATE 428HS).

참고

  • 특권: 사용자 정의 유형의 정의자는 항상 구별 유형에 대해 자동으로 생성되는 모든 함수에서 EXECUTE 특권 WITH GRANT OPTION을 수신합니다.

    CREATE TYPE(구별) 명령문 중에 자동으로 생성되는 모든 함수에 대한 EXECUTE 특권이 PUBLIC에 권한 부여됩니다.

  • 아직 존재하지 않는 스키마 이름을 갖는 구별 유형을 작성하면 명령문의 권한 부여 ID가 IMPLICIT_SCHEMA 권한을 갖는 경우 해당 스키마가 내재적으로 작성됩니다. 스키마 소유자는 SYSIBM입니다. 스키마에 대한 CREATEIN 특권이 PUBLIC에 부여됩니다.
  • 추가로 생성되는 함수: 명백하게 유형 지정된 구별 유형이 작성될 때, 소스 유형으로(부터) 캐스트하기 위해 다음 함수가 생성됩니다.
    • 구별 유형에서 소스 유형으로 변환하기 위한 한 함수
    • 소스 유형에서 구별 유형으로 변환하기 위한 한 함수
    • 소스 유형이 SMALLINT인 경우 INTEGER에서 구별 유형으로 변환하기 위한 한 함수
    • 소스 유형이 CHAR인 경우 VARCHAR에서 구별 유형으로 변환하기 위한 한 함수
    • 소스 유형이 BINARY인 경우 VARCHAR에서 구별 유형으로 변환할 하나의 함수
    • 소스 유형이 GRAPHIC인 경우 VARGRAPHIC에서 구별 유형으로 변환하기 위한 한 함수.
    일반적으로 이들 함수는 다음 형식을 갖습니다.
       CREATE FUNCTION source-type-name (distinct-type-name)
         RETURNS source-type-name ...
    
       CREATE FUNCTION distinct-type-name (source-type-name)
         RETURNS distinct-type-name ...
    소스 유형이 매개변수화된 유형인 경우, 구별 유형에서 소스 유형으로 변환하는 함수는 매개변수가 없는 소스 유형의 이름을 함수 이름으로 갖습니다 (자세한 내용은 표 1 참조). 이 함수의 리턴 값의 유형은 CREATE TYPE(구별) 명령문에서 제공되는 매개변수를 포함합니다. 소스 유형에서 구별 유형으로 변환하기 위한 함수는 해당 매개변수를 포함하여 유형이 소스 유형인 입력 매개변수를 갖습니다. 예를 들어, 다음과 같습니다.
       CREATE TYPE T_SHOESIZE AS CHAR(2)
    
       CREATE TYPE T_MILES AS DOUBLE
         
    은 다음 함수를 생성합니다.
       FUNCTION CHAR (T_SHOESIZE) RETURNS CHAR (2)
    
       FUNCTION T_SHOESIZE (CHAR (2))
       RETURNS T_SHOESIZE
    
       FUNCTION DOUBLE (T_MILES) RETURNS DOUBLE
    
       FUNCTION T_MILES (DOUBLE) RETURNS T_MILES

    생성된 캐스트 함수의 스키마는 구별 유형의 스키마와 같습니다. 이 이름 및 동일한 시그니처를 갖는 다른 함수가 데이터베이스에 이미 존재할 수 없습니다(SQLSTATE 42710).

    다음 테이블은 모든 사전 정의된 데이터 유형에 대해 구별 유형에서 소스 유형으로 및 소스 유형에서 구별 유형으로 변환하기 위한 함수의 이름을 제공합니다.

    표 1. 구별 유형에 대한 캐스트 함수
    소스 유형 이름 함수 이름 매개변수 return-type
    SMALLINT 개방 형식 이름 SMALLINT 개방 형식 이름
    SMALLINT 개방 형식 이름 INTEGER 개방 형식 이름
    SMALLINT SMALLINT 개방 형식 이름 SMALLINT
    INTEGER 개방 형식 이름 INTEGER 개방 형식 이름
    INTEGER INTEGER 개방 형식 이름 INTEGER
    BIGINT 개방 형식 이름 BIGINT 개방 형식 이름
    BIGINT BIGINT 개방 형식 이름 BIGINT
    DECIMAL 개방 형식 이름 DECIMAL (P, s) 개방 형식 이름
    DECIMAL DECIMAL 개방 형식 이름 DECIMAL (P, s)
    NUMERIC 개방 형식 이름 DECIMAL (P, s) 개방 형식 이름
    NUMERIC DECIMAL 개방 형식 이름 DECIMAL (P, s)
    REAL 개방 형식 이름 REAL 개방 형식 이름
    REAL 개방 형식 이름 DOUBLE 개방 형식 이름
    REAL REAL 개방 형식 이름 REAL
    FLOAT (n) 여기서 n< =24 개방 형식 이름 REAL 개방 형식 이름
    FLOAT (n) 여기서 n< =24 개방 형식 이름 DOUBLE 개방 형식 이름
    FLOAT (n) 여기서 n< =24 REAL 개방 형식 이름 REAL
    FLOAT(n)(n>24) 개방 형식 이름 DOUBLE 개방 형식 이름
    FLOAT(n)(n>24) DOUBLE 개방 형식 이름 DOUBLE
    FLOAT 개방 형식 이름 DOUBLE 개방 형식 이름
    FLOAT DOUBLE 개방 형식 이름 DOUBLE
    DOUBLE 개방 형식 이름 DOUBLE 개방 형식 이름
    DOUBLE DOUBLE 개방 형식 이름 DOUBLE
    DOUBLE PRECISION 개방 형식 이름 DOUBLE 개방 형식 이름
    DOUBLE PRECISION DOUBLE 개방 형식 이름 DOUBLE
    DECFLOAT 개방 형식 이름 10진수 (n) 개방 형식 이름
    DECFLOAT DECFLOAT 개방 형식 이름 10진수 (n)
    CHAR 개방 형식 이름 CHAR(n) 개방 형식 이름
    CHAR CHAR 개방 형식 이름 CHAR(n)
    CHAR 개방 형식 이름 VARCHAR(n) 개방 형식 이름
    VARCHAR 개방 형식 이름 VARCHAR(n) 개방 형식 이름
    VARCHAR VARCHAR 개방 형식 이름 VARCHAR(n)
    CLOB 개방 형식 이름 CLOB(n) 개방 형식 이름
    CLOB CLOB 개방 형식 이름 CLOB(n)
    GRAPHIC 개방 형식 이름 GRAPHIC(n) 개방 형식 이름
    GRAPHIC GRAPHIC 개방 형식 이름 GRAPHIC(n)
    GRAPHIC 개방 형식 이름 VARGRAPHIC(n) 개방 형식 이름
    VARGRAPHIC 개방 형식 이름 VARGRAPHIC(n) 개방 형식 이름
    VARGRAPHIC VARGRAPHIC 개방 형식 이름 VARGRAPHIC(n)
    DBCLOB 개방 형식 이름 DBCLOB(n) 개방 형식 이름
    DBCLOB DBCLOB 개방 형식 이름 DBCLOB(n)
    BINARY 개방 형식 이름 BINARY (n) 개방 형식 이름
    BINARY BINARY 개방 형식 이름 BINARY (n)
    BINARY 개방 형식 이름 VARBINARY (n) 개방 형식 이름
    VARBINARY 개방 형식 이름 VARBINARY (n) 개방 형식 이름
    VARBINARY VARBINARY 개방 형식 이름 VARBINARY (n)
    BLOB 개방 형식 이름 BLOB(n) 개방 형식 이름
    BLOB BLOB 개방 형식 이름 BLOB(n)
    날짜 개방 형식 이름 날짜 개방 형식 이름
    날짜 날짜 개방 형식 이름 날짜
    시간 개방 형식 이름 시간 개방 형식 이름
    시간 시간 개방 형식 이름 시간
    TIMESTAMP 개방 형식 이름 시간소인 (p 개방 형식 이름
    TIMESTAMP TIMESTAMP 개방 형식 이름 시간소인 (p)
    BOOLEAN 개방 형식 이름 BOOLEAN 개방 형식 이름
    BOOLEAN BOOLEAN 개방 형식 이름 BOOLEAN
    주: 휴대용 애플리케이션에 대한 사용자 정의 유형을 작성할 때 NUMERIC및 FLOAT는 권장되지 않습니다. 대신 DECIMAL 및 DOUBLE을 사용해야 합니다.

    앞의 테이블에서 설명되는 함수 및 비교 연산자 함수가 구별 유형이 정의될 때 자동으로 생성되는 유일한 함수입니다. 결국, CREATE FUNCTION문을 사용하여 명백하게 유형 지정된 구별 유형에 대한 사용자 정의 함수를 등록할 때까지 어떤 내장 함수(AVG, MAX, LENGTH 등)도 명백하게 유형 지정된 구별 유형에 지원되지 않으며, 해당 사용자 정의 함수는 적절한 내장 함수를 기반으로 합니다. 특히 내장 컬럼 함수를 기반으로 하는 사용자 정의 함수(UDF)를 등록하는 것이 가능함을 참고하십시오.

    명백하게 유형 지정된 구별 유형이 작성될 때, 소스 유형이 비교를 지원할 때 시스템 생성 비교 연산자가 작성됩니다. 이들 비교 연산자의 작성은 새 함수를 위한 SYSCAT.ROUTINES 카탈로그 뷰에 엔트리를 생성합니다.

    SQL문에서 이들 연산자 및 캐스트 함수의 성공적인 사용을 위해 구별 유형의 스키마 이름이 SQL 경로 또는 FUNCPATH BIND 옵션에 포함되어야 합니다.

  • 모호하게 유형 지정된 구별 유형이 작성될 때, 약한 유형 규칙이 모호하게 유형 지정된 구별 유형이 소스 유형을 사용할 수 있는 동일한 컨텍스트에서 사용되도록 허용하기 때문에 추가 함수가 생성 또는 작성될 필요가 없습니다.
  • 구문 대체: 다음 구문 대체는 이전 버전의 Db2® 및 기타 데이터베이스 제품과의 호환성을 위해 지원됩니다. 이러한 대체는 비표준이므로 사용하지 않아야 합니다.
    • CREATE TYPE 대신 CREATE DISTINCT TYPE을 지정할 수 있습니다.
    • LONG VARCHAR 및 LONG VARGRAPHIC 데이터 유형 및 캐스트 함수가 지원되지만 더 이상 사용되지 않으며 이후 릴리스에서 제거될 수 있습니다. WITH COMPARISONS 절은 계속해서 LONG VARCHAR 및 LONG VARGRAPHIC 데이터 유형을 지원하지 않습니다.
    • 시스템 생성 비교 연산자가 구별 유형의 두 인스턴스를 비교하기 위해 작성되도록 지정하는 WITH COMPARISONS 절은 WITH WEAK TYPE RULES가 지정되지 않은 경우 명령문의 마지막 절로서 지정될 수 있습니다. Db2 제품군의 이전 버전 제품과의 호환성을 위해 필요한 경우에만 WITH COMPARISON을 사용하십시오. 소스 데이터 유형이 BLOB, CLOB 또는 DBCLOB이고 WITH COMPARISONS이 지정되는 경우, 이전 릴리스에서와 같이 경고가 발생합니다.
    • ALLOW NULL 또는 NULL만을 NOT NULL의 반대로 지정할 수 있습니다. 이것이 ALLOW NULL 절이나 NOT NULL 절이 지정되지 않는 경우 구별 유형의 기본 널(null) 값 허용 특성입니다. ALLOW NULL의 지정은 구별 유형에 대한 데이터 유형 제한조건을 정의하는 것으로 간주되지 않습니다.

예:

  • 예 1:  INTEGER 데이터 유형을 기반으로 하는 SHOESIZE라는 명백하게 유형 지정된 구별 유형을 작성하십시오.
       CREATE TYPE SHOESIZE AS INTEGER

    그러면 비교 연산자(=, <>, <, <=, >, >=)와 INTEGER를 리턴하는 INTEGER(SHOESIZE) 및 SHOESIZE를 리턴하는 SHOESIZE(INTEGER) 캐스트 함수가 작성됩니다.

  • 예 2:  DOUBLE 데이터 유형을 기반으로 하는 MILES라는 명백하게 유형 지정된 구별 유형을 작성하십시오.
       CREATE TYPE MILES AS DOUBLE

    그러면 비교 연산자(=, <>, <, =, >, >=)와 DOUBLE을 리턴하는 DOUBLE(MILES) 및 MILES를 리턴하는 MILES(DOUBLE) 캐스트 함수가 작성됩니다.

  • 예 3:  INTEGER 데이터 유형을 기반으로 하고 100을 초과할 수 없는 백분율을 나타내는 BONUS라는 모호하게 유형 지정된 구별 유형을 작성하십시오.
       CREATE TYPE BONUS AS INTEGER WITH WEAK TYPE RULES
             CHECK(VALUE >= 0 AND VALUE <= 100)

    약한 유형 규칙으로 정의되기 때문에, 비교 및 캐스트 함수는 BONUS라는 모호하게 유형 지정된 구별 유형에 대해 생성되지 않습니다.

  • 예 4:  NULL일 수 없고 상단 범위가 십 만 미만으로 제한되는 DOUBLE 데이터 유형을 기반으로 하는 SALARY라는 모호하게 유형 지정된 구별 유형을 작성하십시오.
       CREATE TYPE SALARY AS DOUBLE WITH WEAK TYPE RULES
             NOT NULL CHECK(VALUE < 100000)