콘텐츠로 이동

D.부록: 기본값 맵핑#

Altibase의 테이블 컬럼의 기본값은 원본 데이터베이스의 기본값과 대부분 호환된다.

하지만 이기종 데이터베이스들 간의 기본값 정책이 일부 상이하여, Migration Center가 이러한 몇 가지 예외 상황에 대해 원본 데이터베이스의 값을 Altibase정책에 맞춰 변환한다.

이 부록은 Migration Center가 Altibase에 맞춰 원본 데이터베이스의 기본값을 변환하는 기본값 맵핑 테이블을 제공한다.

기본값 맵핑 테이블#

Migration Center는 데이터를 이전하기 전에 마이그레이션 대상 데이터베이스 에 원본 데이터베이스의 테이블과 동일한 테이블을 생성한다. 이를 위해 원본 데이터베이스의 테이블 속성과 일치하는 테이블 생성 구문을 먼저 만든다. 이 때 Migration Center는 원본 테이블의 컬럼 기본값과 동일하게 대상 테이블의 컬럼에 기본값을 설정하려 한다. 이 절의 맵핑 테이블에 나열된 기본값은 Migration Center가 CREATE TABLE 문 생성시에 표에 따라 변환하여 지정한다. 그 외의 기본값은 변경 없이 그대로 CREATE TABLE 문에 지정된다.

주의: 변경 없이 그대로 사용되는 기본값 중에는 원본과 대상 데이터베이스간에 호환이 되지 않는 것이 있을 수 있다. 필요하다면 나중에 사용자가 Reconcile 단계의 DDL Editing 창에서 직접 CREATE TABLE 문의 기본값을 수정해야 한다.

기본값 맵핑 정책#

  • 대다수의 원본 데이터베이스 기본값은 변경 없이 대상 데이터베이스와 호환된다. 하지만 아래의 경우에는 Migration Center가 원본 데이터베이스의 기본값을 대상 데이터베이스 정책에 맞춰 변환한다

  • 문자형 데이터 타입의 기본값이 길이가 0인 문자열('')인 경우 : Altibase는 길이가 0인 문자열을 NULL로 인식하므로, 기본값을 지정하지 않는다.

  • 날짜형 데이터 타입의 기본값이 문자열 표현인 경우 : 원본 데이터베이스 별로 날짜형을 위한 기본 포맷이 다르므로, Migration Center는 테이블 생성 구문에 기본값 대신에 DEFAULT 키워드가 포함된 주석을 지정한다. 필요하다면 나중에 사용자가 주석을 참고하여 직접 기본값을 설정해야 한다.
    단 원본 데이터베이스가 MySQL, TimesTen, 또는 CUBRID일 때, 아래의 표처럼 Migration Center가 기본값을 자동으로 변환한다.

  • 기본값에 함수가 사용된 경우 : 아래 표에 열거된 함수가 원본 데이터베이스의 기본값으로 단독 사용된 경우에 한해서 표와 같이 변환된다. 그 외의 함수 또는 복잡한 형태의 표현식일 경우에는 변경 없이 그대로 변환된다. 필요하다면 나중에 사용자가 직접 변경해야 한다.

Oracle 데이터베이스 to Altibase#

Expression Type 원본(오라클)대상(Altibase)특이사항
문자형을 위한 문자열"
날짜형을 위한 문자열'97/04/21'/* DEFAULT '97/04/21' */
함수DBTIMEZONEDB_TIMEZONE()Altibase 6.3.1.0.0 이상에서 지원됨
SYS_GUID()SYS_GUID_STR()Altibase 6.3.1.0.0 이상에서 지원됨
UIDUSER_ID()
USERUSER_NAME()

아래는 변환 예제이다.

오라클의 테이블 생성 SQL문 Altibase의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval
( c1 INT DEFAULT 123,
c2 VARCHAR(50) DEFAULT 'test',
c3 INT DEFAULT NULL,
c4 CHAR(10) DEFAULT '',
c5 INT DEFAULT SQRT(144) + 72,
c6 DATE DEFAULT '97/04/21',
c7 DATE DEFAULT TO_DATE('1999-12-01', 'YYYY-MM-DD'),
c8 VARCHAR(100) DEFAULT DBTIMEZONE,
c9 VARCHAR(100) DEFAULT SYS_GUID(),
c10 VARCHAR(100) DEFAULT UID,
c11 VARCHAR(100) DEFAULT USER );
CREATE TABLE TESTTBL_4_DEFVAL
( C1 NUMBER (38, 0) DEFAULT 123,
C2 VARCHAR (50) DEFAULT 'test',
C3 NUMBER (38, 0),
C4 CHAR (10),
C5 NUMBER (38, 0) DEFAULT SQRT(144) + 72,
C6 DATE /* DEFAULT '97/04/21' */,
C7 DATE DEFAULT TO_DATE('1999-12-01', 'YYYY-MM-DD'),
C8 VARCHAR (100) DEFAULT DB_TIMEZONE(),
C9 VARCHAR (100) DEFAULT SYS_GUID_STR(),
C10 VARCHAR (100) DEFAULT USER_ID(),
C11 VARCHAR (100) DEFAULT USER_NAME() );

MS SQL Server to Altibase#

Expression Type 원본(MS SQL Server)대상(Altibase)특이사항
문자형을 위한 문자열"
날짜형을 위한 문자열'December 5, 1985'/* DEFAULT 'December 5, 1985' */
함수GETDATE90SYSDATE
CURRENT_TIMESTAMP
LEN( str_expression )LENGTH( str_expression )

아래는 변환 예제이다.

MS SQL Server의 테이블 생성 SQL문 Altibase의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval
( c1 BIT DEFAULT 0,
c2 INT DEFAULT 2 + 3,
c3 VARCHAR(50) DEFAULT 'test',
c4 INT DEFAULT NULL,
c5 NCHAR(10) DEFAULT '',
c6 FLOAT DEFAULT sqrt(12 * 12),
c7 DATE DEFAULT 'December 5, 1985',
c8 DATE DEFAULT getdate(),
c9 DATETIME DEFAULT CURRENT_TIMESTAMP,
c10 INT DEFAULT len('test'), );
CREATE TABLE TESTTBL_4_DEFVAL
( C1 CHAR (1) DEFAULT (0),
C2 INTEGER DEFAULT (2)+(3),
C3 VARCHAR (50) DEFAULT 'test',
C4 INTEGER,
C5 NCHAR (10),
C6 VARCHAR (310) DEFAULT sqrt((12)*(12)),
C7 DATE /* DEFAULT 'December 5, 1985' */,
C8 DATE DEFAULT SYSDATE,
C9 DATE DEFAULT SYSDATE,
C10 INTEGER DEFAULT LENGTH('test') );

MySQL to Altibase#

Expression Type 원본(MySQL)대상(Altibase)특이사항
문자형을 위한 문자열"
날짜형을 위한 문자열'1989-04-28'TO_DATE('1989-04-28', 'YYYY-MM-DD')
'1989-04-28 12:31:29'TO_DATE('1989-04-28 12:31:29', 'YYYY-MM-DD HH:MI:SS')
'0000-00-00 00:00:00'/* DEFAULT '0000-00-00 00:00:00' */MySQL은 날짜형 타입의 기본값이 지정되지 않으면 자동으로 '0000-00-00 00:00:00'으로 지정된다. 하지만 이 값은 Altibase의 DATE 타입에는 입력이 불가능한 값이므로 주석 처리가 된다.
함수CURRENT_TIMESTAMPSYSDATE
CURRENT_TIMESTAMP()
NOW()
LOCALTIME
LOCALTIME()
LOCALTIMESETAMP
LOCALTIMESETAMP()

참고: MySQL은 테이블의 첫 컬럼의 데이터 타입이 TIMESTAMP인 경우, 사용자가 기본값을 지정하지 않아도 기본값으로 CURRENT_TIMESTAMP이 자동으로 지정된다. 따라서, 이 경우 기본값이 SYSDATE으로 변환된다. 아래의 예제를 참고하라.

아래는 변환 예제이다.

MySQL의 테이블 생성 SQL문 Altibase의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval
( c1 TIMESTAMP NOT NULL,
c2 INT DEFAULT 123,
c3 VARCHAR(50) DEFAULT 'test',
c4 INT DEFAULT NULL,
c5 CHAR(10) DEFAULT '',
c6 DATE DEFAULT '1989-04-28',
c7 DATETIME DEFAULT '1989-04-28 12:31:29',
c8 TIMESTAMP DEFAULT '1989-04-28 12:31:29' NOT NULL,
c9 TIMESTAMP NOT NULL );
CREATE TABLE TESTTBL_4_DEFVAL
( C1 DATE DEFAULT SYSDATE NOT NULL,
C2 INTEGER DEFAULT 123,
C3 CLOB DEFAULT 'test', C4 INTEGER,
C5 CHAR (10),
C6 DATE DEFAULT TO_DATE('1989-04-28', 'YYYY-MM-DD'),
C7 DATE DEFAULT TO_DATE('1989-04-28 12:31:29', 'YYYY-MM-DD HH:MI:SS'),
C8 DATE DEFAULT TO_DATE('1989-04-28 12:31:29', 'YYYY-MM-DD HH:MI:SS') NOT NULL,
C9 DATE /* DEFAULT '0000-00-00 00:00:00' */ NOT NULL );

Informix 11.5 to Altibase#

Expression Type 원본(Informix)대상(Altibase)특이사항
문자형을 위한 문자열"
날짜형을 위한 문자열'2007-03-06'/* DEFAULT '2007-03-06' */
함수CURRENTSYSDATE
TODAYSYSDATE

아래는 변환 예제이다.

Informix의 테이블 생성 SQL문 Altibase의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval (
c1 INTEGER DEFAULT 123,
c2 BOOLEAN DEFAULT 't',
c3 CHAR(100) DEFAULT 'test',
c4 INTEGER DEFAULT null,
c5 CHAR(10) DEFAULT '',
c6 DATETIME YEAR TO DAY DEFAULT DATETIME(07-3-6) YEAR TO DAY,
c7 DATETIME DAY TO HOUR DEFAULT CURRENT DAY TO HOUR,
c8 DATE DEFAULT TODAY );
CREATE TABLE TESTTBL_4_DEFVAL (
C1 INTEGER DEFAULT 123,
C2 CHAR (1) DEFAULT 't',
C3 CHAR (100) DEFAULT 'test',
C4 INTEGER,
C5 CHAR (10),
C6 DATE /* DEFAULT '2007-03-06' */,
C7 DATE DEFAULT SYSDATE,
C8 DATE DEFAULT SYSDATE );

TimesTen to Altibase#

Expression Type 원본(TimesTen)대상(Altibase)특이사항
날짜형을 위한 문자열'1989-04-28'TO_DATE('1989-04-28', 'YYYY-MM-DD')
'1989-04-28 12:31:29'TO_DATE('1989-04-28 12:31:29', 'YYYY-MM-DD HH:MI:SS')
'12:31:29' TO_DATE('12:31:29', 'HH:MI:SS')
함수UIDUSER_ID
USERUSER_NAME

아래는 변환 예제이다.

TimesTen의 테이블 생성 SQL문 Altibase의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval (
c1 INT DEFAULT 123,
c2 VARCHAR2(50) DEFAULT 'test',
c3 INT DEFAULT NULL,
c4 DATE DEFAULT '1999-12-01',
c5 TIMESTAMP DEFAULT '1999-12-01 11:30:21',
c6 TIME DEFAULT '11:30:21',
c7 VARCHAR(100) DEFAULT UID,
c8 VARCHAR(100) DEFAULT USER );
CREATE TABLE TESTTBL_4_DEFVAL (
c1 INT DEFAULT 123,
c2 VARCHAR2(50) DEFAULT 'test',
c3 INT DEFAULT NULL,
c4 DATE DEFAULT TO_DATE('1999-12-01', 'YYYY-MM-DD'),
c5 TIMESTAMP DEFAULT TO_DATE('1999-12-01 11:30:21', 'YYYY-MM-DD HH:MI:SS),
c6 TIME DEFAULT TO_DATE('11:30:21', 'HH:MI:SS'), c7 VARCHAR(100) DEFAULT UID,
c8 VARCHAR(100) DEFAULT USER );

CUBRID to Altibase#

Expression Type 원본(CUBRID)대상(Altibase)특이사항
함수USERUSER_ID()
CURRENT_USERUSER_NAME()

아래는 변환 예제이다.

CUBRID의 테이블 생성 SQL문 Altibase의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval (
c1 INTEGER DEFAULT 123,
c2 CHARACTER VARYING (50) DEFAULT 'test',
c3 INTEGER,
c4 CHARACTER VARYING (100) DEFAULT 'USER',
c5 CHARACTER VARYING (100) DEFAULT 'CURRENT_USER',
c6 CHARACTER VARYING(100) DEFAULT ' ',
c7 DATE DEFAULT DATE'2008-10-31',
c8 TIME DEFAULT TIME'1:15',
c9 TIMESTAMP DEFAULT TIMESTAMP'10/31',
c10 DATETIME DEFAULT DATETIME'01:15:45 PM 2008-10-31' );
CREATE TABLE TESTTBL_4_DEFVAL (
C1 INTEGER DEFAULT 123,
C2 VARCHAR (50) DEFAULT 'test',
C3 INTEGER,
C4 VARCHAR (100) DEFAULT USER_ID(),
C5 VARCHAR (100) DEFAULT USER_ID(),
C6 VARCHAR (100) DEFAULT ' ',
C7 DATE /* DEFAULT '10/31/2008' */,
C8 DATE /* DEFAULT '01:15:00 AM' */,
C9 DATE /* DEFAULT '12:00:00 AM 10/31/2016' */,
C10 DATE /* DEFAULT '01:15:45.000 PM 10/31/2008' */ );

Altibase to Oracle#

Expression Type 원본(Altibase)대상(Oracle)특이사항
문자형을 위한 문자열"
함수DB_TIMEZONE()DBTIMEZONEAltibase 6.3.1.0.0 이상에서 지원됨
SYS_GUID_STR()SYS_GUID()Altibase 6.3.1.0.0 이상에서 지원됨
USER_ID()UID
USER_NAME()USER

아래는 변환 예제이다.

Altibase의 테이블 생성 SQL문 Oracle의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval
( c1 INT DEFAULT 123,
c2 VARCHAR(50) DEFAULT 'test',
c3 INT DEFAULT NULL,
c4 CHAR(10) DEFAULT '',
c5 INT DEFAULT SQRT(144) + 72,
c6 DATE DEFAULT TO_DATE('1999-12-01 PM', 'YYYY-MM-DD AM'),
c7 VARCHAR(100) DEFAULT DB_TIMEZONE(),
c8 VARCHAR(100) DEFAULT SYS_GUID_STR(),
c9 VARCHAR(100) DEFAULT USER_ID(),
c10 VARCHAR(100) DEFAULT USER_NAME() );
CREATE TABLE TESTTBL_4_DEFVAL
( C1 NUMBER (10) DEFAULT 123 ,
C2 VARCHAR2 (50) DEFAULT 'test' ,
C3 NUMBER (10) ,
C4 CHAR (10) ,
C5 NUMBER (10) DEFAULT SQRT(144) + 72 ,
C6 TIMESTAMP  DEFAULT TO_DATE('1999-12-01 PM', 'YYYY-MM-DD AM') ,
C7 VARCHAR2 (100) DEFAULT DBTIMEZONE ,
C8 VARCHAR2 (100) DEFAULT SYS_GUID() ,
C9 VARCHAR2 (100) DEFAULT UID ,
C10 VARCHAR2 (100) DEFAULT USER );

Tibero to Altibase#

Expression Type 원본(Tibero)대상(Altibase)특이사항
문자형을 위한 문자열"
날짜형을 위한 문자열'97/04/21'/* DEFAULT '97/04/21' */
함수DBTIMEZONEDB_TIMEZONE()Altibase 6.3.1.0.0 이상에서 지원됨
SYS_GUID_GUID()SYS_GUID_STR()Altibase 6.3.1.0.0 이상에서 지원됨
UIDUSER_ID()
USERUSER_NAME()

아래는 변환 예제이다.

Tibero의 테이블 생성 SQL문 Altibase의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval(
c1 INT DEFAULT 123,
c2 VARCHAR(50) DEFAULT 'test',
c3 INT DEFAULT NULL,
c4 CHAR(10) DEFAULT '',
c5 INT DEFAULT QRT(144) + 72,
c6 DATE DEFAULT '97/04/21',
c7 DATE DEFAULT TO_DATE('1999-12-01', 'YYYY-MM-DD'),
c8 VARCHAR(100) DEFAULT DBTIMEZONE,
c9 VARCHAR(100) DEFAULT SYS_GUID(),
c10 VARCHAR(100) DEFAULT UID,
c11 VARCHAR(100) DEFAULT USER );
CREATE TABLE TESTTBL_4_DEFVAL(  
C1  NUMBER (38, 0)  DEFAULT 123,    
C2  VARCHAR (50)    DEFAULT 'test',    
C3  NUMBER (38, 0),    
C4  CHAR (10),    
C5  NUMBER (38, 0)  DEFAULT SQRT(144) + 72,   
C6  DATE /* DEFAULT '97/04/21' */,    
C7  DATE DEFAULT TO_DATE('1999-12-01', 'YYYY-MM-DD'),    
C8  VARCHAR (100)   DEFAULT DB_TIMEZONE(),    
C9  VARCHAR (100)   DEFAULT SYS_GUID_STR(),
C10 VARCHAR (100)   DEFAULT USER_ID(),
C11 VARCHAR (100)   DEFAULT USER_NAME() );

PostgreSQL to Altibase#

Expression Type 원본(PostgreSQL) 대상(Altibase) 특이사항
함수 current_role USER_NAME()
current_schema USER_NAME()
current_user USER_NAME()
session_user USER_NAME()
user USER_NAME()
ceiling(expression) CEIL(number)
random() RANDOM(0)/2147483647
bit_length(string) 8*OCTET_LENGTH(expr)
reverse(str) REVERSE_STR(expr)
strpos(string, substring) INSTR (expr, substring)
clock_timestamp() SYSDATE
current_date SYSDATE
current_time SYSDATE
current_timestamp SYSDATE
localtime SYSDATE
localtimestamp SYSDATE
now() SYSDATE
statement_timestamp() SYSDATE
transaction_timestamp() SYSDATE

아래는 변환 예제이다.

PostgreSQL의 테이블 생성 SQL문 Altibase의 테이블 생성 SQL문
CREATE TABLE testtbl_4_defval
( c1 VARCHAR(50) DEFAULT current_role,
c2 VARCHAR(50) DEFAULT current_schema,
c3 VARCHAR(50) DEFAULT current_user,
c4 VARCHAR(50) DEFAULT session_user,
c5 VARCHAR(50) DEFAULT user,
c6 INTEGER DEFAULT ceiling(-95.3),
c7 DOUBLE PRECISION DEFAULT random(),
c8 INTEGER DEFAULT bit_length('abc'),
c9 VARCHAR(50) DEFAULT reverse('reverse'),
c10 INTEGER DEFAULT strpos('high', 'ig'),
c11 timestamp with time zone DEFAULT clock_timestamp(),
c12 date DEFAULT current_date,
c13 time with time zone DEFAULT current_time,
c14 timestamp with time zone DEFAULT current_timestamp,
c15 time DEFAULT localtime,
c16 timestamp DEFAULT localtimestamp,
c17 timestamp with time zone DEFAULT now(),
c18 timestamp with time zone DEFAULT transaction_timestamp() );
CREATE TABLE TESTTBL_4_DEFVAL
( C1 VARCHAR (50) DEFAULT USER_NAME()
,C2 VARCHAR (50) DEFAULT USER_NAME()
,C3 VARCHAR (50) DEFAULT USER_NAME()
,C4 VARCHAR (50) DEFAULT USER_NAME()
,C5 VARCHAR (50) DEFAULT USER_NAME()
,C6 INTEGER DEFAULT CEIL('-95.3')
,C7 DOUBLE DEFAULT (RANDOM(0)/2147483647)
,C8 INTEGER DEFAULT 8*OCTET_LENGTH('abc')
,C9 VARCHAR (50) DEFAULT REVERSE_STR('reverse')
,C10 INTEGER DEFAULT INSTR('high', 'ig')
,C11 DATE DEFAULT SYSDATE
,C12 DATE DEFAULT SYSDATE
,C13 DATE DEFAULT SYSDATE
,C14 DATE DEFAULT SYSDATE
,C15 DATE DEFAULT SYSDATE
,C16 DATE DEFAULT SYSDATE
,C17 DATE DEFAULT SYSDATE
,C18 DATE DEFAULT SYSDATE );