개요
본 문서는 Microsoft사의 SQL Server에서 ALTIBASE로 변환할 때 고려할 사항과 변환 방법에 대해 설명한다.
SQL Server 2016와 Altibase 7.1 이상 버전을 대상으로 한다.
SQL Server Schema 변환시 고려사항
SQL Server의 스키마는 객체를 담는 컨테이너(논리적 네임스페이스)이다.
Altibase는 스키마와 사용자가 분리되어 있지 않음으로 특정 User 단위로 맵핑하여 변환하여야 한다.
| 항목 | SQL Server | Altibase |
|---|---|---|
| 특징 | 스키마와 사용자가 분리되어 있음(SQL Server 2005 이후) 하나의 사용자(User)가 여러 스키마에 접근 가능 권한을 스키마 단위로 부여 가능 | 스키마 = 사용자 스키마를 따로 만들수 없고 반드시 USER 단위로 객체를 생성해야 함 |
| 예시 | CREATE SCHEMA Sales AUTHORIZATION John; | CREATE USER Sales IDENTIFIED BY salespwd; |
SQL Server 스키마를 Altibase로 옮길 때는 아래 표와 같이 "스키마 = User"로 치환하고, dbo 같은 공통 스키마는 별도 User를 만들어 대체한다.
| 항목 | SQL Server | Altibase | 비고 |
|---|---|---|---|
| 스키마 구조 | user 와 독립 | user = Schema | 변환시 SQL Server 의 스키마를 Altibase 에서는 User로 맵핑해야 함 |
| 기본 스키마 | dbo | 미지원 | Altibase는 dbo 스키마가 없음으로 특정 유저 생성으로 대체 |
| 공통 객체 관리 | dbo 사용 | 별도 user 생성후 권한 부여 | dbo.TableName 형태는 → 특정 유저 스키마로 매핑 및 권한 부여 필요 |
| 권한 부여 단위 | 스키마 단위 가능 | 객체 단위만 가능 | 스키마 단위 권한은 객체 단위 권한으로 세분화 필요 |
| 이름 충돌 처리 | 스키마 구분으로 해결 | User 명으로 해결 | 변환시 SQL Server의 스키마명이 Altibase의 USER명과 충돌하지 않도록 주의 |
Object 변환
SQL SERVER의 OBJECT를 ALTIBASE로 변환할 때 고려할 사항에 대해 기술한다.
DATATYPE
SQL SERVER의 TABLE을 Altibase로 변환할 때 각각의 DATATYPE을 어떻게 변환하는지에 대해 설명한다.
분류 | SQL Server | Altibase | SQL Server 최대크기 | ALTIBASE 최대 크기 | 비고 |
|---|---|---|---|---|---|
문자타입
| CHAR | CHAR | 8000 byte | 32000 byte | CHAR(MAX)는 ALTIBASE의 CLOB으로 변환 |
VARCHAR | VARCHAR | 8000 byte | 32000 byte | VARCHAR(MAX)는 ALTIBASE의 CLOB으로 변환 | |
NCHAR | NCHAR | 8000 byte NCHAR(MAX) : 2GB | Max length: 16000(UTF16), | NCHAR(max) 는 ALTIBASE의 CLOB으로 변환 | |
NVARCHAR | NVARCHAR | 8000 byte NVARCHAR(MAX) : 2GB | Max length: 16000(UTF16), | NVARCHAR(MAX)는 ALTIBASE의 CLOB으로 변환 | |
BINARY | BYTE사용 | 8000 byte | 32000 byte | ||
VARBINARY | BLOB사용 | 8000 byte | 2GB | VARBINARY(MAX)는 BLOB으로 변환 | |
IMAGE | BLOB사용 | 2GB | 2GB | SQL Server 2005이후 VARBINARY(MAX)로 대체 권장 | |
| TEXT, NTEXT -> VARCHAR(MAX) NVARCHAR(MAX) | CLOB사용 | TEXT : 65536 byte | 2GB | SQL Server 2005이후 | |
숫자타입
| BIGINT | BIGINT |
| ||
NUMERIC | NUMERIC |
| |||
BIT | BIT |
| |||
SMALLINT | SMALLINT |
| |||
| TINYINT | SMALLINT | TINEYINT : 1 byte | SMALLINT : 2 byte | ||
REAL | REAL |
| |||
| INT | INTEGER 사용 | ||||
| MONEY | decimal(p, s) 사용 | ||||
| SMALLMONEY | decimal(p, s) 사용 | ||||
날짜타입
| DATE | DATE |
| 날짜만 저장. 형식: YYYY-MM-DD | |
DATETIMEOFFSET | Altibase 미지원 |
| 날짜, 시각 및 타임존까지 저장. 형식: YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm | ||
DATETIME2 | DATE 사용 |
| 날짜와 시각 저장. 형식: YYYY-MM-DD hh:mm:ss[.nnnnnnn] | ||
SAMMLLDATETIME | DATE 사용 |
| 날짜와 시각 저장. 형식: YYYY-MM-DD hh:mm:ss | ||
DATETIME | DATE 사용 |
| 날짜와 시각 저장(과거 버전 호환용). 형식: YYYY-MM-DD hh:mm:ss[.nnn] | ||
TIME | DATE 사용 |
| 시각만 저장. 형식: hh:mm:ss[.nnnnnnn] |
FUNCTION & EXPRESSION
분류 | SQL Server | Altibase | 비고 |
Aggregate
| AVG | AVG |
|
CHECKSUM_AGG | 미 지원 |
| |
COUNT | COUNT |
| |
COUNT_BIG | COUNT로 대체 |
| |
GROUPING | GROUPING | ROLLUP, CUBE, GROUPING SETS 사용 시 집계 레벨을 구분하는 함수 | |
GROUPING_ID | GROUPING_ID | 행과 관련되는 GROUPING 비트 벡터에 대응되는 수치를 반환 | |
MAX | MAX |
| |
MIN | MIN |
| |
STDEV | STDDEV 사용 |
| |
STDEVP | 미 지원 |
| |
SUM | SUM |
| |
VAR | VARIANCE |
| |
Ranking
| DENSE_RANK | DENSE_RANK |
|
NTILE | NTILE |
| |
RANK | RANK |
| |
ROW_NUMBER | ROW_NUMBER |
| |
Conversion
| CAST, CONVERT | CAST 사용 | Altibase의 CONVERT 함수는 다른 기능 제공 |
PARSE | CAST 사용 | CONVERT 함수를 이용하여 캐릭터셋 변경 가능 | |
TRY_CAST | CAST 사용 | 캐스팅 실패시 오류 반환 | |
TRY_CONVERT | 미 지원 |
| |
TRY_PARSE | 미 지원 |
| |
Date
| CURRENT_TIMESTAMP | CURRENT_TIMESTAMP |
|
DATENAME | DATENAME |
| |
DATEPART | DATEPART |
| |
DAY | DATEPART 사용 |
| |
| DATEADD | DATEADD | ALTIBASE는 날짜문자열을 TO_DATE()함수로 형식 지정 필요 | |
DATEDIFF | DATEDIFF |
| |
DATEFROMPARTS | TO_DATE 사용 |
| |
DATETIME2FROMPARTS | TO_DATE 사용 |
| |
DATETIMEFROMPARTS | TO_DATE 사용 |
| |
DATETIMEOFFSETFROMPARTS | TO_DATE 사용 |
| |
EOMONTH | LAST_DAY 사용 |
| |
GETDATE | SYSDATE 사용 | 반환 타입: datetime | |
GETUTCDATE | unix_date로 대체 가능 |
| |
ISDATE | 미 지원 |
| |
SMALLDATETIMEFROMPARTS | TO_DATE 사용 |
| |
SWITCHOFFSET | CONV_TIMEZONE로 대체 가능 |
| |
SYSDATETIME | SYSDATE 사용 | 반환 타입: datetime2SWITCHOFFSET | |
SYSDATETIMEOFFSET | 미 지원 |
| |
SYSUTCDATETIME | unix_date로 대체 가능 |
| |
TIMEFROMPARTS | TO_DATE 사용 |
| |
TODATETIMEOFFSET | 미 지원 |
| |
YEAR | DATEPART 또는 EXTRACT로 대체 가능 |
| |
Logical
| CHOOSE | 미 지원 |
|
IIF | case2로 대체 가능 |
| |
Mathematical
| ABS | ABS |
|
ACOS | ACOS |
| |
ASIN | ASIN |
| |
ATAN | ATAN |
| |
ATN2 | ATN2 |
| |
CEIL(n) | CEIL(n) |
| |
COS | COS |
| |
COT | 미 지원 |
| |
DEGREES | 미 지원 |
| |
EXP | EXP |
| |
FLOOR | FLOOR |
| |
LOG | LOG | LOG (m, n) | |
LOG10 | LOG(10,m) 사용 |
| |
PI | 미 지원 |
| |
POWER | POWER |
| |
RADIANS | 미 지원 |
| |
RAND | RAND | SQL Server : 0~1사이의 pseudo-random float value 반환. | |
ROUND | ROUND |
| |
SIGN | SIGN |
| |
SIN | SIN |
| |
SQRT | SQRT |
| |
SQUARE | 미 지원 |
| |
TAN | TAN |
| |
String
| ASCII | ASCII |
|
CHAR | CHAR |
| |
CHARINDEX | INSTR, POSITION 사용 |
| |
CONCAT | CONCAT |
| |
DIFFERENCE | 미 지원 |
| |
LEFT | SUBSTR, SUBSTRING 사용 | SUBSTR (expr, start [, length]) | |
LEN | LENGTH 사용 |
| |
LOWER | LOWER |
| |
LTRIM | LTRIM | Altibase는 LTRIM (expr1 [,expr2]) | |
RTRIM | RTRIM | Altibase는 RTRIM (expr1 [,expr2]) | |
PATINDEX | INSTR, POSITION 사용 |
| |
QUOTENAME | 미 지원 |
| |
REPLACE | REPLACE 사용 |
| |
REPLICATE | REPLICATE |
| |
REVERSE | REVERSE_STR 사용 |
| |
RIGHT | SUBSTR, SUBSTRING 사용 | SUBSTR (expr, start [, length]) | |
PATINDEX | INSTR, POSITION 사용 |
| |
SOUNDEX | 미 지원 |
| |
SPACE | LPAD, RPAD 사용 |
| |
STR | TO_CHAR 사용 |
| |
STUFF | STUFF |
| |
SUBSTRING | SUBSTRING |
| |
UNICODE | 미 지원 |
| |
UPPER | UPPER |
|
OBJECT
분류 | SQL Server | Altibase | 비고 |
|---|---|---|---|
CONSTRAINT | 지원 | 지원 |
|
TRIGGER | 지원 | 지원 |
|
Multi Key-Index | 지원 | 지원 |
|
VIEW | 지원 | 지원 |
|
UPDATABLE VIEW | 지원 | 지원 | ALTIBASE에서 |
SEQUENCE | 지원 | 지원 |
|
STORED FUNCTION/PROCEDURE | 지원 | 지원 |
|
SYNONYM | 지원 | 지원 |
|
Temporary Table | 지원 | 지원 | ALTIBASE에서 |
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 | 미 지원 | ALTIBASE에서 구문생성시 삭제 |
DEFAULT_FULLTEXT_LANGUAGE | 미 지원 | ALTIBASE에서 구문생성시 삭제 |
DEFAULT_LANGUAGE | 미 지원 | ALTIBASE에서 구문생성시 삭제 |
NESTED_TRIGGERS | 미 지원 | ALTIBASE에서 구문생성시 삭제 |
TRANSFORM_NOISE_WORDS | 미 지원 | ALTIBASE에서 구문생성시 삭제 |
TWO_DIGIT_YEAR_CUTOFF | 미 지원 | ALTIBASE에서 구문생성시 삭제 |
DB_CHAINING | 미 지원 | ALTIBASE에서 구문생성시 삭제 |
TRUSTWORTHY | 미 지원 | ALTIBASE에서 구문생성시 삭제 |
CREATE TABLE
SQL Server의 TABLE을 Altibase로 변환할 때 CREATE TABLE 시 사용한 여러 옵션을 알맞게 변경해야 한다.
Altibase는 OBJECT TABLE, XMLType TABLE을 제공하지 않는다.
Altibase는 메모리 TABLE을 제공한다. 따라서 변환할 TABLE의 특성을 잘 파악하여 메모리 TABLE을 생성한다면 메모리 TABLESPACE를 지정하여 생성해야 한다.
만약 메모리 TABLE을 생성한다면 SQL Server에서 사용했던 CREATE TABLE 구문에 사용한 옵션들을 사용할 수 없다.
메모리 TABLE 생성 구문은 Altibase의 SQL 관련 매뉴얼을 참조하면 된다.
SQL SERVER의 TABLE을 DISK TABLE로 변환하고자 한다면, CREATE TABLE 시 설정할 수 있는 여러 옵션을 다음과 같이 Altibase에 맞게 변환해야 한다.
1. Column definition
SQL Server | Altibase | 비고 |
|---|---|---|
FILESTREAM | 미 지원 |
|
COLLATE | 미 지원 |
|
CONSTRAINT | CONSTRAINT | Altibase는 PRIMARY KEY, UNIQUE 지정 시 index 이름을 명시할 수 없다 |
IDENTITY | 미 지원 |
|
ROWGUIDCOL | 미 지원 |
|
2. data type
SQL Server | Altibase | 비고 |
|---|---|---|
Precision, scale | Precision, scale |
|
max | 미 지원 |
|
CONTENT | 미 지원 |
|
DOCUMENT | 미 지원 |
|
xml_schema_collection | 미 지원 |
|
3. column constraint
SQL Server | Altibase | 비고 |
|---|---|---|
PRIMARY KEY | PRIMARY KEY |
|
NULL, NOT NULL | NULL, NOT NULL |
|
UNIQUE | UNIQUE |
|
CLUSTERED, NONCLUSTERED | 미 지원 |
|
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 | 미 지원 |
|
FOREIGN KEY REFERENCES | FOREIGN KEY REFERENCES |
|
partition_scheme_name | PARTITION BY RANGE | HASH | LIST | Table 생성시 파티션테이블 종류 지정. |
6. table_option
SQL Server | Altibase | 비고 |
|---|---|---|
DATA_COMPRESSION | COMPRESS(column_name)로 대체 | Altibase는 컬럼별 압축기능 제공 |
7. index_option
SQL Server | Altibase | 비고 |
|---|---|---|
PAD_INDEX | 미 지원 |
|
FILLFACTOR | 미 지원 |
|
IGNORE_DUP_KEY | 미 지원 | Altibase는 OFF 상태임 |
STATISTICS_NORECOMPUTE | 미 지원 | Altibase는 OFF 상태임 |
ALLOW_ROW_LOCKS | 미 지원 | Durability Level 설정에 따라 정의 |
ALLOW_PAGE_LOCKS | 미 지원 | Durability Level 설정에 따라 정의 |
DATA_COMPRESSION | 미 지원 | INDEX 압축은 미지원 |
CREATE USER
Altibase는 데이터베이스 로그인과 유저를 분리하여 생성하지 않고 하나의 유저로 생성하여 관리한다.
| SQL Server | Altibase | 비고 |
|---|---|---|
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, REVERSE, Global partitioned INDEX를 제공하지 않는다.
다음은 Altibase로 변환할 때 CREATE INDEX 구문에 사용하는 옵션들에 대한 변환 방법이다.
SQL Server | Altibase | 비고 |
|---|---|---|
UNIQUE | UNIQUE |
|
CLUSTERED | NONCLUSTERED | 미 지원 |
|
ASC | DESC | ASC | DESC |
|
INCLUDE | 미 지원 |
|
filter_predicate | 미 지원 |
|
partition_scheme_name | PARTITION ON | Local Index만 지원 |
ON filegroup_name | 미 지원 |
|
table_or_view_name | Table_name | View는 지원하지 않음 |
PAD_INDEX | 미 지원 |
|
FILLFACTOR | 미 지원 |
|
SORT_IN_TEMPDB | 미 지원 |
|
IGNORE_DUP_KEY | 미 지원 | Altibase는 ON 상태임 |
STATISTICS_NORECOMPUTE | 미 지원 | Alitbase는 OFF 상태임 |
DROP_EXISTING | 미 지원 |
|
ONLINE | 미 지원 | Alitbase는 OFF 상태임 |
ALLOW_ROW_LOCKS | 미 지원 | Durability Level 설정에 따라 정의 |
ALLOW_PAGE_LOCKS | 미 지원 | Durability Level 설정에 따라 정의 |
MAXDOP | 미 지원 | 생성시에만 적용 |
DATA_COMPRESSION | COMPRESS(column_name)로 대체 |
|
SQL Conversion
SQL Server의 SQL 문들을 ALTIBASE로 변환하는 방법을 설명에 대하여 설명한다.
JOIN
Altibase는 아래의 조인 외에도 Semi Join, Anti 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 | CROSS JOIN |
|
Execution Query
Altibase의 쿼리 종결 문자는 “;” 이다. 따라서 여러 쿼리를 한번에 실행하려 한다면 쿼리마다 종결문자 “;”로 구분해 주어야 한다.
SQL Server | Altibase | 비고 |
|---|---|---|
GO | ; | 기본값은 Autocommit |
Temporary Table
| SQL Server | Altibase | 비고 |
|---|---|---|
| CREATE TABLE #TempProcess | CREATE TABLE TEMPORARY table_name (…) on commit (...) rows TABLESPACE volatile_tablespace_name |
Control Statement
| SQL Server | Altibase |
|---|---|---|
IF | If (조건) | If 조건 then |
While | While (조건) | While 조건 loop |
Identity Attribute
Altibase에는 Identity 속성은 존재하지 않는다. 따라서 필요시 SEQUENCE를 만들어 컬럼의 DEFAULT 값에 적용하여 사용한다.
예를 들면 아래와 같다.
| SQL Server | Altibase |
|---|---|
-- c1 컬럼에 1씩 자동증가 적용 create table seq_test (c1 int identity(1,1) not null ... ); | -- sequence 생성 create sequence seq1 start with 1 increment by 1 nocache; -- default 값에 sequence 적용 create table seq_test (c1 integer default seq1.nextval not null, ... ); |
Procedure Conversion
Altibase의 PROCEDRUE 생성 및 실행구문은 SQL 서버와 다른 부분이 있다.
예제를 통하여 PROCEDURE 변경 방법을 확인한다.
Parameter Declaration
SQL Server의 파라미터 선언부를 Altibase로 변환 시 다음 작업이 필요하다.
SQL Server의 파라미터 선언에서 ‘@’ 기호를 없앤다.
파라미터의 성격에 따라 in , out , in out 을 명시해준다.
Function일 경우 실행 후 하나의 값을 반환해 주는 것으로 반드시 RETURN 다음의 데이터 타입을 명시해야 한다.
| SQL Server | Altibase |
|---|---|
Variable Declaration
Altibase의 변수 선언은 AS와 BEGIN 사이에서 정의된다.
SQL Server의 변수 선언에서 ‘@’ 기호를 없앤다.
변수 선언 할 때 구분자인 ‘,’를 ‘;’로 바꾼다.
마지막 변수 선언에도 항상 ‘;’로 마지막임을 선언 한다.
| SQL Server | Altibase |
|---|---|
Assignment
SQL Server은 변수에 값 할당 시 SET과 @ 를 이용한다.
Altibase는 이를 변경하기 위해서 아래와 같이 2가지 변경 방법을 지원한다.
- SET, ‘@’ 문자를 없앤다. ‘=’ 를 ‘ := ’로 바꾼다. 구분자인 ‘,’를 ‘;’로 바꾸고 마지막에 항상 ‘;’로 마지막임을 선언 한다.
- ‘@’ 문자를 없앤다. 구분자인 ‘,’를 ‘;’로 바꾸고 마지막에 항상 ‘;’로 마지막임을 선언 한다.
| SQL Server | Altibase |
|---|---|
흐름제어(Control_flow_statement) - IF문
Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
IF문 처음에는 IF (condition) THEN으로 처음을 표시한다.
IF문 끝에는 END IF로 IF문이 끝임을 표시한다.
| SQL Server | Altibase |
|---|---|
SELECT 절
Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
Altibase에서 select의 resultset을 client에 보내기 위해서는 DB 객체에 REF CURSOR 를 먼저 작성해주어야 한다. 그리고 sp의 인자에 ref cursor를 인자로 작성하여야 한다. 그리고 해당 쿼리를 실행할 때 Open이라는 명령어로 실행 한다.
SQL Server의 ‘@’ 문자를 없앤다
| SQL Server | Altibase |
|---|---|
Exception Handler
Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
Altibase의 Exception Handler는 해당 Exception이 발생했을 때 처리하는 기술이다.
Exception 처리는 항상 BEGIN …. END; 구문 안에서 처리 해야 한다.
시스템 정의 EXCEPTION이나 사용자 정의 EXCEPTION의 이름을 기술하고 해당 Exception을 만날 때 해당 statement를 처리하고, 현재 발생한 Exception을 처리하지 못할 경우 최종적으로 OTHERS 루틴으로 처리 된다.
적용 받은 레코드수가 0인지 체크하는 구문은 SQL%ROWCOUNT상수로 확인 할 수 있다.
시스템 정의 Exception은 파일 마지막에 첨부합니다
| SQL Server | Altibase |
|---|---|
SP Call
Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
SQL Server의 SP 호출은 exec sp_name 로 호출 하고 sp 인자를 괄호 없이 지정해주지만, Altibase에서 SP_name 을 실행하고 괄호안에 sp의 인자를 명시해준다.
SQL Server의 ‘@’ 문자를 없앤다.
| SQL Server | Altibase |
|---|---|
Functions
Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
함수별로 사용법은 상이할 수 있고, 함수 명이 다를 수도 있다.
SQL Server Function의 ‘@’ 문자를 없앤다.
| SQL Server | Altibase |
|---|---|
ETC
Altibase의 문장 끝에는 항상 ‘;’로 마지막임을 표시한다.
SQL Server의 ‘@’ 문자를 없앤다.
| SQL Server | Altibase |
|---|---|
UPDATE STATISTICS index_name | 필요 없음 |
with (nolock) | 필요 없음(삭제) |
order, level 등의 keyword 사용 | order, level 등의 keyword 사용 금지( 알티베이스 예약어) |
DB Link
Altibase에서 DB Link를 사용시에는 SELECT의 경우 REMOTE_TABLE(dblink명, Query);
DML의 경우 REMOTE_EXECUTE_IMMEDIATE(dblink명, Query); 를 사용한다.
ALTIBASE DB LINK에 대한 상세한 내용은 ALTIBASE 7.3 온라인 매뉴얼 ( Database Link User’s Manual ) 를 참조
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 Server | Altibase |
|---|---|
Exception Code
Error Message Reference 매뉴얼 참조
Exception Name | Error Code | Error Code | 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 |