Real Alternative DBMS ALTIBASE, Since 1999 MS SQL SERVER to ALTIBASE 변환가이드 ALTIBASE 6 2013.02
1. 1. 1. Document Control Change Reason Date Author Change Reference 2012-02-28 JHJEONG Created Reviews Date Name (Position) Distribution Name Location MS SQL to ALTIBASE 변환가이드 2 page of 28
목차 개요... 5 OBJECT 변환... 6 DATATYPE... 6 FUNCTION & EXPRESSION... 7 OBJECT... 11 CREATE TABLESPACE... 11 CREATE TABLE... 12 CREATE USER... 15 CREATE INDEX... 15 SQL Conversion... 17 1. JOIN... 17 2. Execution Query... 17 3. Temporary Table... 17 4. Control Statement... 17 5. Identity attribute... 18 6. Procedure Conversion... 18 1. Parameter Declaration... 18 2. Variable Declaration... 19 3. ASSIGNMENT... 20 4. Control_flow IF 문... 21 5. SELECT 절... 21 6. Exception Handler... 22 7. SP Call... 23 8. Functions... 24
9. Etc... 25 7. Using Cursor... 26 MS SQL to ALTIBASE 변환가이드 4 page of 28
개요 본문서는 Microsoft사의 SQL Server에서 ALTIBASE로변환할때고려할사항과변환방법에대해설명한다. SQL Server 2012와 ATLIBASE 6.1 버전을대상으로한다. 아래문서를사전에참고할것을권장한다. ATLIBASE, MS SQL Server 비교자료 MS SQL to ALTIBASE 변환가이드 5 page of 28
2. 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 사용 알티베이스의 Scale은마이크로초 (6자리) 까지지원. SAMMLLDATETIME DATE 사용 DATETIME DATE 사용 TIME DATE 사용 MS SQL to ALTIBASE 변환가이드 6 page of 28
3. FUNCTION & EXPRESSION 분류 SQL Server ALTIBASE 비고 Aggregate AVG AVG CHECKSUM_AGG COUNT COUNT COUNT_BIG COUNT GROUPING GROUPING_ID MAX MAX MIN MIN STDEV STDDEV 사용 STDEVP SUM SUM VAR VARIANCE Ranking DENSE_RANK DENSE_RANK 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_TIMEST SYSDATE 사용 AMP DATENAME DATENAME DATEPART DATEPART DAY DATEPART 사용 DATEADD DATEADD 구문변경 DATEADD (date, number, date_field_name) MS SQL to ALTIBASE 변환가이드 7 page of 28
분류 SQL Server ALTIBASE 비고 Date DATEDIFF DATEDIFF 구문변경 DATEDIFF (startdate, enddate, date_field_name) DATEFROMPARTS TO_DATE 사용 DATETIME2FROM TO_DATE 사용 PARTS DATETIMEFROMP TO_DATE 사용 ARTS DATETIMEOFFSET TO_DATE 사용 FROMPARTS EOMONTH LAST_DAY 사용 GETDATE SYSDATE 사용 GETUTCDATE ISDATE SMALLDATETIME TO_DATE 사용 FROMPARTS SWITCHOFFSET SYSDATETIME SYSDATE 사용 SYSDATETIMEOFF SET SYSUTCDATETIME TIMEFROMPARTS TO_DATE 사용 TODATETIMEOFFS ET YEAR TO_CHAR 사용 Logical CHOOSE IIF NVL2 사용 Mathematical ABS ABS ACOS ACOS ASIN ASIN ATAN ATAN ATN2 ATN2 CEILING CEIL 사용 MS SQL to ALTIBASE 변환가이드 8 page of 28
분류 SQL Server ALTIBASE 비고 Mathematical COS COS COT DEGREES EXP EXP FLOOR FLOOR LOG LN 사용 ALTIBASE의 LOG 함수는다른기능제공 LOG10 PI POWER POWER RADIANS RAND RANDOM 사용 ALTIBASE는 Integer형식으로반환 ROUND ROUND SIGN SIGN SIN SIN SQRT SQRT SQUARE TAN TAN TAN TAN String ASCII ASCII CHAR CHAR CHARINDEX INSTR, POSITION 사용 CONCAT CONCAT DIFFERENCE FORMAT LEFT SUBSTR, SUBSTRING 사 SUBSTR (expr, start [, length]) Start에양수지정 용 LEN LENGTH 사용 LOWER LOWER LTRIM LTRIM ALTIBASE는 LTRIM (expr1 [,expr2]) NCHAR NCHAR MS SQL to ALTIBASE 변환가이드 9 page of 28
분류 SQL Server ALTIBASE 비고 String PATINDEX INSTR, POSITION 사용 QUOTENAME REPLACE REPLACE2 사용 REPLICATE REPLICATE REVERSE REVERSE_STR 사용 RIGHT SUBSTR, SUBSTRING 사 SUBSTR (expr, start [, length]) Start에음수지정 용 RTRIM RTRIM ALTIBASE는 RTRIM (expr1 [,expr2]) PATINDEX INSTR, POSITION 사용 QUOTENAME REPLACE REPLACE2 사용 REPLICATE REPLICATE REVERSE REVERSE_STR 사용 RIGHT SUBSTR, SUBSTRING 사 SUBSTR (expr, start [, length]) Start에음수지정 용 RTRIM RTRIM ALTIBASE는 RTRIM (expr1 [,expr2]) SOUNDEX SPACE LPAD, RPAD 사용 STR TO_CHAR 사용 STUFF STUFF SUBSTRING SUBSTRING UNICODE UPPER UPPER MS SQL to ALTIBASE 변환가이드 10 page of 28
4. 5. 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 HDB에서는테이블스페이스를관리한다. ALTIBASE HDB에서의테이블스페이스는저장공간에따라메모리테이블스페이스, 디스크테이블스페이스로나뉘며생성주체에따라시스템테이블스페이스, 사용자정의테이블스페이스, 저장내용에따라딕셔너리테이블스페이스, 언두테이블스페이스, 임시테이블스페이스, 데이터테이블스페이스등으로나뉘어진다. 따라서 ALTIBASE HDB로변환할때는데이터저장공간에따라 CREATE MEMORY DATA TABLESPACE, CREATE DISK DATA TABLESPACE 구문을이용하여생성한다. 다음은 SQL Server의 DATABASE를 ALTIBASE HDB의테이블스페이스로변환할때 CREATE TABLESPACE 구문에서지정하는여러옵션들의변환가이드를설명한것이다. MS SQL to ALTIBASE 변환가이드 11 page of 28
6. 생성예 ) CREATE TABLESPACE user_data DATAFILE '/tmp/tbs.user' SIZE 10M AUTOEXTEND ON NEXT 128M; SQL Server ALTIBASE 비고 FILENAME FILENAME SIZE SIZE 기본 100MB MAXSIZE MAXSIZE FILEGROWTH AUTOEXTEND ON NEXT FILESTREAM DEFAULT_FULLTEXT_LANGUAGE DEFAULT_LANGUAGE NESTED_TRIGGERS TRANSFORM_NOISE_WORDS TWO_DIGIT_YEAR_CUTOFF DB_CHAINING TRUSTWORTHY 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에맞게변환해야한다. MS SQL to ALTIBASE 변환가이드 12 page of 28
1. Column_definition SQL Server ALTIBASE 비고 FILESTREAM COLLATE CONSTRAINT CONSTRAINT ALTIBASE는 CHECK를제외한 Constraint를지원한다. 또한 Constraint 지정시 references 절의 ON DELETE SET NULL(ON DELETE CASCADE는지원 ) 옵션을제공하지않으므로삭제. 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 MS SQL to ALTIBASE 변환가이드 13 page of 28
SQL Server ALTIBASE 비고 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 7. index_option SQL Server ALTIBASE 비고 PAD_INDEX FILLFACTOR IGNORE_DUP_KEY ALTIBASE는 ON 상태임 STATISTICS_NORECOM ALTIBASE는 OFF 상태임 PUTE ALLOW_ROW_LOCKS Durability Level 설정에따라정의 ALLOW_PAGE_LOCKS Durability Level 설정에따라정의 DATA_COMPRESSION MS SQL to ALTIBASE 변환가이드 14 page of 28
7. 8. CREATE USER ALTIBASE는데이터베이스로그인과유저를분리하여생성하지않고하나의유저로생성하여관리한다. SQL Server 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 ] [ ; ] ALTIBASE 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 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 MS SQL to ALTIBASE 변환가이드 15 page of 28
SQL Server ALTIBASE 비고 SORT_IN_TEMPDB IGNORE_DUP_KEY ALTIBASE는 ON 상태임 STATISTICS_NORECOM Alitbase는 OFF 상태임 PUTE DROP_EXISTING ONLINE Alitbase는 OFF 상태임 ALLOW_ROW_LOCKS Durability Level 설정에따라정의 ALLOW_PAGE_LOCKS Durability Level 설정에따라정의 MAXDOP PARALLEL 생성시에만적용 DATA_COMPRESSION MS SQL to ALTIBASE 변환가이드 16 page of 28
9. 10. 11. 12. SQL Conversion SQL Server 의 SQL 문들을 ALTIBASE 로변환하는방법을설명에대하여설명한다. 1. JOIN ALTIBASE 는 ANSI 표준의 JOIN 연산만제공한다. SQL Server ALTIBASE 비고 INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN CROSS JOIN INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN 2. Execution Query ALTIBASE의쿼리종결문자는 ; 이다. 따라서여러쿼리를한번에실행하려한다면쿼리마다종결문자 ; 로구분해주어야한다. SQL Server ALTIBASE 비고 GO ; 기본값은 Autocommit Commit; 3. Temporary Table ALTIBASE 는 Temporary Table 을생성하는명령문은존재하지않으며 Temporary Table 의경우 Volatile Tablespace 에 Table 을생성하여사용한다. SQL Server CREATE TABLE #TempProcess ALTIBASE CREATE TABLE TEMP1 ( ) TABLESPACE volatile_tablespace_name 4. Control Statement SQL Server IF If ( 조건 ) Else if ( 조건 ) Else End ALTIBASE If 조건 then Elseif 조건 then Else End While While ( 조건 ) While 조건 loop MS SQL to ALTIBASE 변환가이드 17 page of 28
13. 14. 1. BEING END BREAK =>while 문탈출 End loop Exit when 조건 => 조건만족할때 반복 loop 탈출 5. Identity attribute ALTIBASE 에는 Identity 속성은존재하지않는다. 따라서필요시 SEQUENCE 를만들어사용한다. 6. Procedure Conversion ALTIBASE 의 PROCEDRUE 생성및실행구문은 SQL 서버와다른부분이있다. 예제를통하여 PROCEDURE 변경방법을확인한다. 1. Parameter Declaration SQL Server의파라미터선언에서 @ 기호를없앤다. 파라미터의성격에따라 in, out, in out 을명시해준다. Function일경우실행후하나의값을반환해주는것으로반드시 RETURN 다음의데이터타입을명시해야한다. SQL Server CREATE Procedure [dbo].[sp1] @ntop INT -- 무시, @ngroupcode INT = -2, @nobjectcode INT = -2, @nrcls INT=1 -- 1:Set, 0:Unset, @nlcrs INT=1 -- 1:Set, 0:Unset, @nlcls INT=1 -- 1:Set, 0:Unset, @sstartdate VARCHAR(19) = '' -- 무시, @senddate VARCHAR(19) = '' -- 무시, @nsort INT = 0 -- 0: 탐지회수, 1: 시도횟수 2:DataSize, @ssignaturename VARCHAR(100) = '' As ALTIBASE MS SQL to ALTIBASE 변환가이드 18 page of 28
2. create or replace procedure sp1 ( i_ntop IN INT -- 무시, i_ngroupcode IN INT := -2, i_nobjectcode IN INT := -2, i_nrcls IN INT:=1 -- 1:Set, 0:Unset, i_nlcrs IN INT:=1 -- 1:Set, 0:Unset, i_nlcls IN INT:=1 -- 1:Set, 0:Unset, i_sstartdate IN VARCHAR(19) := '' -- 무시, i_senddate IN VARCHAR(19) := '' -- 무시, i_nsort IN INT := 0 -- 0: 탐지회수, 1: 시도횟수 2:DataSize, i_ssignaturename IN VARCHAR(100) := '' ) as 2. Variable Declaration Altibase의변수선언은 AS와 BEGIN 사이에서정의된다. SQL Server의변수선언에서 @ 기호를없앤다. 변수선언할때구분자인, 를 ; 로바꾼다. 마지막변수선언에도항상 ; 로마지막임을선언한다. SQL Server create or replace procedure sp1 ( ) as DECLARE @stotalqry VARCHAR(3000), @sqry VARCHAR(3000), @sfilterqry VARCHAR(1000), @dstartdate DATETIME, @denddate DATETIME MS SQL to ALTIBASE 변환가이드 19 page of 28
3., @ssort VARCHAR(20), @ssortsub VARCHAR(90), @stop VARCHAR(10), @stable VARCHAR(50), @nsec INT, @sbasedate VARCHAR(23) ALTIBASE create or replace procedure sp1 ( ) as i_stotalqry VARCHAR(3000); i_sqry VARCHAR(3000); i_sfilterqry VARCHAR(1000); i_dstartdate DATE; i_denddate i_ssort i_ssortsub i_stop i_stable i_nsec DATE; VARCHAR(20); VARCHAR(90); VARCHAR(10); VARCHAR(50); INT; i_sbasedate VARCHAR(23); 3. ASSIGNMENT SQL Server의변수에값할당시 SET 를이용한다. 여기서 SET, @ 문자를없앤다. 그리고 = 를 := 로바꾼다. 구분자인, 를 ; 로바꾸고마지막에항상 ; 로마지막임을선언한다. 위와같이 SET 을명시하여변수에값을할당할수도있다 MS SQL to ALTIBASE 변환가이드 20 page of 28
4. 5. SQL Server SET @stop = '1000' SET @sbasedate = CONVERT(VARCHAR, DATEADD(dd, -1, GETDATE()), 121) ALTIBASE i_stop := '1000' ; i_sbasedate := to_char(dateadd (SYSDATE, -1, 'DAY'), 'YYYY-MM-DD HH:MI:SS') ; OR Set i_stop = '1000' ; Set i_sbasedate = to_char(dateadd (SYSDATE, -1, 'DAY'), 'YYYY-MM-DD HH:MI:SS') ; 4. Control_flow IF 문 ALTIBASE의문장끝에는항상 ; 로마지막임을표시한다. IF문처음에는 IF (condition) THEN으로처음을표시한다. IF문끝에는 END IF로 IF문이끝임을표시한다 SQL Server IF (@nrcls = 1) AND (@nlcrs = 1) AND (@nlcls = 1) SET @sfilterqry = '' ELSE IF (@nrcls = 0) AND (@nlcrs = 0) AND (@nlcls = 0) SET @sfilterqry = '' ALTIBASE IF (i_nrcls = 1) AND (i_nlcrs = 1) AND (i_nlcls = 1) THEN i_sfilterqry := '' ; ELSIF (i_nrcls = 0) AND (i_nlcrs = 0) AND (i_nlcls = 0) THEN i_sfilterqry := '' ; END IF; 5. SELECT 절 ALTIBASE 의문장끝에는항상 ; 로마지막임을표시한다. MS SQL to ALTIBASE 변환가이드 21 page of 28
6. ALTIBASE에서 select의 resultset을 client에보내기위해서는 DB 객체에 REF CURSOR 를먼저작성해주어야한다. 그리고 sp의인자에 ref cursor를인자로작성하여야한다. 그리고해당쿼리를실행할때 Open이라는명령어로실행한다. SQL Server의 @ 문자를없앤다 SQL Server SET @sqry = 'select * from test_tbl' EXEC(@sQry) ALTIBASE CREATE TYPESET MY_TYPE AS TYPE MY_CUR IS REF CURSOR; END; / create or replace procedure sptmsgeteventsignaturerankvariation (, P1 OUT MY_TYPE.MY_CUR ) As i_sqry := 'select * from test_tbl' ; OPEN P1 FOR i_sqry; END; 6. Exception Handler ALTIBASE의문장끝에는항상 ; 로마지막임을표시한다. ALTIBASE의 Exception Handler는해당 Exception이발생했을때처리하는기술이다. Exception 처리는항상 BEGIN. END; 구문안에서처리해야한다. 시스템정의 EXCEPTION이나사용자정의 EXCEPTION의이름을기술하고 MS SQL to ALTIBASE 변환가이드 22 page of 28
7. 해당 Exception을만날때해당 statement를처리하고, 현재발생한 Exception을처리하지못할경우최종적으로 OTHERS 루틴으로처리된다. 적용받은레코드수가 0인지체크하는구문은 SQL%ROWCOUNT상수로확인할수있다. 시스템정의 Exception은파일마지막에첨부합니다 SQL Server IF @@ERROR <> 0 BEGIN IF @@ROWCOUNT = 0 BEGIN ROLLBACK END END ALTIBASE BEGIN EXCEPTION WHEN NO_DATA_FOUND THEN rollback; END; OR IF SQL%ROWCOUNT = 0 then ROLLBACK END if; 7. SP Call ALTIBASE의문장끝에는항상 ; 로마지막임을표시한다. SQL Server의 SP 호출은 exec sp_name 로호출하고 sp 인자를괄호없이지정해주지만, ALTIBASE에서 SP_name 을실행하고괄호안에 sp의인자를명시해준다. SQL Server의 @ 문자를없앤다. SQL Server IF @ 아이디 IS NOT NULL BEGIN EXEC SP_ 상품 _ 예약조회 _ 회원체크 @ 주민번호,@ 구분,@ 날짜 1,@ 날짜 2 MS SQL to ALTIBASE 변환가이드 23 page of 28
8. ALTIBASE IF i_ 아이디 IS NOT NULL THEN SP_ 상품 _ 예약조회 _ 회원체크 ( i_ 주민번호,i_ 구분,i_ 날짜 1,i_ 날짜 2); 8. Functions ALTIBASE의문장끝에는항상 ; 로마지막임을표시한다. 함수별로사용법은상이할수있고, 함수명이다를수도있다. Mssql의 @ 문자를없앤다. SQL Server 1. LEFT, RIGHT 함수 - LEFT(@ 주민번호,6) - RIGHT(@ 주민번호,7) 2. ISNULL(V1, 0) 3. CASE 연합 WHEN '0' THEN B. 대외모객 +B. 패키지 ELSE ISNULL(D. 연합모객,0) END 4. Convert CONVERT(VARCHAR(10),,120) <= B. 출발일 TO_CHAR(CASE2(i_ 출발일1=NULL,SYSDATE),'YYYY-MM-DD'); 5. LEN 6. RTRIM(LTRIM()) 7. DATEADD(mi, -20, GETDATE()) 8. CEILING 9. 나머지연산자 % (a % b ) 10. charindex( aaa, aaabbbcccddd ) 11. 문자열연결 + : ( alti + base ) ALTIBASE 1. SubStr로치환 - SUBSTR( 주민번호,1,6) - SUBSTR( 주민번호,8,7) 2. NVL(V1, 0) MS SQL to ALTIBASE 변환가이드 24 page of 28
9. 10. 3. CASE2( 연합 = '0', B. 대외모객 B. 패키지,D. 연합모객 =NULL,0,) 4. Convert - CONVERT(VARCHAR(23), dstartdate, 121) => TO_CHAR(dStartDate, 'YYYY- MM-DD HH:MI:SS.FF3'); - CONVERT(DATETIME, senddate) => TO_DATE(sEndDate, 'YYYY-MM-DD HH:MI:SS'); 5. LENGTH 6. TRIM() 7. DATEADD(sysdate, -20, 'MINITUE'); 8. CEIL 9. MOD(a, b) 10. INSTR( aaabbbcccddd, aaa ) 11. 사용 ( alti base ) 9. Etc ALTIBASE 의문장끝에는항상 ; 로마지막임을표시한다. SQL Server 의 @ 문자를없앤다. SQL Server 1. UPDATE STATISTICS index_name 2. with (nolock) 3. order, level 등의 keyword 사용 ALTIBASE 1. 필요없음. 2. 삭제 3. order, level 등의 keyword 사용금지 ( 알티베이스예약어 ) 10. DB Link Altibase 에서 DB Link 를사용시에는 SELECT 의경우 REMOTE_TABLE(dblink 명, Query); MS SQL to ALTIBASE 변환가이드 25 page of 28
15. 11. DML 의경우 REMOTE_EXECUTE_IMMEDIATE(dblink 명, Query); 를사용한다. 11. 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 7. Using Cursor SQL Server의커서를 ALTIBASE로변환하는방법을예제를통하여확인한다. SQL Server declare security_cursor cursor for select fldid from tbldept where fldparentid=@fldid open security_cursor fetch next from security_cursor into @fldid while @@fetch_status = 0 begin exec sr_getsubdeptid_str @fldid, @DeptID OUTPUT declare @sql as varchar(8000) begin exec(@sql) end fetch next from security_cursor into @fldid end close security_cursor deallocate security_cursor ALTIBASE 부서별사원수와급여합계를구하는프로시저입니다 CREATE OR REPLACE PROCEDURE ForCursor_Test AS BEGIN DECLARE CURSOR dept_sum IS SELECT b.dname, COUNT(a.empno) cnt, SUM(a.sal) salary FROM emp a, dept b WHERE a.deptno = b.deptno MS SQL to ALTIBASE 변환가이드 26 page of 28
GROUP BY b.dname; -- Cursor를 FOR문에서실행시킨다 BEGIN FOR emp_list IN dept_sum LOOP println(' 부서명 : ' emp_list.dname); println (' 사원수 : ' emp_list.cnt); println(' 급여합계 : ' emp_list.salary); END LOOP; END; END; / MS SQL to ALTIBASE 변환가이드 27 page of 28
EXCEPTION CODE Exception Name Error Code Error Code Error Section (integer) (hexadecimal) "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 MS SQL to ALTIBASE 변환가이드 28 page of 28