TEST1 과 TEST2 테이블의 컬럼은 아래 CHECK 제약 조건에 의해 VARCHAR 형이지만 2자리 숫자 타입의 값만 받아들입니다.
--DROP TABLE TEST1;
--DROP TABLE TEST2;
CREATE TABLE TEST1(COL1 varchar(2) CHECK( COL1 ~'[[:digit:]]{2}')); -- 정규식 (regular expression)
CREATE TABLE TEST2(COL1 varchar(2) CHECK( COL1 ~'[[:digit:]]{2}'));
INSERT INTO TEST1 VALUES('01');
INSERT INTO TEST2 VALUES('12');
INSERT INTO TEST1 VALUES('9'); -- check 조건에 의해 에러발생
SELECT * FROM TEST1;
SELECT * FROM TEST2;
위 CHECK 조건을 만족하는 컬럼값이 많은 테이블에서 정의되어야 한다면, 매번 CHECK 조건을 적어주야 하니 번거롭겠죠?
이때 DOMAIN 을 활용하면 됩니다.
CREATE DOMAIN DIGITV AS VARCHAR(2) CHECK( VALUE ~'[[:digit:]]{2}');
DROP TABLE TEST1;
DROP TABLE TEST2;
CREATE TABLE TEST1(COL1 DIGITV);
CREATE TABLE TEST2(COL1 DIGITV);
INSERT INTO TEST1 VALUES('02');
INSERT INTO TEST2 VALUES('13');
SQL> \d test1;
Column | Type | Modifiers
--------+--------+-----------
Column | Type | Modifiers
--------+--------+-----------
SQL> select * from test;1