Skip to end of metadata
Go to start of metadata

 

 

개요


본 문서는 Microsoft사의 SQL Server에서 ALTIBASE로 변환할 때 고려할 사항과 변환 방법에 대해 설명한다.

SQL Server 2012와 Altibase 6.1 버전을 대상으로 한다.

 

 

Icon

이 문서와 관련된 오류 및 개선사항은 기술지원포털 또는 기술지원센터로 문의주시기 바랍니다.

Icon

이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다.

이 문서에 포함된 Altibase 제품의 특징이나 기능의 개발, 발표 등의 시기는 Altibase 재량입니다.

Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다.

 

 

Object 변환


MS SQL SERVER의 OBJECT를 ALTIBASE로 변환할 때 고려할 사항에 대해 기술한다.

 

DATATYPE


SQL SERVER의 TABLE을 Altibase로 변환할 때 각각의 DATATYPE을 어떻게 변환하는지에 대해 설명한다.

분류

SQL Server

Altibase

비고

문자타입

 

 

 

 

 

 

 

 

CHAR

CHAR

 

VARCHAR

VARCHAR

varchar(max)는  CLOB으로 변환

TEXT

CLOB사용

 

NCHAR

NCHAR

Max length: 16000(UTF16),
Max length: 10666(UTF8)

NVARCHAR

NVARCHAR

Max length: 16000(UTF16),
Max length: 10666(UTF8)
NVARCHAR(MAX)는  CLOB으로 변환

NTEXT

NVARCHAR 사용

Max length: 16000(UTF16), Max length: 10666(UTF8)

BINARY

BYTE사용

 

VARBINARY

BLOB사용

 

IMAGE

BLOB사용

 

숫자타입

 

 

 

 

BIGINT

BIGINT

 

NUMERIC

NUMERIC

 

BIT

BIT

 

SMALLINT

SMALLINT

 

REAL

REAL

 

날짜타입

 

 

 

 

 

DATE

DATE

 

DATETIMEOFFSET

DATE 사용

 

DATETIME2

DATE 사용

Altibase의 Scale은 마이크로초(6자리)까지 지원.

SAMMLLDATETIME

DATE 사용

 

DATETIME

DATE 사용

 

TIME

DATE 사용

 

 

FUNCTION & EXPRESSION


 

분류

SQL Server

Altibase

비고

Aggregate

 

 

 

 

 

 

 

 

 

 

 

AVG

AVG

 

CHECKSUM_AGG

N/A

 

COUNT

COUNT

 

COUNT_BIG

COUNT

 

GROUPING

N/A

 

GROUPING_ID

N/A

 

MAX

MAX

 

MIN

MIN

 

STDEV

STDDEV 사용

 

STDEVP

N/A

 

SUM

SUM

 

VAR

VARIANCE

 

Ranking

 

 

 

DENSE_RANK

DENSE_RANK

 

NTILE

N/A

 

RANK

RANK

 

ROW_NUMBER

ROW_NUMBER

 

Conversion

 

 

 

 

CAST, CONVERT

CAST 사용

Altibase의  CONVERT 함수는 다른 기능 제공

PARSE

CAST 사용

CONVERT 함수를 이용하여 캐릭터셋 변경 가능

TRY_CAST

CAST 사용

캐스팅 실패시 오류 반환

TRY_CONVERT

N/A

 

TRY_PARSE

N/A

 

Date

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CURRENT_TIMESTAMP

SYSDATE 사용

 

DATENAME

DATENAME

 

DATEPART

DATEPART

 

DAY

DATEPART 사용

 

DATEADDDATEADD구문 변경
DATEADD (date, number, date_field_name)

DATEDIFF

DATEDIFF

구문 변경
DATEDIFF (startdate, enddate, date_field_name)

DATEFROMPARTS

TO_DATE 사용

 

DATETIME2FROMPARTS

TO_DATE 사용

 

DATETIMEFROMPARTS

TO_DATE 사용

 

DATETIMEOFFSETFROMPARTS

TO_DATE 사용

 

EOMONTH

LAST_DAY 사용

 

GETDATE

SYSDATE 사용

 

GETUTCDATE

N/A

 

ISDATE

N/A

 

SMALLDATETIMEFROMPARTS

TO_DATE 사용

 

SWITCHOFFSET

N/A

 

SYSDATETIME

SYSDATE 사용

 

SYSDATETIMEOFFSET

N/A

 

SYSUTCDATETIME

N/A

 

TIMEFROMPARTS

TO_DATE 사용

 

TODATETIMEOFFSET

N/A

 

YEAR

TO_CHAR 사용

 

Logical

 

CHOOSE

N/A

 

IIF

NVL2 사용

 

Mathematical

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ABS

ABS

 

ACOS

ACOS

 

ASIN

ASIN

 

ATAN

ATAN

 

ATN2

ATN2

 

CEILING

CEIL 사용

 

COS

COS

 

COT

N/A

 

DEGREES

N/A

 

EXP

EXP

 

FLOOR

FLOOR

 

LOG

LN 사용

Altibase의  LOG 함수는 다른 기능제공

LOG10

N/A

 

PI

LOG10

 

POWER

POWER

 

RADIANS

N/A

 

RAND

RANDOM 사용

Altibase는 Integer형식으로 반환

ROUND

ROUND

 

SIGN

SIGN

 

SIN

SIN

 

SQRT

SQRT

 

SQUARE

N/A

 

TAN

TAN

 

String

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ASCII

ASCII

 

CHAR

CHAR

 

CHARINDEX

INSTR, POSITION 사용

 

CONCAT

CONCAT

 

DIFFERENCE

N/A

 

FORMAT

N/A

 

LEFT

SUBSTR, SUBSTRING 사용

SUBSTR (expr, start [DOCKI:, length])
Start에 양수 지정

LEN

LENGTH 사용

 

LOWER

LOWER

 

LTRIM

LTRIM

Altibase는 LTRIM (expr1 [DOCKI:,expr2])

NCHAR

NCHAR

 

PATINDEX

INSTR, POSITION 사용

 

QUOTENAME

N/A

 

REPLACE

REPLACE2 사용

 

REPLICATE

REPLICATE

 

REVERSE

REVERSE_STR 사용

 

RIGHT

SUBSTR, SUBSTRING 사용

SUBSTR (expr, start [DOCKI:, length])
Start에 음수 지정

RTRIM

RTRIM

Altibase는 RTRIM (expr1 [DOCKI:,expr2])

PATINDEX

INSTR, POSITION 사용

 

QUOTENAME

 

 

REPLACE

REPLACE2 사용

 

REPLICATE

REPLICATE

 

REVERSE

REVERSE_STR 사용

 

RIGHT

SUBSTR, SUBSTRING 사용

SUBSTR (expr, start [DOCKI:, length])
Start에 음수 지정

RTRIM

RTRIM

Altibase는 RTRIM (expr1 [DOCKI:,expr2])

SOUNDEX

N/A

 

SPACE

LPAD, RPAD 사용

 

STR

TO_CHAR 사용

 

STUFF

STUFF

 

SUBSTRING

SUBSTRING

 

UNICODE

N/A

 

UPPER

UPPER

 

 

OBJECT


 

분류

SQL Server

Altibase

비고

CONSTRAINT

지원

지원

 

TRIGGER

지원

지원

 

Multi Key-Index

지원

지원

 

VIEW

지원

지원

 

UPDATABLE VIEW

지원

지원하지 않음

 

SEQUENCE

지원

지원

 

STORED FUNCTION/PROCEDURE

지원

지원

 

SYNONYM

지원

지원

 

TABLE Temporary Table

지원

지원

Temporary Table은 Volatile Table Space 이용

USER

지원

지원

 

REPLICATION

지원

지원

 

 

CREATE TABLESPACE


SQL Server에서는 데이터 저장소로 Database를 관리하나 Altibase에서는 테이블스페이스를 관리한다. Altibase에서의 테이블스페이스는 저장 공간에 따라 메모리 테이블스페이스, 디스크 테이블스페이스로 나뉘며 생성 주체에 따라 시스템 테이블스페이스, 사용자 정의 테이블 스페이스, 저장 내용에 따라 딕셔너리 테이블스페이스, 언두 테이블스페이스, 임시 테이블스페이스, 데이터 테이블 스페이스 등으로 나뉘어 진다.
따라서 Altibase로 변환할 때는 데이터 저장 공간에 따라 CREATE MEMORY DATA TABLESPACE, CREATE DISK DATA TABLESPACE 구문을 이용하여 생성한다.

다음은 SQL Server의 DATABASE를 Altibase의 테이블스페이스로 변환할 때 CREATE TABLESPACE 구문에서 지정하는 여러 옵션들의 변환 가이드를 설명한 것이다.

SQL Server

Altibase

비고

FILENAME

FILENAME

 

SIZE

SIZE

기본 100MB

MAXSIZE

MAXSIZE

 

FILEGROWTH

AUTOEXTEND ON NEXT

 

FILESTREAM

N/A

 

DEFAULT_FULLTEXT_LANGUAGE

N/A

 

DEFAULT_LANGUAGE

N/A

 

NESTED_TRIGGERS

N/A

 

TRANSFORM_NOISE_WORDS

N/A

 

TWO_DIGIT_YEAR_CUTOFF

N/A

 

DB_CHAINING

N/A

 

TRUSTWORTHY

N/A

 

 

CREATE TABLE


SQL Server의 TABLE을 Altibase로 변환할 때 CREATE TABLE 시 사용한 여러 옵션을 알맞게 변경해야 한다. Altibase는 TEMPORARY TABLE, OBJECT TABLE, XMLType TABLE을 제공하지 않는다.
Altibase는 메모리 TABLE을 제공한다. 따라서 변환할 TABLE의 특성을 잘 파악하여 메모리 TABLE을 생성한다면 메모리 TABLESPACE를 지정하여 생성해야 한다. 만약 메모리 TABLE을 생성한다면 SQL Server에서 사용했던 CREATE TABLE 구문에 사용한 옵션들을 사용할 수 없다. 메모리 TABLE 생성 구문은 Altibase의 SQL 관련 매뉴얼을 참조하면 된다.
ORACLE의 TABLE을 DISK TABLE로 변환하고자 한다면, CREATE TABLE 시 설정할 수 있는 여러 옵션을 다음과 같이 Altibase에 맞게 변환해야 한다.

1. Column definition

SQL Server

Altibase

비고

FILESTREAM

N/A

 

COLLATE

N/A

 

CONSTRAINT

CONSTRAINT

Altibase는 CHECK를 제외한 Constraint를 지원한다. 또한  Constraint 지정시 references 절의 ON DELETE SET NULL(ON DELETE CASCADE는 지원) 옵션을 제공하지 않으므로 삭제.
Altibase는 PRIMARY KEY, UNIQUE 지정 시 index 이름은 제공하지 않는다.

IDENTITY

N/A

 

ROWGUIDCOL

N/A

 

2. data type

SQL Server

Altibase

비고

Precision, scale

Precision, scale

 

max

N/A

 

CONTENT

N/A

 

DOCUMENT

N/A

 

xml_schema_collection

N/A

 

3. column constraint

SQL Server

Altibase

비고

PRIMARY KEY

PRIMARY KEY

 

NULL, NOT NULL

NULL, NOT NULL

 

UNIQUE

UNIQUE

 

CLUSTERED, NONCLUSTERED

N/A

 

FOREIGN KEY REFERENCES

FOREIGN KEY REFERENCES

 

partition_scheme_name

PARTITION BY RANGE | HASH | LIST

Table 생성시 파티션테이블 종류 지정.

4. computed column definition

    지원하지 않음

5. table constraint

SQL Server

Altibase

비고

PRIMARY KEY

PRIMARY KEY

 

CLUSTERED, NONCLUSTERED

N/A

 

FOREIGN KEY REFERENCES

FOREIGN KEY REFERENCES

 

partition_scheme_name

PARTITION BY RANGE | HASH | LIST

Table 생성시 파티션테이블 종류 지정.

6. table_option

SQL Server

Altibase

비고

DATA_COMPRESSION

N/A

 

7. index_option

SQL Server

Altibase

비고

PAD_INDEX

N/A

 

FILLFACTOR

N/A

 

IGNORE_DUP_KEY

N/A

Altibase는 ON 상태임

STATISTICS_NORECOMPUTE

N/A

Altibase는 OFF 상태임

ALLOW_ROW_LOCKS

N/A

Durability Level 설정에 따라 정의

ALLOW_PAGE_LOCKS

N/A

Durability Level 설정에 따라 정의

DATA_COMPRESSION

N/A

 

 

CREATE USER


Altibase는 데이터베이스 로그인과 유저를 분리하여 생성하지 않고 하나의 유저로 생성하여 관리한다.

SQL ServerAltibase비고
CREATE LOGIN <login_name> WITH PASSWORD = '<password>';

Users based on logins in master
CREATE USER user_name
    [
        { FOR | FROM } LOGIN login_name
    ]
    [ WITH DEFAULT_SCHEMA = schema_name ]
[ ; ]
CREATE USER <user_name> IDENTIFIED BY ‘<password>’
DEFAULT TABLESPACE = tablespace_name
 

 

CREATE INDEX


Altibase는 BTREE와 RTREE INDEX만 제공하고 BITMAP, CLUSTER, Function based, REVERSE, Global partitioned INDEX를 제공하지 않는다.

다음은 Altibase로 변환할 때 CREATE INDEX 구문에 사용하는 옵션들에 대한 변환 방법이다.

SQL Server

Altibase

비고

UNIQUE

UNIQUE

 

CLUSTERED | NONCLUSTERED

N/A

 

ASC | DESC

ASC | DESC

 

INCLUDE

N/A

 

filter_predicate

N/A

 

partition_scheme_name

PARTITION  ON

Local Index만 지원

ON filegroup_name

N/A

 

table_or_view_name

Table_name

View는 지원하지 않음

PAD_INDEX

N/A

 

FILLFACTOR

N/A

 

SORT_IN_TEMPDB

N/A

 

IGNORE_DUP_KEY

N/A

Altibase는 ON 상태임

STATISTICS_NORECOMPUTE

N/A

Alitbase는 OFF 상태임

DROP_EXISTING

N/A

 

ONLINE

 

Alitbase는 OFF 상태임

ALLOW_ROW_LOCKS

N/A

Durability Level 설정에 따라 정의

ALLOW_PAGE_LOCKS

N/A

Durability Level 설정에 따라 정의

MAXDOP

PARALLEL

생성시에만 적용

DATA_COMPRESSION

N/A

 

 

 

SQL Conversion


SQL Server의 SQL 문들을 ALTIBASE로 변환하는 방법을 설명에 대하여 설명한다.

 

JOIN


Altibase는 ANSI 표준의 JOIN 연산만 제공한다.

SQL Server

Altibase

비고

INNER JOIN

INNER JOIN

 

LEFT OUTER JOIN

LEFT OUTER JOIN

 

RIGHT OUTER JOIN

RIGHT OUTER JOIN

 

FULL OUTER JOIN

FULL OUTER JOIN

 

CROSS JOIN

N/A

 

 

Execution Query


Altibase의 쿼리 종결 문자는 “;” 이다. 따라서 여러 쿼리를 한번에 실행하려 한다면 쿼리마다 종결문자 “;”로 구분해 주어야 한다.

SQL Server

Altibase

비고

GO

;
Commit;

기본값은 Autocommit

 

Temporary Table


SQL ServerAltibase비고
CREATE TABLE #TempProcessCREATE TABLE TEMP1 (…) TABLESPACE volatile_tablespace_name 

 

Control Statement


 

SQL Server

Altibase

IF

If (조건)
Else if (조건)
Else
End

If 조건 then
Elseif 조건 then
Else
End

While

While (조건)
BEING
END
BREAK =>while문 탈출

While 조건 loop
End loop
Exit when 조건 =>조건 만족할 때 반복 loop탈출

 

Identity Attribute


Altibase에는 Identity 속성은 존재하지 않는다. 따라서 필요시 SEQUENCE를 만들어 사용한다.

 

Procedure Conversion


Altibase의 PROCEDRUE 생성 및 실행구문은 SQL 서버와 다른 부분이 있다.
예제를 통하여 PROCEDURE 변경 방법을 확인한다.

 

Parameter Declaration


SQL Server의 파라미터 선언에서 ‘@’ 기호를 없앤다.
파라미터의 성격에 따라 in , out , in out 을 명시해준다.
Function일 경우 실행 후 하나의 값을 반환해 주는 것으로 반드시 RETURN 다음의 데이터 타입을 명시해야 한다.

SQL ServerAltibase

 

Variable Declaration


Altibase의 변수 선언은 AS와 BEGIN 사이에서 정의된다.
SQL Server의 변수 선언에서 ‘@’ 기호를 없앤다.
변수 선언 할 때 구분자인 ‘,’를 ‘;’로 바꾼다.
마지막 변수 선언에도 항상 ‘;’로 마지막임을 선언 한다.

SQL ServerAltibase

 

Assignment


SQL Server의 변수에 값 할당 시 SET 를 이용한다. 여기서 SET, ‘@’ 문자를 없앤다.
그리고 ‘=’ 를 ‘ := ’로 바꾼다.
구분자인 ‘,’를 ‘;’로 바꾸고 마지막에 항상 ‘;’로 마지막임을 선언 한다.
위와 같이 SET 을 명시하여 변수에 값을 할당 할 수도 있다.

SQL ServerAltibase

 

Control_floe - IF문


Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
IF문 처음에는 IF (condition) THEN으로 처음을 표시한다.
IF문 끝에는 END IF로 IF문이 끝임을 표시한다.

SQL ServerAltibase

 

SELECT 절


Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
Altibase에서 select의 resultset을 client에 보내기 위해서는 DB 객체에 REF CURSOR 를 먼저 작성해주어야 한다. 그리고 sp의 인자에 ref cursor를 인자로 작성하여야 한다. 그리고 해당 쿼리를 실행할 때 Open이라는 명령어로 실행 한다.
SQL Server의 ‘@’ 문자를 없앤다

SQL ServerAltibase

 

Exception Handler


Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
Altibase의 Exception Handler는 해당 Exception이 발생했을 때 처리하는 기술이다.
Exception 처리는 항상 BEGIN …. END; 구문 안에서 처리 해야 한다.
시스템 정의 EXCEPTION이나 사용자 정의 EXCEPTION의 이름을 기술하고 해당 Exception을 만날 때 해당 statement를 처리하고, 현재 발생한 Exception을 처리하지 못할 경우 최종적으로 OTHERS 루틴으로 처리 된다.
적용 받은 레코드수가 0인지 체크하는 구문은 SQL%ROWCOUNT상수로 확인 할 수 있다.
시스템 정의 Exception은 파일 마지막에 첨부합니다

SQL ServerAltibase

 

SP Call


Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
SQL Server의 SP 호출은 exec sp_name 로 호출 하고 sp 인자를 괄호 없이 지정해주지만, Altibase에서 SP_name 을 실행하고 괄호안에 sp의 인자를 명시해준다.
SQL Server의 ‘@’ 문자를 없앤다.

SQL ServerAltibase

 

Functions


Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
함수별로 사용법은 상이할 수 있고, 함수 명이 다를 수도 있다.
MSSQLl의 ‘@’ 문자를 없앤다.

SQL ServerAltibase

 

ETC


Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
SQL Server의 ‘@’ 문자를 없앤다.

SQL ServerAltibase

 


Altibase에서 DB Link를 사용시에는 SELECT의 경우 REMOTE_TABLE(dblink명, Query);

DML의 경우 REMOTE_EXECUTE_IMMEDIATE(dblink명, Query); 를 사용한다.

 

JOIN Update


Altibase에서 Join Update를 처리하기 위해서는 두가지의 방법이 있다.

1. JOIN UPDATE를 사용

  • 각 Table에 Primary Key 또는 Unique Key가 존재하여야 한다.

2. Merge Join의 update를 사용.

  • Merge into A using ( SELECT … )
    WHEN matched then
    Update …

 

 

Using Cursor


SQL Server의 커서를 Altibase로 변환하는 방법을 예제를 통하여 확인한다.

SQL ServerAltibase

 

 

Exception Code


 

Exception Name

Error Code
(integer)

Error Code
(hexadecimal)

Error Section

"CURSOR_ALREADY_OPEN"

201062

31166

qpERR_ABORT_QSX_CURSOR_ALREADY_OPEN

"DUP_VAL_ON_INDEX"

201063

31167

qpERR_ABORT_QSX_DUP_VAL_ON_INDEX

"INVALID_CURSOR"

201064

31168

qpERR_ABORT_QSX_INVALID_CURSOR

"INVALID_NUMBER"

201065

31169

qpERR_ABORT_QSX_INVALID_NUMBER

"NO_DATA_FOUND"

201066

3116A

qpERR_ABORT_QSX_NO_DATA_FOUND

"PROGRAM_ERROR"

201067

3116B

qpERR_ABORT_QSX_PROGRAM_ERROR

"STORAGE_ERROR"

201068

3116C

qpERR_ABORT_QSX_STORAGE_ERROR

"TIMEOUT_ON_RESOURCE"

201069

3116D

qpERR_ABORT_QSX_TIMEOUT_ON_RESOURCE

"TOO_MANY_ROWS"

201070

3116E

qpERR_ABORT_QSX_TOO_MANY_ROWS

"VALUE_ERROR"

201071

3116F

qpERR_ABORT_QSX_VALUE_ERROR

"ZERO_DIVIDE"

201072

31170

qpERR_ABORT_QSX_ZERO_DIVIDE

"INVALID_PATH"

201237

31215

qpERR_ABORT_QSX_FILE_INVALID_PATH

"INVALID_MODE"

201235

31213

qpERR_ABORT_QSX_INVALID_FILEOPEN_MODE

"INVALID_FILEHANDLE"

201238

31216

qpERR_ABORT_QSX_FILE_INVALID_FILEHANDLE

"INVALID_OPERATION"

201239

31217

qpERR_ABORT_QSX_FILE_INVALID_OPERATION

"READ_ERROR"

201242

3121A

qpERR_ABORT_QSX_FILE_READ_ERROR

"WRITE_ERROR"

201243

3121B

qpERR_ABORT_QSX_FILE_WRITE_ERROR

"ACCESS_DENIED"

201236

31214

qpERR_ABORT_QSX_DIRECTORY_ACCESS_DENIED

"DELETE_FAILED"

201240

31218

qpERR_ABORT_QSX_FILE_DELETE_FAILED

"RENAME_FAILED"

201241

31219

qpERR_ABORT_QSX_FILE_RENAME_FAILED

 

 

 

 

Icon

 

 

 

 

  • No labels