ALTIBASE Application Development SQL User s Manual Release 5.3.3
----------------------------------------------------------- ALTIBASE Application Development SQL User s Manual Release 5.3.3 Copyright c 2001~2009 ALTIBASE Corp. All Rights Reserved. 본문서의저작권은 알티베이스에있습니다. 이문서에대하여당사의동의없이무단으로복제또는전용할수없습니다. 알티베이스 152-790 서울시구로구구로동 182-13 대륭포스트타워 Ⅱ 10 층전화 : 02-2082-1114 팩스 : 02-2082-1099 e-mail: support@altibase.com homepage: http://www.altibase.com -----------------------------------------------------------
목차 서문 i 이매뉴얼에대하여 ii Part Ⅰ 1 1. 알티베이스 SQL 소개 3 SQL 개요 4 SQL 분류 9 2. 자료형 13 자료형의개요 14 문자형데이터타입 19 숫자형데이터타입 24 날짜형데이타타입 36 이진데이터타입 48 LOB 데이타타입 52 공간데이터타입 56 Part Ⅱ 57 3. 데이타정의어 59 ALTER DATABASE 60 ALTER INDEX 67 ALTER QUEUE 72 ALTER REPLICATION 73 ALTER SEQUENCE 78 ALTER TABLE 81 ALTER TABLESPACE 102 ALTER TRIGGER 110 ALTER USER 112 목차 I
ALTER VIEW 114 COMMENT 116 CREATE DATABASE 118 CREATE DATABASE LINK 121 CREATE DIRECTORY 126 CREATE INDEX 128 CREATE QUEUE 137 CREATE REPLICATION 139 CREATE SEQUENCE 142 CREATE SYNONYM 149 CREATE TABLE 153 CREATE DISK TABLESPACE 175 CREATE MEMORY TABLESPACE 181 CREATE VOLATILE TABLESPACE 186 CREATE TEMPORARY TABLESPACE 190 CREATE TRIGGER 192 CREATE USER 199 CREATE VIEW 202 DROP DATABASE 206 DROP DATABASE LINK 208 DROP DIRECTORY 210 DROP INDEX 211 DROP QUEUE 212 DROP REPLICATION 213 DROP SEQUENCE 214 DROP SYNONYM 215 DROP TABLE 217 DROP TABLESPACE 218 DROP TRIGGER 221 DROP USER 222 DROP VIEW 224 GRANT 225 RENAME TABLE 240 REVOKE 242 TRUNCATE TABLE 246 II ALTIBASE5 SQL User s Manual
4. 데이타조작어 249 DELETE 250 INSERT 255 LOCK TABLE 259 SELECT 264 UPDATE 298 MOVE 304 ENQUEUE 307 DEQUEUE 308 5. 데이타제어어 310 ALTER SESSION 311 ALTER SYSTEM 314 COMMIT 316 SAVEPOINT 317 ROLLBACK 319 SET TRANSACTION 322 Part Ⅲ 325 6. 집합연산자 327 합집합 (UNION) 328 합집합 (UNION ALL) 329 교집합 330 차집합 331 우선순위규칙 332 7. 함수 333 함수의종류 334 그룹함수 336 분석함수 339 숫자함수 342 문자함수 355 날짜함수 371 변환함수 380 기타함수 389 목차 III
암호화함수 399 8. 산술연산자 403 종류 404 단항연산자 405 사칙연산자 406 연결연산자 408 변환연산자 409 9. 조건연산자 411 종류 412 논리연산자 413 비교조건 416 단항비교 418 Part Ⅳ 427 A. 부록 : 스키마 429 예제테이블정보 430 E-R 다이어그램과샘플데이타 433 Altibase 객체들의최대값 440 찾아보기 441 IV ALTIBASE5 SQL User s Manual
서문 서문 i
이매뉴얼에대하여 이매뉴얼은데이타베이스에서사용되는 SQL(Structured Query Language) 의사용법에대해한다. 대상사용자 이매뉴얼은다음과같은알티베이스사용자를대상으로작성되었다. 데이터베이스관리자 성능관리자 데이터베이스사용자 응용프로그램개발자 기술지원부 다음과같은배경지식을가지고이매뉴얼을읽는것이좋다. 컴퓨터, 운영체제및운영체제유틸리티운용에필요한기본지식 관계형데이타베이스사용경험또는데이타베이스개념에대한이해 컴퓨터프로그래밍경험 데이타베이스서버관리, 운영체제관리또는네트워크관리경험 소프트웨어환경 이매뉴얼은데이타베이스서버로알티베이스버전 5.3.3 을사용한다는가정하에작성되었다. 이매뉴얼의구성 이매뉴얼은다음과같이구성되어있다. 제 1 장알티베이스 SQL 소개이장은알티베이스를사용하기위한 SQL 의개요, 분류, 구조에대해서한다. 제 2 장자료형이장은알티베이스에서제공하는데이터타입에대해서한다. ii ALTIBASE5 SQL User s Manual
제 3 장데이타정의어이장은알티베이스에서사용되는데이타정의어 (DDL) 에대해서각각한다. 제 4 장데이타조작어이장은알티베이스에서사용되는데이타조작어 (DML) 에대해서각각한다. 제 5 장데이타제어어이장은알티베이스에서사용되는데이타제어어 (DCL) 에대해서각각한다. 제 6 장집합연산자이장은알티베이스의 SQL 에서사용되는집합연산자에대해서한다. 제 7 장함수이장은알티베이스에서제공하는함수들에대해서한다. 제 8 장산술연산자이장은알티베이스의 SQL 에서사용되는산술연산자에대해서한다. 제 9 장조건연산자이장은알티베이스의 SQL 문에서조건절에사용할수있는조건연산자에대해서한다. A. 부록 : 스키마이장은예제테이블정보와 ER 다이어그램과샘플데이타에대해서한다. 문서화규칙 이절에서는이매뉴얼에서사용하는규칙에대해한다. 이규칙을이해하면이매뉴얼과서세트의다른매뉴얼에서정보를쉽게찾을수있다. 여기서하는규칙은다음과같다. 구문다이어그램 샘플코드규칙 구문다이어그램 이매뉴얼에서는다음구성요소로구축된다이어그램을사용하여, 명령문의구문을한다. 구성요소 예약어 의미 명령문이시작한다. 완전한명령문이아닌구문요소는화살표로시작한다. 명령문이다음라인에계속된다. 완전한명령문이아닌구문요소는이기호로종료한다. 서문 iii
명령문이이전라인으로부터계속된다. 완전한명령문이아닌구문요소는이기호로시작한다. ; 명령문이종료한다. SELECT 필수항목 선택적항목 NOT ADD 선택사항이있는필수항목. 한항목만제공해야한다. DROP 선택사항이있는선택적항목. ASC DESC ASC 선택적항목. 여러항목이허용된다. 각반복앞부분에콤마가와야한다. DESC, 샘플코드규칙 코드예제는 SQL, Stored Procedure, isql 또는다른명령라인구문들을예를들어한다. 아래테이블은코드예제에서사용된인쇄규칙에대해한다. 규칙 의미 예제 [ ] 선택항목을표시 VARCHAR [(size)] [[FIXED ] VARIABLE] { } 필수항목표시. 반드시하나이상을선택해야되는표시 { ENABLE DISABLE COMPILE } 선택또는필수항목표시의인자구분표시... 그이전인자의반복표시예제코드들의생략되는것을표시 { ENABLE DISABLE COMPILE } [ ENABLE DISABLE COMPILE ] SQL> SELECT ename FROM employee; ENAME ------------------------ SWNO HJNO HSCHOI. iv ALTIBASE5 SQL User s Manual
그밖에기호기울임꼴 소문자 대문자 위에서보여진기호이외에기호들구문요소에서사용자가지정해야하는변수, 특수한값을제공해야만하는위치지정자사용자가제공하는프로그램의요소들, 예를들어테이블이름, 칼럼이름, 파일이름등 시스템에서제공하는요소들또는구문에나타나는키워드.. 20 rows selected. EXEC :p1 := 1; acc NUMBER(11,2); SELECT * FROM table_name; CONNECT userid/password; SELECT ename FROM employee; DESC SYSTEM_.SYS_INDICES_; 관련자료 자세한정보를위하여다음문서목록을참조하기바란다. ALTIBASE Administration Installation User s Manual ALTIBASE Administration Administrator s Manual ALTIBASE Administration Replication User s Manual ALTIBASE Application Development Precompiler User s Manual ALTIBASE Application Development ODBC User s Manual ALTIBASE Application Development Application Program Interface User s Manual ALTIBASE Tools isql User s Manual ALTIBASE Tools Utilities User s Manual ALTIBASE Message Error Message Reference 온라인매뉴얼 알티베이스테크니컬센터 (http://atc.altibase.com/) 에서국문및영문매뉴얼 (PDF, HTML) 을받을수있다. 알티베이스는여러분의의견을환영합니다. 이매뉴얼에대한여러분의의견을보내주시기바랍니다. 사용자의의견은다음버전의매뉴얼을작성하는데많은도움이됩니다. 서문 v
보내실때에는아래내용과함께기술지원센터 (support@altibase.com) 로보내주시기바랍니다. 사용중인매뉴얼의이름과버전 매뉴얼에대한의견 사용자의성함, 주소, 전화번호 이외에도알티베이스기술지원서의오류와누락된부분및기타기술적인문제들에대해서이주소로보내주시면정성껏처리하겠습니다. 기술적인부분과관련하여즉각적인도움이필요한경우에는기술지원센터로연락하시기바랍니다. 여러분의의견에항상감사드립니다. vi ALTIBASE5 SQL User s Manual
Part Ⅰ Part Ⅰ
1. 알티베이스 SQL 소개 이장에서는알티베이스 SQL 의특징과구성에대해서간략하게소개하고있다. 알티베이스 SQL 소개 3
SQL 개요 SQL(Structured Query Language) 은데이타베이스로저장되는데이타를조작하고, 관리하며, 검색하기위한언어이다. 알티베이스 SQL 특징 빠른질의수행 SQL/92 표준지원 알티베이스의경우대부분의질의들이 SQL 준비 (PREPARE) 과정후실행하기전시스템카탈로그정보가변하지않는점에착안해준비과정시점에최적화된실행계획트리 (execution plan tree) 를미리만들어두고여러번실행할수있도록하여실제질의실행시수행속도를대폭향상시켰다. 이와같은방법은초기데이타베이스스키마생성후데이타정의어 (DDL) 수행은거의일어나지않고데이타조작어 (DML) 작업이빈번한응용어플리케이션에매우유용하다. 알티베이스 SQL 은 SQL/92 표준사양을지원하므로기존 SQL 사용자들은별도의숙지없이알티베이스를쉽게사용할수있다. 강력한부연질의 (subquery) 기능지원 다양한시스템제공함수지원 일반적으로부연질의는수식의일부, IN, CREATE TABLE, INSERT 등에서주로사용된다. 여기에사용되는부연질의는대부분여러칼럼의여러레코드를검색해주는기능이다. 알티베이스의경우부연질의의결과가한레코드, 한칼럼일경우데이타가위치할수있는임의의위치에치환해사용할수있으며, 빠른검색속도의부연질의을지원하므로여러 SQL 문으로처리가능한질의문을한 SQL 문으로처리할수있다. 따라서복잡한응용어플리케이션에서유용하게사용가능하다. SQL/92 의표준사양이외에사용자가유용하게사용할수있는다양한시스템함수를지원한다. SQL 의수행 알티베이스에서 SQL 문의처리과정은크게준비 (PREPARE) 과정과실행 (EXECUTE) 과정으로나뉘어진다. 4 ALTIBASE5 SQL User s Manual
준비과정은 SQL 문의문법을분석하여정당성을검사하고최적화한후실행계획을수립해실행계획트리 (execution plan tree) 를생성하는과정이다. 이과정에서메타테이블에접근해테이블정보, 인덱스정보등을읽고최적화된접근계획을수립한다. 따라서준비와실행이한번에이루어지지않고나뉘어져수행된다면준비후메타의변경사항이일어나지않아야준비 (PREPARE) 과정시에생성한실행계획트리를수정없이그대로사용할수있다. 예를들어, 준비과정시존재했던인덱스가실행과정에실제로존재하지않는다면준비과정시인덱스를사용하는환경에서최적화한실행계획트리는실행과정시무효한실행계획이되어사용할수없게된다. 실행과정은준비과정에서생성된실행계획에따라실제질의문을수행하는과정이다. 한 SQL 문이호스트변수를사용하여여러개의값으로변경하여여러번수행하는경우준비과정은한번수행되고변수값설정과실행과정은여러번수행된다. 주석 알티베이스는 SQL 문의임의의위치에다음두가지형식의주석을사용할수있다. /* */ C언어에서사용한주석형식과동일한방식으로주석의시작에 /* 를명시하고주석의끝에 */ 를명시한다. 여러줄의주석을쓸수있다. -- - 를연이어두번명시하여한줄의주석을쓸때사용한다. 알티베이스객체 (Object) 스키마객체 알티베이스에서제공하는데이타베이스객체 (object) 는스키가객체와비스키마객체로구분되며, 그종류는다음과같다. 제약조건 (constraint) 인덱스 (index) 시퀀스 (sequence) 시노님 (synonym) 테이블 (table) 저장프로시저 (stored procedure) 알티베이스 SQL 소개 5
뷰 (view) 트리거 (trigger) 데이터베이스링크 (database link) 비스키마객체 사용자 (user) 이중화 (replication) 테이블스페이스 (tablespace) 디렉토리 (directory) 객체이름생성규칙 객체이름 비밀번호 예약어 테이블, 뷰, 시퀀스, 시노님, 저장프로시저는동일한이름공간 (Name Space) 를가지므로같은이름의객체는존재할수없다. 그외에다른객체들은각각의이름공간을가진다. 알티베이스의객체들은한사용자이름내에서유일한이름을사용해야한다. 따라서제약조건의이름도한테이블내에서유일한값이아니고한사용자내에서유일한이름이어야한다. 객체의이름은최대 40 바이트즉 40 자까지사용할수있으며, 영문의경우대문자와소문자를구별하지않는다. A-Z, a-z, 0-9, _, $ 만을사용할수있으며알티베이스의예약어는사용할수없다. 알티베이스의예약어는다음절을참고한다. 첫글자는반드시문자여야한다. 객체에대해서는 Administrator s Manual 을참고한다. 사용자가알티베이스에접속하기위해사용하는비밀번호역시객체이름과유사한제약조건을가진다. A-Z, a-z, 0-9, _, $ 만을사용할수있으며알티베이스의예약어는사용할수없다. 첫글자는반드시문자여야하고비밀번호의최대크기는운영체제에따라다르며 8~40 자사이이다. Solaris10, Window XP 의경우 40 자를지원한다. 다음단어들은알티베이스에서예약되어있는단어들로테이블, 칼럼, 사용자같은데이타베이스객체이름이나비밀번호로사용할수없다. 6 ALTIBASE5 SQL User s Manual
ADD ALL ALTER AND ANY AS ASC BEGIN BETWEEN BY CASCADE CASE CHECK CLOSE COLUMN COMMIT CONNECT CONSTANT CONSTRAINT CONSTRAINTS CONTINUE CREATE CUBE CURSOR CYCLE DATABASE DECLARE DEFAULT DELETE DESC DISCONNECT DISTINCT DROP ELSE ELSEIF ELSIF END ESCAPE EXCEPTION EXEC EXECUTE EXISTS EXIT EXTENTSIZE FALSE FETCH FIXED FOR FOREIGN FROM FULL FUNCTION GET GOTO GRANT GROUP GROUPING HAVING IDENTIFIED IF IN INDEX INNER INSERT INTERSECT INTO IS ISOLATION JOIN KEY LEFT LEVEL LIKE LIMIT LOCALUNIQUE LOCK LOOP MAXROWS MINUS MODE NATIVE NO NOCYCLE NOT NULL OFF OFFLINE ON OPEN OR ORDER OTHERS OUT OUTER PRIMARY PRIOR PRIVILEGES PROCEDURE RAISE READ REFERENCES RENAME REPLACE REPLICATION RESTRICT RETURN REVERSE REVOKE RIGHT ROLLBACK ROLLUP ROW ROWCOUNT ROWTYPE SAVEPOINT SELECT SEQUENCE SESSION SET SETS SOME 알티베이스 SQL 소개 7
SQLCODE SQLERRM START STEP SYNONYM SYSTEM TABLE TABLESPACE TEMPORARY THEN TO TRANSACTION TRIGGER TRUE TRUNCATE UNION UNIQUE UNTIL UPDATE USER VALUES VARIABLE VIEW WAIT WHEN WHERE WHILE WITH WORK WRITE 8 ALTIBASE5 SQL User s Manual
SQL 분류 알티베이스가제공하는전체 SQL 문을분류하면다음과같다. 각 SQL 문에대한자세한사용방법은 3 장데이타정의어, 4 장데이타조작어, 5 장데이타제어어를참조한다. 데이타정의어 (DDL) SQL 문 ALTER DATABASE ALTER INDEX ALTER REPLICATION ALTER SEQUENCE ALTER TABLE ALTER TABLESPACE ALTER TRIGGER ALTER USER ALTER VIEW CREATE DATABASE CREATE DIRECTORY CREATE INDEX CREATE QUEUE CREATE REPLICATION CREATE SEQUENCE CREATE SYNONYM CREATE TABLE CREATE TABLESPACE CREATE TRIGGER CREATE USER CREATE VIEW DROP DIRECTORY DROP INDEX DROP REPLICATION DROP SEQUENCE DROP SYNONYM DROP TABLE DROP TABLESPACE DROP TRIGGER DROP USER DROP VIEW 데이타베이스정의변경인덱스정의변경이중화의시작, 종료시퀀스의정의변경테이블의정의변경테이블스페이스정의변경트리거정의변경사용자의암호변경뷰재컴파일데이타베이스생성디렉토리생성인덱스생성큐생성이중화생성시퀀스생성시노님생성테이블생성테이블스페이스생성트리거생성사용자생성뷰생성디렉토리삭제인덱스삭제이중화삭제시퀀스삭제시노님삭제테이블삭제테이블스페이스삭제트리거삭제사용자삭제뷰삭제 알티베이스 SQL 소개 9
GRANT RENAME REVOKE TRUNCATE TABLE [ 표 1-1] 데이타정의어목록 권한부여테이블, 시퀀스, 뷰이름변경권한삭제테이블의모든레코드삭제 메타정보가변경되는 SQL 문들로위의문들을수행하면현재시작되어있는트랜잭션은종료되고새로운트랜잭션으로위의문들을처리한후그트랜잭션은종료된다. 즉하나의트랜잭션으로처리하는 SQL 문들이다. 다시말해서자동반영 (AUTOCOMMIT) 모드가비설정 (OFF) 된상태에서데이타조작어 (DML) 를수행하고명시적으로반영 (COMMIT) 을호출하지않았다하더라도위의 SQL 문들을수행하면이전의데이타조작어 (DML) 들이모두묵시적으로반영된다. 즉, 위 SQL 문을수행하기전데이타조작어들은위의 SQL 문수행후롤백문을이용해철회될수없다. 데이타조작어 (DML) SQL 문 DELETE INSERT LOCK TABLE SELECT UPDATE MOVE ENQUEUE DEQUEUE [ 표 1-2] 데이타조작어목록 데이타의삭제데이타의삽입특정한모드에서테이블잠금데이타의검색데이타의변경데이타의이동메시지를큐에삽입메시지를큐에서갖고와삭제 자동반영 (AUTOCOMMIT) 모드가비설정 (OFF) 되어있는상태에서위의 SQL 문을수행하면데이타정의어 (DDL) 와달리수행후묵시적으로반영되지않는 SQL 문들이다. 따라서, 자동반영비설정 (AUTOCOMMIT OFF) 상태에서여러개의데이타조작어 (DML) 를수행하고롤백 (rollback) 을호출하면수행된모든데이타조작어 (DML) 들이철회된다. 10 ALTIBASE5 SQL User s Manual
데이타제어어 (DCL) 시스템제어문 SQL 문 ALTER SYSTEM checkpoint, backup 수행 명시적으로디스크에반영 (checkpoint) 또는현재데이타베이스상태저장 (online-backup) 을할때사용된다. 작업제어문 SQL 문 ALTER SESSION 작업의설정사항변경 한개의작업설정사항을변경하는것으로현재작업에만적용된다. 주의 ) 현재동작중인트랜잭션이없어야한다. 트랜잭션제어문 SQL 문 COMMIT ROLLBACK or ROLLBACK TO SAVEPOINT savepoint_name SAVEPOINT savepoint_name SET TRANSACTION 트랜잭션정상종료트랜잭션철회지금까지의트랜잭션을임시저장현재트랜잭션의설정사항변경 트랜잭션의설정사항 (ISOLATION LEVEL) 의설정을변경하고트랜잭션의종료와철회를사용자가명시적으로할때사용하는 SQL 문이다. 위의 SQL 문은현재작업에만영향을미치고다른작업에는영향을미치지않는다. 알티베이스 SQL 소개 11
2. 자료형 SQL 을사용하여데이타베이스에데이타를저장하고질의하기위해서는데이타베이스의자료형에대한이해가선행되어야한다. 이장에서는알티베이스의데이타형에대해서자세히하고있다. 자료형 13
자료형의개요 데이타형의종류 알티베이스에서제공하는데이타형은다음과같다. 문자형데이타형 타입 Length Size CHAR 1 ~ 32000 length + 2 VARCHAR 1 ~ 32000 length + 2 NCHAR 1~16000(UTF16) 1~10666(UTF8) length*2 + 2(UTF16) length*3 + 2(UTF8) NVARCHAR 1~16000(UTF16) 1~10666(UTF8) length*2 + 2(UTF16) length*3 + 2(UTF8) NCHAR, NVARCHAR 는유니코드타입으로 Length 는문자길이를나타낸다. UTF16 과 UTF8 의길이는다르다. 숫자형데이타형 타입 Precision Scale Size (bytes) 비고 Nonnative NUMERIC 38 0 3+((precision * 고정소수점 NUMERIC(p) 1 ~ 38 0 )+2)/2 *DECIMAL은 NUMERIC(p,s) 1 ~ 38-84 ~ 128 NUMERIC과 DECIMAL 38 0 동일한데이터 DECIMAL(p) 1 ~ 38 0 타입이다. DECIMAL(p,s) 1 ~ 38-84 ~ 128 NUMBER(p) 1 ~ 38 0 NUMBER(p,s) 1 ~ 38-84 ~ 128 NUMBER 38 X 3+((precision * 부동소수점 FLOAT 38 X )+2)/2 Native FLOAT(p) 1 ~ 38 X 타입호환 C Type Size (bytes) 비고 DOUBLE double 8 * 실수형부동 REAL float 4 소수점 BIGINT long or long long 8 * 정수형 INTEGER int 4 SMALLINT short 2 날짜데이타형 타입 Size (byte) DATE 8 14 ALTIBASE5 SQL User s Manual
이진데이타형 공간데이타형 타입 Length Size (byte) BLOB/CLOB 1~2147483647 BYTE 1~32000 length + 2 NIBBLE 1~254 length/2 + 1 BIT 1~60576 length/8 + 4 VARBIT 1~131068 length/8 + 4 타입 Length Size (byte) GEOMETRY 16~104857600 length + 56 실제레코드의크기는위에명시된크기 (bytes) 에서헤더정보크기만큼추가된다. 헤더정보는 OS 환경에따라다를수있다. CHAR, VARCHAR, BYTE 타입의경우 VARIABLE 로선언된경우를의미한다. 고정소수점형 Size 계산 ( 3 + ( ( p ) + 2 ) / 2 ) Precision 이나 Scale 이홀수인경우 (+ 1) - NUMERIC 예 ) NUMERIC(38,0) Size = 3 + 40/2 = 23 Bytes - NUMERIC(p) NUMERIC(p, 0) 예 ) NUMERIC(10) Size = 3 + 12/2 = 9 Bytes - NUMERIC(p, s) 예 ) NUMERIC(10, 9) Size = 3 + 12/2 = 9 Bytes - DECIMAL : NUMERIC과동일 - DECIMAL(p) : NUMERIC(p) 와동일 - DECIMAL(p,s) : NUMERIC(p,s) 와동일 - NUMBER(p) : NUMERIC(p) 와동일 자료형 15
- NUMBER(p,s) : NUMERIC(p,s) 와동일 부동소수점형 Size 계산 ( 3 + ( ( p ) + 2 ) / 2 ) - FLOAT 예 ) FLOAT(38) Size = 3 + 40/2 = 23 Bytes - FLOAT(p) 예 ) FLOAT(20) Size = 3 + 22/2 = 14 Bytes - NUMBER: FLOAT 과동일 NULL 데이타행을테이블에삽입할때열의값을모르거나값이아직없는경우, 즉값이존재하지않는것을나타내는것이널 (NULL) 이다. 따라서이는 0 또는공백과는다른의미를나타내며비교연산이나저장시특별하게취급된다. 어떤연산에서수식에널이포함되면 NVL(), IS NULL 조건, IS NOT NULL 조건을제외하고최종연산의결과는널이된다. 즉, 널이포함되면비교또는연산이의미가없어지게된다. 생성할때 NOT NULL 또는 PRIMARY KEY 로정의되지않은모든데이타유형의컬럼은널값을포함할수있다. 16 ALTIBASE5 SQL User s Manual
데이터타입변환과호환 다음의테이블은데이터타입의변환가능행렬을나타낸다. 비교연산은같은데이타형인경우가능하다. 그러나비교되는자료의데이타형이다른경우데이타형변환을수행후비교한다. 단, 문자형데이타일경우에는다른데이타형으로변환되어수행된다. 변환전 변환후 c h a r v a r c h a r n c h a r n v a r c h a r c l o b char o o o o o o o o o o o o o o varchar o o o o o o o o o o o o o o o nchar o o o o o o o o o o o o o o nvarchar o o o o o o o o o o o o o o o clob o bigint o o o o o o o o o o o o o decimal o o o o o o o o o o o o o double o o o o o o o o o o o o o float o o o o o o o o o o o o o integer o o o o o o o o o o o o o number o o o o o o o o o o o o o numeric o o o o o o o o o o o o o real o o o o o o o o o o o o o smallint o o o o o o o o o o o o o date o o o o o blob byte nibble bit b i g i n t d e c i m a l d o u b l e f l o a t i n t e g e r n u m b e r n u m e r i c r e a l s m a ll i n t d a t e b l o b o b y t e o o n i b b l e o b i t v a r b i t o o varbit o o o geometry g e o m e t r y o 자료형 17
데이타형식변환 구문 datatype ' 문자또는상수 literal ' 상수테이터가가지는데이터타입을명시적으로다른데이터타입으로변환한다. 예를들어, 다음은 157.27 의숫자값을 '157.27' 의문자열로변환한다. CHAR '157.27' 18 ALTIBASE5 SQL User s Manual
문자형데이터타입 CHAR 흐름도 구문 CHAR [(size)] [[FIXED ] VARIABLE ( IN ROW size ) ] 명시된크기 (size) 만큼고정길이를가지는문자형데이타타입이다. 명시된전체크기에비해입력값의크기가작을경우뒷부분에공백으로문자가채워진다. CHAR 칼럼의크기는기본값으로 1 바이트이며, 최대길이는선언방식에따라다르다. FIXED 로선언될경우페이지크기 (8K) 내에서지정할수있으며, VARIABLE 로선언될경우 32KB 즉 32000 바이트까지저장할수있다. 자료형 19
VARCHAR 흐름도 구문 VARCHAR [(size)] [[FIXED ] VARIABLE ( IN ROW size ) ] 명시된크기내에서가변길이를가지는문자형데이타타입이다. FIXED 로선언될경우명시된크기만큼저장소의크기가설정된다. VARIABLE 로선언될경우에는명시된크기내에서가변길이를갖는다. 예를들어, 저장해야하는데이타가 "magic" 일경우 VARCHAR(10) FIXED 로정의하면 "magic " 으로 10 바이트만큼의저장공간을사용한다. 그러나 VARCHAR(10) VARIABLE 로정의하면 "magic" 으로 5 바이트만큼의저장공간을사용한다. FIXED 는저장공간이낭비되는반면, 저장공간의크기가고정되어있어처리속도가빨라지는장점이있다. 그러나 VARIABLE 은데이타마다저장공간의크기가달라처리속도가느린반면, 저장공간을효율적으로사용하는장점이있다. 프로퍼티 VARIABLE_COLUMN_IN_ROW_SIZE 를지정하지않은경우, 메모리테이블에대해서는데이타크기가 30 바이트이하이면, FIXED 영역에저장되며, 초과하면 VARIABLE 로인식된다. 디스크테이블에대해서는크기에관계없이 VARIABLE 로인식된다. VARCHAR 칼럼의크기는기본값으로 1 바이트이다. 최대길이는, 20 ALTIBASE5 SQL User s Manual
FIXED 로선언될경우한페이지크기 (8K) 내에서지정할수있으며, VARIABLE 로선언될경우 32KB 즉 32000 바이트까지저장할수있다. * VARCHAR 는값의길이가열의길이보다짧은경우, 데이타의실제길이만큼만저장하는가변길이데이타타입이다. 반면, CHAR 데이타타입의경우, 열의길이보다짧은값을넣으면, 값의오른쪽에서열끝까지공백으로채워진다. 예를들어, 열이 CHAR(10) 으로정의되었는데저장할데이타가 "magic" 이면, 이데이타는 " magic " 으로저장된다. 여기서 "_" 은공백을나타낸다. * VARCHAR 의데이타의크기가 30 이면실제메모리공간은 32 를차지한다. 다시말해, 실제차지하는메모리공간이 32 이하일경우 FIXED 로인식된다. IN ROW size 메모리테이블의경우사용자는 VARIABLE 지정시에 IN ROW 구문을이용해서 fixed 영역에들어갈데이타길이와 variable 영역에들어갈데이타길이를지정할수있다. 예를들어 VARCHAR(400) in row 200 으로설정된칼럼의경우, 데이타삽입시에길이가 200 바이트이하이면 fixed 영역에, 200 바이트를초과하면 variable 영역에저장된다. 특별한경우가아니면매번 IN ROW size 를지정할필요없이 VARIABLE_COLUMN_IN_ROW_SIZE 프로퍼티에디폴트 in row size 를지정하고개별선언문에서는생략할수있다. 해당프로퍼티에대한상세한은 Starting User s Manual 의알티베이스프로퍼티부분을참조한다. 자료형 21
NCHAR 흐름도 구문 NCHAR [(size)] [[FIXED ] VARIABLE ( IN ROW size ) ] 명시된길이즉, 문자의길이만큼고정길이를가지는문자형데이타타입이다. 명시된전체크기에비해입력값의크기가작을경우뒷부분에공백으로문자가채워진다. NCHAR 칼럼의문자하나당크기는내셔널캐릭터셋 (national character set) 이 UTF16 인경우에는고정길이 2 바이트이고 ( 가변길이없음 ), UTF8 인경우에는가변길이 3 바이트 ( 고정길이없음 ) 이다. UFT16 은한문자를고정으로 2 바이트를사용하는반면, UTF8 은 1~3 바이트까지저장된다. 최대길이는선언방식에따라다르다. FIXED 로선언될경우페이지크기 (8K) 내에서지정할수있으며, VARIABLE 로선언될경우 32KB 즉 32768 바이트까지저장할수있다. 22 ALTIBASE5 SQL User s Manual
NVARCHAR 흐름도 구문 NVARCHAR [(size)] [[FIXED ] VARIABLE ( IN ROW size ) ] 명시된길이내에서가변길이를가지는유니코드문자형데이타타입이다. NVARCHAR 칼럼의문자하나당크기는내셔널캐릭터셋이 UTF16 인경우에는고정길이 2 바이트이고 ( 가변길이없음 ), UTF8 인경우에는가변길이 3 바이트 ( 고정길이없음 ) 이다. UFT16 은한문자를고정으로 2 바이트를사용하는반면, UTF8 은 1~3 바이트까지저장된다. FIXED 로선언될경우명시된크기만큼저장소의크기가설정되며, VARIABLE 로선언될경우에는명시된크기내에서가변길이를갖는다. 나머지속성은 VARCHAR 와동일하므로, VARCHAR 타입을참조한다. 자료형 23
숫자형데이터타입 BIGINT 흐름도 BIGINT 구문 BIGINT 8 바이트크기의정수형데이터타입이다. C 의 long(64 bit) 이나 long long(32 bit) 과동일한데이터타입이다. -2^63 + 1(-9223372036854775807) 에서 2^63 1 (9223372036854775807) 사이의정수데이터 ( 전체숫자 ) 이다. * 최소값 (-9223372036854775808) 은널값으로사용된다. DECIMAL 흐름도 DECIMAL ( precision ), scale 구문 DECIMAL [(precision[, scale])] DECIMAL 은 NUMERIC 데이터타입과동일한데이터타입이다. 24 ALTIBASE5 SQL User s Manual
DOUBLE 흐름도 DOUBLE 구문 DOUBLE 8 바이트크기의부동소수점형이다. C 의 double 과동일한데이터타입이다. FLOAT 흐름도 FLOAT ( precision ) 구문 FLOAT [(precision)] -1E+120 에서 1E+120 까지의부동소수점숫자데이타다. Precision 은정밀도표시하기위해 FLOAT 숫자의가수를유효숫자표기법으로저장하는데사용되는비트수이다. Precision 의범위는 1 에서 38 까지이다. Precision 이생략되면기본값으로 38 이설정된다. INTEGER 흐름도 자료형 25
INTEGER 구문 INTEGER 4 바이트크기의정수형데이터타입이다. C 의 int 와동일한데이터타입이다. 정수값 -2,147,483,647 에서 2,147,483,647 까지의값을가질수있다. * -2,147,483,648 은널값으로사용된다. 26 ALTIBASE5 SQL User s Manual
NUMBER 흐름도 NUMBER ( precision ), scale 구문 NUMBER [(precision, scale)] NUMERIC type 의 alias 형이다. 단, precision 과 scale 이명시되지않으면 FLOAT 과동일하게취급된다. 자료형 27
NUMERIC 흐름도 NUMERIC ( precision ), scale 구문 NUMERIC [(precision, scale)] Precision 과 scale 을가지는숫자형데이터타입으로 precision 만큼의유효숫자와 scale 만큼의소수점이하정밀도를가지는고정소수점형이다. FLOAT 데이터타입이실수를표현하는형식인부동소수점형식인반면 NUMERIC 데이터타입은 precision 과 scale 이모두생략되면 precision 은 38, scale 은 0 인정수를표현하는형식인고정소수점으로사용된다. Precision 은 1 부터 38 까지의값을명시할수있다. Scale 은 -84 에서 126 까지의값을명시할수있다. Precision 이생략되면기본값으로 38 이설정된다. Scale 이생략되면기본값으로 0 이설정된다. 다음은각각의 NUMERIC 타입으로정의한후값이 1234567.89 일때의변환된값을나열한것이다. NUMERIC => 1234568 NUMERIC(9) => 1234568 NUMERIC(9, 2) => 1234567.89 NUMERIC(9, 1) => 1234567.9 NUMERIC(6) => precision 초과 NUMERIC(7, -2)=> 1234500 NUMERIC(7, 2) => precision 초과 28 ALTIBASE5 SQL User s Manual
REAL 흐름도 REAL 구문 REAL 4 바이트크기의부동소수점형이다. C 의 float 과동일한데이터타입이다. SMALLINT 흐름도 SMALLINT 구문 SMALLINT 2 바이트크기의정수형데이터타입이다. C 의 short 와동일한데이터타입이다. -2^15 + 1(-32,767) 에서 2^15-1(32,767) 사이의정수데이타다. * 최소값 (-32768) 은널값으로사용된다. 숫자형데이타형식 자료형 29
TO_CHAR 함수나 TO_NUMBER 등의데이타변환함수를사용할때숫자형데이타에대하여다음과같이형식을지정할수있다. 숫자데이타형식은하나이상의숫자표시인자로구성되며이장에서는각각의인자와관련된데이타형식의예를한다. 제한사항 예제, ( 쉼표 ) 지정한위치에쉼표를출력한다. 쉼표는여러번사용할수있다. 쉼표는숫자의끝이나마침표의오른쪽에올수없고, 숫자의맨앞자리에도쉼표를사용할수없다. isql> SELECT TO_CHAR (1234, '99,99') FROM dual; TO_CHAR (1234, '99,99') --------------------------- 12,34 1 row selected. isql> SELECT TO_NUMBER ( '12,34', '99,99') FROM dual; TO_NUMBER ( '12,34', '99,99') -------------------------------- 1234 1 row selected. 제한사항 예제. ( 마침표 ) 마침표를지정한위치에추가로반환한다. 한숫자내에서마침표는한번만사용할수있다. isql> SELECT TO_CHAR (1.234, '99.999') FROM dual; TO_CHAR (1.234, '99.999') ----------------------------- 1.234 1 row selected. isql> SELECT TO_NUMBER ( '1.234', '99.999') FROM dual; TO_NUMBER ( '1.234', '99.999') --------------------------------- 1.234 1 row selected. 예제 $ 숫자앞에 $ 기호를붙인다. isql> SELECT TO_CHAR (123, '$9999') FROM dual; 30 ALTIBASE5 SQL User s Manual
TO_CHAR (123, '$9999') -------------------------- $123 1 row selected. isql> SELECT TO_NUMBER ( '$0123', '09$99') FROM dual; TO_NUMBER ( '$0123', '09$99') -------------------------------- 123 1 row selected. 예제 0( 숫자 0) 정수부분의유효자리수가실제숫자의자리수보다많을경우실제숫자앞에 0 을채워서반환한다. 그외의특성은 9 와같다. isql> SELECT TO_CHAR (123, '0999') FROM dual; TO_CHAR (123, '0999') ------------------------- 0123 9( 숫자 9) 출력할숫자의자릿수를숫자 9 를이용해서표시한다. 실제숫자의자릿수보다 9 의개수가더많으면앞에공백문자를출력하여길이를맞추고, 정수부분의 9 의개수가실제숫자보다더적으면숫자의길이만큼 # 를출력한다. # 의개수는사용자가지정한형식에쓰인문자의개수 + 1( 부호문자 ) 이다. 9 사이에오는마침표는숫자의정수부분과소수부분을구분하여출력하게한다. 예제 첫번째인자에소수가있는데사용자가지정한형식에소수를표현하는부분이없거나, 더적으면반올림해서사용자가지정한형식의소수부분의길이에맞춘다. isql> SELECT TO_CHAR (123, '99999') FROM dual; TO_CHAR (123, '99999') -------------------------- 123 isql> SELECT TO_CHAR (123.55, '999') FROM dual; TO_CHAR (123.55, '999') --------------------------- 124 1 row selected. isql> SELECT TO_CHAR (123.4567, '999999') FROM dual; TO_CHAR (123.4567, '999999') -------------------------------- 123 자료형 31
1 row selected. isql> SELECT TO_CHAR (1234.578, '9999.99') FROM dual; TO_CHAR (1234.578, '9999.99') --------------------------------- 1234.58 1 row selected. isql> SELECT TO_CHAR (1234.578, '999.99999') FROM dual; TO_CHAR (1234.578, '999.99999') ----------------------------------- ########## 1 row selected. isql> SELECT TO_NUMBER ( '123', '99999') FROM dual; TO_NUMBER ( '123', '99999') ------------------------------ 123 1 row selected. isql> SELECT TO_NUMBER ( '1234.58', '9999.99') FROM dual; TO_NUMBER ( '1234.58', '9999.99') ------------------------------------ 1234.58 1 row selected. 예제 B 결과값이 0 일경우, 0 을공백 (Blank) 로반환한다. isql> SELECT TO_CHAR (0.4, 'B9') FROM T1; TO_CHAR (0.4, 'B9') ----------------------- 1 row selected. 제한사항예제 EEEE 입력받은숫자를지수표기법을이용하여표기한다. EEEE 는항상오른쪽끝에와야한다. 단 S, PR, MI 보다는왼쪽에오는것이가능하다. 쉼표와같이사용할수없다. TO_NUMBER 함수에서사용할수없다. MI isql> SELECT TO_CHAR (1234, '9.9EEEE') FROM dual; TO_CHAR (1234, '9.9EEEE') ----------------------------- 1.2E+03 1 row selected. 32 ALTIBASE5 SQL User s Manual
제한사항 예제 MI 를숫자표현형식의오른쪽끝에사용하면입력받은수가음수일경우마이너스 (-) 기호를숫자끝에붙여서반환한다. 양수일경우에는공백문자가들어간다. MI 는항상숫자형식표현의오른쪽끝에와야한다. S, PR 과같이사용할수없다. isql> SELECT TO_CHAR (-123, '999MI') FROM dual; TO_CHAR (-123, '999MI') --------------------------- 123-1 row selected. isql> SELECT TO_NUMBER ( '123-', '999MI') FROM dual; TO_NUMBER ( '123-', '999MI') ------------------------------- -123 1 row selected. 제한사항 예제 PR PR 를숫자표현형식의오른쪽끝에사용하면입력받은수가음수일경우마이너스기호 (-) 대신 < 숫자 > 형태로출력된다. PR 은항상숫자표현형식의오른쪽끝에와야한다. S, MI 와같이사용할수없다. isql> SELECT TO_CHAR (-123, '999PR') FROM dual; TO_CHAR (-123, '999PR') --------------------------- <123> 1 row selected. isql> SELECT TO_NUMBER ( '<123>', '999PR') FROM dual; TO_NUMBER ( '<123>', '999PR') -------------------------------- -123 1 row selected. 제한사항 RN 입력받은수를로마숫자로변환한다. 입력할수있는수는 1 부터 3999 까지이다. 숫자표현형식을소문자 rn 으로사용하면로마숫자가소문자로출력된다. 다른숫자형식과같이사용할수없다. TO_NUMBER 함수에서 자료형 33
예제제한사항예제 사용할수없다. S isql> SELECT TO_CHAR (14, 'RN') FROM dual; TO_CHAR (14, 'RN') ---------------------- XIV 1 row selected. 숫자표현형식의처음이나끝에와서입력받은수의기호에따라서마이너스 (-) 또는플러스 (+) 기호를붙인다. S 는숫자표현형식의맨앞이나맨뒤에만올수있다.MI, PR 과같이사용할수없다. isql> SELECT TO_CHAR (123, 'S999.99') FROM dual; TO_CHAR (123, 'S999.99') ---------------------------- +123.00 1 row selected. isql> SELECT TO_CHAR (-123, '999.99S') FROM dual; TO_CHAR (-123, '999.99S') ----------------------------- 123.00-1 row selected. isql> SELECT TO_NUMBER ( '+123', 'S999.99') FROM dual; TO_NUMBER ( '+123', 'S999.99') --------------------------------- 123 1 row selected. isql> SELECT TO_NUMBER ( '123.00-', '999.99S') FROM dual; TO_NUMBER ( '123.00-', '999.99S') ------------------------------------ -123 1 row selected. 제한사항 V V 다음에있는 9 의개수와 10 을곱하고그값을인자로받은숫자와곱한다. V 앞의 9 의개수는첫번째인자의유효숫자의개수를의미한다. 마침표와같이사용할수없다. TO_NUMBER 함수에서사용할수없다. 34 ALTIBASE5 SQL User s Manual
예제 isql> SELECT TO_CHAR (12, '99V99') FROM dual; TO_CHAR (12, '99V99') ------------------------- 1200 1 row selected. isql> SELECT TO_CHAR (1200, '99V99') FROM dual; TO_CHAR (1200, '99V99') --------------------------- ###### 1 row selected. isql> SELECT TO_CHAR (-123.456, '999V999EEEEMI') from dual; TO_CHAR (-123.456, '999V999EEEEMI') --------------------------------------- 1235E+02-1 row selected. 제한사항 예제 XXXX 입력받은수를 16 진수로변환한다. 만약정수가아니라면반올림하여 16 진수로변환한다. xxxx 는 16 진수중문자를소문자로반환한다. 다른숫자표현형식과같이사용할수없다. 변환할수는 0 이상이어야한다. isql> SELECT TO_CHAR (123, 'XXXX') FROM dual; TO_CHAR (123, 'XXXX') ------------------------- 7B 1 row selected. isql> SELECT TO_NUMBER ('ABC', 'XXXX') FROM dual; TO_NUMBER ('ABC', 'XXXX') ---------------------------- 2748 1 row selected. 자료형 35
날짜형데이타타입 DATE 흐름도 DATE 구문 DATE 날짜를표현하는데이터타입이다. 날짜관련함수의경우일부플랫폼에서 1 년 1 월 1 일부터 9999 년 12 월 31 일의범위내에서사용가능하다. 8 바이트의크기를가지며, 1999/11/18 00:00:00 또는 2000/01/31 15:23:50 과같이문자열로표현된다. 날짜형데이타형식 날짜형데이터타입의데이타는데이타베이스내부적으로는숫자형데이타로관리하지만사용자는 TO_CHAR/TO_DATE 변환함수등을사용해서문자열로표시할수있다. 변환함수를사용할때사용자는보고자하는형식에맞게날짜형데이타형식문자열을지정해주어야한다. 날짜형데이타형식은다음과같은기본요소들로구성된다. AM, PM CC D, DD, DDD, DAY,DY HH, HH12, HH24 MM, MON, MONTH MI Q SS, SSSSS, SSSSSS, SSSSSSSS, FF[1..6] WW, W 36 ALTIBASE5 SQL User s Manual
Y,YYY, YYYY, YY, RR, RRRR 위의기본요소들과함께다음의다음의구두점과특수문자들도날짜형데이타형식을구성하는요소이다. 하이픈 (-) 슬래시 (/) 쉼표 (,) 마침표 (.) 콜론 (:) 홑따옴표 ( ) 각각의기본요소들이의미하는바와활용예를다음에서살펴보자. 예제 AM, PM 정오를기준으로오전 / 오후를구분한다. ( AM 또는 PM ) isql> SELECT TO_CHAR ( TO_DATE( '13', 'HH' ), 'AM' ) FROM dual; TO_CHAR ( TO_DATE( '13', 'HH' ), 'AM' ) ------------------------------------------- PM 1 row selected. isql> SELECT TO_DATE('1980-12-28 PM', 'YYYY-MM-DD AM') FROM dual; TO_DATE('1980-12-28 PM', 'YYYY-MM-DD AM' ------------------------------------------- 1980/12/28 12:00:00 1 row selected. CC 세기를표시한다. 4 자리년도중뒤의 2 자리값이 01~99 이면, 4 자리년도중앞의두자리의값에 1 을더해서반환한다. 4 자리년도중뒤의 2 자리값이 00 이면, 4 자리년도중앞의두자리값을그대로반환한다. 예제 TO_DATE 함수에서는인자로사용할수없다. D isql> SELECT TO_CHAR ( '28-DEC-1980', 'CC' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'CC' ) ----------------------------------- 20 1 row selected. 자료형 37
일주일중몇번째날인지를나타내는 1 ~ 7 까지의숫자이다. 일요일부터 1 로시작한다. 예제 TO_DATE 함수에서인자로사용할수없다. DAY isql> SELECT TO_CHAR ( '28-DEC-1980', 'D' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'D' ) ---------------------------------- 1 1 row selected. 요일의영문이름을나타낸다. (SUNDAY, MONDAY, ) 예제 예제 TO_DATE 함수에서사용할수없다. DD isql> SELECT TO_CHAR ( '28-DEC-1980', 'DAY' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'DAY' ) ------------------------------------ SUNDAY 1 row selected. 한달중몇번째날인지를나타낸다. (1 ~ 31) isql> SELECT TO_CHAR ( '28-DEC-1980', 'DD' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'DD' ) ----------------------------------- 28 1 row selected. isql> SELECT TO_DATE( '1980-12-28', 'YYYY-MM-DD') FROM dual; TO_DATE( '1980-12-28', 'YYYY-MM-DD') --------------------------------------- 1980/12/28 00:00:00 1 row selected. DDD 일년중몇번째날인지를나타낸다. (1 ~ 366) 예제 TO_DATE 함수에서사용할수없다. isql> SELECT TO_CHAR ( '28-DEC-1980', 'DDD' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'DDD' ) ------------------------------------ 363 1 row selected. 38 ALTIBASE5 SQL User s Manual
DY 요일의이름을약자로나타낸다. (SUN, MON, TUE, ) 예제 TO_DATE 함수에서사용할수없다. isql> SELECT TO_CHAR ( '28-DEC-1980', 'DY' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'DY' ) ----------------------------------- SUN 1 row selected. FF [1..6] FF 다음의 1 ~ 6 까지의숫자를이용하여마이크로초의자리수를나타낸다. (0 ~ 999999). FF 형식은 FF6 과같은같은결과를반환한다. 예제 예제 TO_DATE 함수에서사용할수없다. HH12 isql> SELECT TO_CHAR ( SYSDATE, 'FF5' ) FROM dual; TO_CHAR ( SYSDATE, 'FF5' ) ------------------------------ 34528 1 row selected. 시간을 12 시간단위로나타낸다.(1 ~ 12) isql> SELECT TO_CHAR ( TO_DATE( '2008-12-28 17:30:29', 'YYYY- MM-DD HH:MI:SS' ), 'HH12' ) FROM dual; TO_CHAR ( TO_DATE( '2008-12-28 17:30:29', --------------------------------------------- 05 1 row selected. isql> SELECT TO_CHAR( TO_DATE ( '08-12-28 05:30:29', 'RR-MM-DD HH12:MI:SS' ), 'RR-MM-DD HH12:MI:SS') FROM dual; TO_CHAR( TO_DATE ( '08-12-28 05:30:29', 'R -------------------------------------------- 08-12-28 05:30:29 1 row selected. 예제 HH, HH24 시간을 24 시간단위로나타낸다.(0 ~ 23) 자료형 39
isql> SELECT TO_CHAR ( TO_DATE( '2008-12-28 17:30:29', 'YYYY- MM-DD HH:MI:SS' ), 'HH' ) FROM dual; TO_CHAR ( TO_DATE( '2008-12-28 17:30:29' -------------------------------------------- 17 1 row selected. isql> SELECT TO_CHAR ( TO_DATE( '2008-12-28 17:30:29', 'YYYY- MM-DD HH24:MI:SS' ), 'YYYY-MM-DD HH24:MI:SS' ) FROM dual; TO_CHAR ( TO_DATE( '2008-12-28 17:30:29', ------------------------------------------ 2008-12-28 17:30:29 1 row selected. 예제 MI 분 (0 ~ 59) isql> SELECT TO_CHAR ( TO_DATE( '1980-12-28 17:30:29', 'YYYY- MM-DD HH:MI:SS' ), 'HH' ) FROM dual; TO_CHAR ( TO_DATE( '1980-12-28 17:30:29' -------------------------------------------- 17 1 row selected. isql> SELECT TO_DATE ( '05-12-28 14:30:29', 'RR-MM-DD HH:MI:SS' ) FROM dual; TO_DATE ( '05-12-28 14:30:29', 'RR-MM-DD ------------------------------------------- 2005/12/28 14:30:29 1 row selected. 예제 MM 월 (01 ~ 12) isql> SELECT TO_CHAR ( TO_DATE( '1980-12-28 17:30:29', 'YYYY- MM-DD HH:MI:SS' ), 'HH' ) FROM dual; TO_CHAR ( TO_DATE( '1980-12-28 17:30:29' -------------------------------------------- 17 1 row selected. isql> SELECT TO_DATE ( '05-12-28 14:30:29', 'RR-MM-DD HH:MI:SS' ) FROM dual; TO_DATE ( '05-12-28 14:30:29', 'RR-MM-DD ------------------------------------------- 2005/12/28 14:30:29 1 row selected. MON 월의이름을약자로표시한다.( JAN, FEB, MAR, ) 40 ALTIBASE5 SQL User s Manual
예제 예제 SQL> SELECT TO_CHAR (TO_DATE ('1995-12-05', 'YYYY-MM-DD'), 'MON') FROM dual; TO_ --- DEC MONTH 월의이름을표시한다. (JANUARY, FEBRUARY, ) isql> SELECT TO_CHAR ( '28-DEC-1980', 'Month' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'Month' ) -------------------------------------- December 1 row selected. isql> SELECT TO_DATE ( '05-APRIL-28 14:30:29', 'RR-MONTH-DD HH:MI:SS' ) FROM dual; TO_DATE ( '05-APRIL-28 14:30:29', 'RR-MO ------------------------------------------- 2005/04/28 14:30:29 1 row selected. 자료형 41
Q 분기를표시한다. (1 ~ 4) 예제 예제 TO_DATE 함수에서사용할수없다. RM isql> SELECT TO_CHAR ( '28-DEC-1980', 'Q' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'Q' ) ---------------------------------- 4 1 row selected. 로마숫자로월을나타낸다. (I, II, III, IV,... ) isql> SELECT TO_CHAR ( '28-DEC-1980', 'RM' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'RM' ) ----------------------------------- XII 1 row selected. isql> SELECT TO_DATE ('28-V-1980', 'DD-RM-YYYY') FROM dual; TO_DATE ('28-V-1980', 'DD-RM-YYYY') -------------------------------------- 1980/05/28 00:00:00 1 row selected. 예제 RR 년도를두자리정수로표시한다. 날짜를표기할때, 두자리만표기한경우 50 미만인경우에만 21 세기라고가정하여 2000 을더하고, 50 이상인경우에는 1900 을더해서연도를표시한다. 따라서표시가능한년도는 1950 ~ 2049 까지이다. isql> SELECT TO_CHAR ( '28-DEC-80', 'RR' ) FROM dual; TO_CHAR ( '28-DEC-80', 'RR' ) --------------------------------- 80 1 row selected. RRRR isql> SELECT TO_DATE ( '28-DEC-80', 'DD-MON-RR' ) FROM dual; TO_DATE ( '28-DEC-80', 'DD-MON-RR' ) --------------------------------------- 1980/12/28 00:00:00 1 row selected. 42 ALTIBASE5 SQL User s Manual
연도 (0 ~ 9999) 예제 네자리, 두자리의년도를모두입력으로받아서, 숫자가 50 미만인경우 2000 을더하고, 50 이상 100 미만인경우 1900 을더해서연도를나타낸다. 4 자리의숫자인경우그대로가년도로표시된다. isql> SELECT TO_CHAR ( '28-DEC-1980', 'RRRR' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'RRRR' ) ------------------------------------- 1980 1 row selected. isql> SELECT TO_CHAR ( '28-DEC-1980', 'DD-MON-RRRR' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'DD-MON-RRRR' ) -------------------------------------------- 28-DEC-1980 1 row selected. 예제 SS 초 (0 ~ 59) isql> SELECT TO_CHAR ( TO_DATE( '1980-12-28 17:30:29', 'YYYY- MM-DD HH:MI:SS' ), 'HH' ) FROM dual; TO_CHAR ( TO_DATE( '1980-12-28 17:30:29' -------------------------------------------- 17 1 row selected. isql> SELECT TO_DATE ( '05-12-28 14:30:29', 'RR-MM-DD HH:MI:SS' ) FROM dual; TO_DATE ( '05-12-28 14:30:29', 'RR-MM-DD ------------------------------------------- 2005/12/28 14:30:29 1 row selected. 예제 SSSSS 지난자정부터몇초가경과되었는지나타낸다. (0 ~ 86399) isql> SELECT TO_CHAR ( TO_DATE( '1980-12-28 17:30:29', 'YYYY- MM-DD HH24:MI:SS' ), 'SSSSS' ) FROM dual; TO_CHAR ( TO_DATE( '1980-12-28 17:30:29' -------------------------------------------- 62940 1 row selected. isql> SELECT TO_DATE('1980-12-28 12345', 'YYYY-MM-DD SSSSS') FROM dual; TO_DATE('1980-12-28 12345', 'YYYY-MM-DD 자료형 43
------------------------------------------- 1980/12/28 03:25:45 1 row selected. 예제 SSSSSS 날짜데이터타입의값의마이크로초를표시한다.(0 ~ 999999) isql> SELECT TO_CHAR (SYSDATE, 'SSSSSS') FROM dual; TO_CHAR (SYSDATE, 'SSSSSS') ------------------------------- 490927 1 row selected. isql> SELECT TO_CHAR ( TO_DATE('1980-12-28 123456', 'YYYY-MM- DD SSSSSS'), 'SSSSSS' ) FROM dual; TO_CHAR ( TO_DATE('1980-12-28 123456', ' -------------------------------------------- 123456 1 row selected. 예제 SSSSSSSS 초 + 마이크로초를나타낸다. 앞의 2 개의숫자는초를나타내고, 나머지 6 개의숫자가마이크로초를나타낸다. (0 ~ 59999999) isql> SELECT TO_CHAR (SYSDATE, 'SSSSSSSS') FROM dual; TO_CHAR (SYSDATE, 'SSSSSSSS') --------------------------------- 48987403 1 row selected. isql> SELECT TO_DATE ( '12.345678', 'SS.SSSSSS') FROM dual; TO_DATE ( '12.345678', 'SS.SSSSSS') -------------------------------------- 2005/12/01 00:00:12 1 row selected. isql> SELECT TO_CHAR( TO_DATE( '12.345678', 'SS.SSSSSS'), 'SSSSSS') FROM dual; TO_CHAR( TO_DATE( '12.345678', 'SS.SSSSS -------------------------------------------- 345678 1 row selected. WW 일년중몇번째주인지를나타낸다. 1 월 1 일부터그주의토요일까지가그해의첫번째주이다. (1 ~ 54) TO_DATE 함수에서사용할수없다. 44 ALTIBASE5 SQL User s Manual
예제 isql> SELECT TO_CHAR ( '28-DEC-1980', 'WW' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'WW' ) ----------------------------------- 53 1 row selected. W 한달중몇번째주인지를나타낸다. 1 일부터그주의토요일까지가그달의첫번째주이다. (1 ~ 6) 예제 TO_DATE 함수에서사용할수없다. Y,YYY isql> SELECT TO_CHAR ( '28-DEC-1980', 'W' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'W' ) ---------------------------------- 5 1 row selected. 연도를나타내는숫자중임의의위치에,(comma) 를삽입할수있다. 맨앞이나뒤에와도상관없다. 예제 예제 TO_DATE 함수에서사용할수없다. YYYY isql> SELECT TO_CHAR ( '28-DEC-1980', 'Y,YYY' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'Y,YYY' ) -------------------------------------- 1,980 1 row selected. 네자리숫자를그대로연도로간주한다. (0 ~ 9999) isql> SELECT TO_CHAR ( '28-DEC-1980', 'YYYY' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'YYYY' ) ------------------------------------- 1980 1 row selected. isql> SELECT TO_DATE ( '28-DEC-1980', 'DD-MON-YYYY' ) FROM dual; TO_DATE ( '28-DEC-1980', 'DD-MON-YYYY' ) ------------------------------------------- 1980/12/28 00:00:00 1 row selected. YY 자료형 45
예제 21 세기라고가정하고 2000 을더한값을연도로간주한다. (2000 ~ 2099) isql> SELECT TO_CHAR ( '28-DEC-1980', 'YY' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'YY' ) ----------------------------------- 80 1 row selected. isql> SELECT TO_DATE ( '28-DEC-80', 'DD-MON-YY' ) FROM dual; TO_DATE ( '28-DEC-80', 'DD-MON-YY' ) --------------------------------------- 2080/12/28 00:00:00 1 row selected. * YYYY, YY, RRRR, RR 참고 [YYYY]: 숫자를그대로연도로간주 23-FEB-5 : 0005 년 2 월 23 일 23-FEB-05 : 0005 년 2 월 23 일 23-FEB-2005 : 2005 년 2 월 23 일 23-FEB-95 : 0095 년 2 월 23 일 [YY]: 2000 + YY 23-FEB-5 : 2005 년 2 월 23 일 23-FEB-05 : 2005 년 2 월 23 일 23-FEB-2005 : 에러 23-FEB-95 : 2095 년 2 월 23 일 23-FEB-05 : 2005 년 2 월 23 일 23-FEB-2005 : 에러 23-FEB-95 : 2095 년 2 월 23 일 [RRRR]: 4 자리숫자를그대로연도로간주, 숫자가 50 미만인경우 2000 을, 50 이상 100 미만인경우 1900 을더한다. 23-FEB-5 : 2005 년 2 월 23 일 23-FEB-05 : 2005 년 2 월 23 일 23-FEB-2005 : 2005 년 2 월 23 일 23-FEB-95 : 1995 년 2 월 23 일 46 ALTIBASE5 SQL User s Manual
23-FEB-100 : 0100 년 2 월 23 일 23-FEB-0005 : 0005 년 2 월 23 일 [RR]: 숫자가 50 미만인경우 2000 을, 50 이상 100 미만인경우 1900 을더한다. 23-FEB-5 23-FEB-05 : 2005 년 2 월 23 일 : 2005 년 2 월 23 일 23-FEB-2005 : 에러 23-FEB-95 : 1995 년 2 월 23 일 예제 isql> CREATE TABLE timetbl(i1 INTEGER, t1 DATE, etc VARCHAR(10)); Create success. isql> INSERT INTO timetbl VALUES (1, SYSDATE, 'Start'); 1 row inserted. isql> INSERT INTO timetbl VALUES (2, TO_DATE('2003-02-20 12:15:50', 'YYYY-MM-DD HH:MI:SS'), 'The end'); 1 row inserted. isql> SELECT TO_CHAR(T1, 'YYYY YY MM MON Mon mon DD HH MI SS SSSSSS D DDD') Date_format FROM timetbl WHERE I1 = 2; DATE_FORMAT ------------------------------------------------ 2003 03 02 FEB Feb feb 20 12 15 50 000000 5 051 1 row selected. 자료형 47
이진데이터타입 BYTE 흐름도 BYTE ( size ) 구문 BYTE [(size)] [[FIXED ] VARIABLE ( IN ROW size ) ] 명시된크기만큼고정된길이를가지는이진데이터타입이다. BYTE 칼럼의크기는기본값으로 1 바이트이다. 최대길이는, FIXED 로선언될경우한페이지크기 (8K) 내에서지정할수있으며, VARIABLE 로선언될경우 32KB 즉 32768 바이트까지저장할수있다. 0FAE13 과같이문자형으로표현가능하며이때사용하는문자는 0 에서 9 까지, A 에서 F 까지의문자이다. 입력시와검색시반드시정의한길이를맞추어야한다. 1 바이트는 2 개의문자를입력할수있다. 예를들어 Byte (3) 이라고정의하면 000000 부터 FFFFFF 까지입력할수있다. * 소문자 a 부터 f 를입력할경우대문자로변환되어저장된다. * 최소값 (OxFF) 은널값으로사용된다. 48 ALTIBASE5 SQL User s Manual
NIBBLE 흐름도 NIBBLE ( size ) 구문 NIBBLE [(size)] 명시된크기만큼가변길이를가지는이진데이타타입이다. NIBBLE 칼럼의크기는기본값으로한개의문자크기이며, 최대 255 크기까지허용된다. BYTE 와마찬가지로문자형으로표현가능하며이때사용하는문자는 0 에서 9 까지, A 에서 F 까지의문자이다. BYTE 와달리명시된 size 만큼의문자만을입력할수있다. 예를들어 NIBBLE(6) 이라고정의하면 000000 부터 FFFFFF 까지입력할수있다. * 소문자 a 부터 f 를입력할경우대문자로변환되어저장된다. 자료형 49
BIT 흐름도 구문 BIT [(size)] 0 과 1 로만이루어진고정길이를갖는이진데이타타입이다. BIT 칼럼의크기는기본값으로 1BIT 이며, 최대길이는 60576 비트이다. 명시한길이보다긴스트링을입력했을경우 Invalid length of data type 에러가나타난다. 명시한길이보다짧은길이로입력했을때는오른쪽을 0 으로채운다. 0 또는 1 이외의값이입력될경우 Invalid literal 에러가나타난다. 예제 isql> CREATE TABLE T1 ( I1 BIT(1), I2 BIT(5) ); Create success. isql> INSERT INTO T1 VALUES ( BIT'1', BIT'011' ); 1 row inserted. isql> SELECT TO_CHAR(I1), TO_CHAR(I2) FROM T1; TO_CHAR(I1) TO_CHAR(I2) ----------------------------- 1 01100 1 row selected. isql> INSERT INTO T1 VALUES ( BIT'1111', BIT'011' ); [ERR-2100D : Invalid length of the data type] isql> INSERT INTO T1 VALUES ( BIT'1', BIT'1234' ); [ERR-21011 : Invalid literal] VARBIT 50 ALTIBASE5 SQL User s Manual
흐름도 구문 VARBIT [(size)] 0 과 1 로만이루어진가변길이를갖는이진데이타타입이다. BIT 칼럼의크기는기본값으로 1Bit 이며, 최대길이는 131070 비트 (128KBits) 이다. 명시한길이보다긴스트링을입력했을경우 Invalid length of data type 에러가발생한다. 명시한길이보다짧은스트링을입력했을경우오른쪽을 0 으로채운다. 0 또는 1 이외의값이입력될경우 Invalid literal 에러가발생한다. 예제 isql> CREATE TABLE T1 ( I1 VARBIT(1), I2 VARBIT(5) ); Create success. isql> INSERT INTO T1 VALUES ( VARBIT'1', VARBIT'011' ); 1 row inserted. isql> SELECT TO_CHAR(I1), TO_CHAR(I2) FROM T1; TO_CHAR(I1) TO_CHAR(I2) ----------------------------- 1 011 1 row selected. isql> INSERT INTO T1 VALUES ( VARBIT'1111', VARBIT'011' ); [ERR-2100D : Invalid length of the data type] isql> INSERT INTO T1 VALUES ( VARBIT'1', VARBIT'1234' ); [ERR-21011 : Invalid literal] 자료형 51
LOB 데이타타입 개요 LOB(Large Object) 은대용량데이타를저장할수있는데이타타입이다. LOB 으로저장이가능한데이타크기는최대 2G 이다. 테이블을생성할때다른타입들과달리길이를명시하지않는다. 그리고하나의테이블에하나이상의 LOB 타입칼럼을정의할수있다. LOB 데이타타입은이미지, 동영상파일들과같은이진데이타를저장하는 BLOB(Binary Large Object) 과문자열데이타를저장하는 CLOB(Character Large Object) 으로구분된다. LOB 의특징 데이타저장기능 부분읽기 (Partial Read) 디스크 LOB 의파티션 알티베이스가제공하는 LOB 은다음과같은특징이있다. 데이타저장기능 부분읽기 (Partial Read) 디스크 LOB 파티션 ODBC SQLPutLob 함수또는 JDBC File Stream 을이용하여 CLOB, BLOB 데이타를저장한다. LOB 데이타의특정구간에대한데이타조각을읽는기능이다. SQLGetLob 함수를이용하여특정오프셋의크기를읽는다. 디스크 LOB 데이타는테이블이속한테이블스페이스가아닌다른디스크테이블스페이스로저장이가능하며, 마치파티션을이용하는것처럼구성할수있다. LOB 칼럼의저장 LOB 데이타는대부분의경우레코드영역밖의가변영역에저장된다. 또한 LOB 칼럼의크기가크지않을때에는 in row 옵션을사용하여 52 ALTIBASE5 SQL User s Manual
레코드영역 ( 고정영역 ) 안에저장하기도한다. 그러나디스크테이블은크기와상관없이항상가변영역에저장한다. 그러나가변영역에저장되는 LOB 칼럼의데이타는크기가매우크기때문에, 레코드영역과같은테이블스페이스에저장되는것은공간사용측면에서효율성을떨어뜨린다. 디스크테이블은 LOB 칼럼데이타를 LOB 칼럼이속한테이블과별도의테이블스페이스에저장할수있다. 그러나메모리테이블은별도로저장할수없고테이블과동일한테이블스페이스에만저장할수있다. BLOB 흐름도 구문 BLOB [ VARIABLE ( IN ROW size ) ] BLOB 은이진형대용량데이타를저장하기위한것으로, 2GB 크기내에서가변길이를가지는이진형데이타타입이다. BLOB 은 FIXED VARIABLE 을명시할수있으나모두 VARIABLE 로처리되기때문에실제로의미가없다. 메모리테이블에저장된 BLOB 은데이타의크기가 64 바이트이하일경우, 테이블의고정영역에저장되며 64 바이트를초과하면가변영역에저장된다. VARIABLE_LOB_COLUMN_IN_ROW_SIZE 프로퍼티로고정영역에저장되는디폴트크기를명시할수있다. 메모리테이블에저장된 BLOB 데이타의크기가 64 바이트이하일경우혹은디스크테이블에저장된 BLOB 데이타의크기가 4000 바이트이하일경우, 해당데이터는테이블의고정영역에저장되며, 이크기를초과하면가변영역에저장된다. 메모리테이블은 MEMORY_LOB_COLUMN_IN_ROW_SIZE 프로퍼티로, 디스크테이블은 ISK_LOB_COLUMN_IN_ROW_SIZE 로고정영역에저장되는디폴트크기를명시할수있다. 자료형 53
IN ROW size BLOB 은 VARIABLE 지정시에 IN ROW 구문을이용해서고정데이타영역에들어갈데이타길이와가변영역에들어갈길이를지정할수있다. 예를들어, BLOB in row 200 으로설정된칼럼의경우, 삽입되는데이타길이가 200 바이트이하이면고정영역에, 200 바이트를초과하면가변영역에저장된다. 특별한경우가아니면매번 in row 크기를지정할필요없이메모리테이블의경우 MEMORY_LOB_COLUMN_IN_ROW_SIZE 프로퍼티에, 디스크테이블의경우 DISK_LOB_COLUMN_IN_ROW_SIZE 프로퍼티에디폴트 in row 크기를지정하고테이블생성시에는생략할수있다. 해당프로퍼티에대한상세한은 Starting User s Manual 의알티베이스프로퍼티부분을참조한다. CLOB 흐름도 구문 CLOB [ VARIABLE ( IN ROW size ) ] CLOB 은문자형대용량데이타를저장하기위한것으로, 2GB 크기내에서가변길이를가지는문자형데이타타입이다. CLOB 도 BLOB 이나 VARCHAR 타입처럼 FIXED VARIABLE 을명시할수있으나, 모두 VARIABLE 로처리되기때문에실제로는의미가없다. CLOB 은 BLOB 과마찬가지로메모리테이블은데이타의크기가 64 바이트이하일경우, 디스크테이블은데이타의크기가 4000 바이트이하일경우테이블의고정영역에저장되며이를초과하면가변영역에저장된다. 메모리테이블은 MEMOFY_LOB_COLUMN_IN_ROW_SIZE 프로퍼티로디스트테이블은 DISK_LOB_COLUMN_IN_ROW_SIZE 54 ALTIBASE5 SQL User s Manual
IN ROW size 프로퍼티로고정영역에저장되는디폴트크기를명시할수있다. CLOB 은 VARIABLE 지정시에 IN ROW 구문을이용해서고정데이타영역에들어갈데이타길이와가변영역에들어갈길이를지정할수있다. 이에대한세부내용은앞에서한 BLOB 과같으므로 BLOB 에대한내용을참고한다. 제한사항 저장프로시저또는트리거에서는 LOB 타입을사용할수없다. 커서에서 LOB 타입을사용할수없다. 휘발성테이블과디스크임시테이블스페이스에서는 LOB 타입을사용할수없다. 디스카드된테이블스페이스의 LOB 칼럼은사용이불가능하다. LOB 타입은파티션컬럼으로사용할수없다. 파티션컬럼은대소비교가가능해야한다. LOB 칼럼에는인덱스를생성할수없다. LOB 칼럼에는제약조건으로 NOT NULL 을추가할수없다. 만약 LOB 칼럼에 NOT NULL 을허용한다면, INSERT 시에제약조건을위배한다는에러가발생하며삽입되지않는다. 자료형 55
공간데이터타입 공간데이터타입을 SQL 형식으로정의할때현재지원되는타입은 Geomerty 한가지뿐이며, 이 Geometry 타입은내부적으로 7 개의하위데이터타입인 Point, LineString, Polygon, GeomCollection, MultiPolygon, MultiLineString, MultiPoint 이다. 공간데이터타입에관한자세한내용은 Spatial SQL User s Manual 을참조한다 56 ALTIBASE5 SQL User s Manual
Part Ⅱ PART II 57
58 ALTIBASE5 SQL User s Manual
3. 데이타정의어 이장에서는데이타베이스오브젝트를생성하기위해서사용하는 SQL 문장인 DDL 문장의문법과특징을사용예제를들어서상세하게하고있다. 데이터정의어 59
ALTER DATABASE 구문 alter_database ::= startup_clause ::= 60 ALTIBASE5 SQL User s Manual
rename_clause ::= create_clause ::= session_clause ::= archivelog_option ::= backup_clause ::= recover_clause ::= until_option ::= 데이터정의어 61
altilinker_clause ::= 전제조건 데이타베이스다단계구동에서서비스전단계에서만수행할수있는 SQL 문으로 SYS 사용자가 sysdba 관리자모드에서만수행할수있다. 단 SESSION CLOSE 구문인경우에는 sysdba 모드로접속하지않아도사용할수있다. database_name startup_clauses CONTROL 기존데이타베이스의정의를변경하는구문이다. 변경될데이타베이스이름을명시한다. 데이타베이스를 open 하여사용자들이접근사용할수있도록한다. 데이타베이스구동단계를 CONTROL 단계로변경한다. 데이타베이스다단계구동 (startup) 시 DB 미디어복구와이중화수행을할수있는단계이다. 또한, 테이블스페이스를 Discard 할수있는단계이다. 데이타베이스다단계구동단계에대한자세한은 Administrator s Manual 을참조한다. SERVICE META 다음단계를수행하기위해 ALTER DATABASE dababase_name META; 구문을수행해야한다. 데이타베이스구동단계를 SERVICE 단계로변경한다. 데이타베이스다단계구동시메모리 DB 와디스크 DB 에로딩을수행하고, 이중화또는 SNMP 등의확장서비스를모두구동할수있다. 이옵션을수행시모든복구가완료된후정상서비스를하는단계이다. 데이타베이스구동단계를 META 단계로변경한다. 데이타베이스 62 ALTIBASE5 SQL User s Manual
다단계구동할때메타를로딩하는단계이다. 다음단계를수행하기위해 ALTER DATABASE dababase_name SERVICE; 구문을수행한다. META UPGRADE 데이타베이스구동단계를 META UPGRADE 단계로변경한다. 데이타베이스다단계구동시메타를갱신하는단계로, 모든복구가완료된상태이다. 다음단계를수행하기위해 ALTER DATABASE dababase_name SERVICE; 구문을수행해야한다. META RESETLOGS 데이타베이스다단계 startup 시컨트롤단계에서불완전복구를한경우, 서버를정상구동하기위해필요한작업이다. 불완전복구로불필요한로그레코드들을초기화한다. 다음단계를수행하기위해 ALTER DATABASE dababase_name SERVICE; 구문을수행해야한다. META RESETUNDO SYS_TBS_DISK_UNDO 테이블스페이스를초기화한다. 그러나파일크기는재설정하지않는다. 단, 데이타베이스의무결성을디스크가비지콜레션이수행된것을확인하고, 서버를정상종료한이후에이구문을실행한다. SHUTDOWN NORMAL 서버에접속한모든클라이언트의연결이정상적으로해제될때까지대기한후서버를정상종료한다. SHUTDOWN IMMEDIATE 서버에접속된모든클라이언트의연결을강제로해제한후, 서버를정상종료한다. RENAME DATAFILE 본구문은디스크데이타파일위치를이동시켜야할때사용하는기능으로, 데이타베이스에속한데이터파일을새로운이름으로변경한다. 주의할점은 TO datafile_path 에는이동시킬데이터파일이존재해야하며서버구동 CONTROL 단계에서만가능하다. datafile_path 에데이타파일을생성할디렉토리의상대경로또는절대경로를지정한다. 상대경로의경우, $ALTIBASE_HOME/dbs/ 를기준으로한경로를지정한다. 참고로, 메모리테이블스페이스의체크포인트이미지파일을이동시킬때에는 ALTER TABLESPACE 구문을사용한다. 데이터정의어 63
CREATE DATAFILE 디스크데이타파일이유실되었을때, 로그앵커의정보를참고하여데이타파일을생성한다. 이구문을실행한후에는매체완전복구를수행하여데이타파일을복구한다. 본구문은서버구동 CONTROL 단계에서만가능하다. datafile_path 에데이타파일을생성할디렉토리의상대경로또는절대경로를입력한다. 상대경로의경우, $ALTIBASE_HOME/dbs/ 를기준으로한경로를지정한다. 참고로메모리테이블스페이스의체크포인트이미지파일생성은 ALTER TABLESPACE 구문을사용한다. CREATE CHECKPOINT IMAGE SESSION CLOSE 메모리체크포인트이미지파일이유실되었을때, 로그앵커의정보를참고하여체크포인트이미지파일을생성한다. 이구문을실행한후에는매체완전복구를수행하여메모리체크포인트이미지파일을복구한다. 체크포인트이미지파일은메모리테이블스페이스에정의된체크포인트경로에생성되므로, 경로를지정하지않고파일명만명시한다. 본구문은서버구동 CONTROL 단계에서만가능하다. < 질의 > MEM-TBS-1 이름의체크포인트이미지파일을다시생성한다. isql> ALTER DATABASE CREATE CHECKPOINT IMAGE 'MEM-TBS- 1'; 세션을강제로종료시킨다. SESSION CLOSE 다음에 session_id 을넣어주면된다. 이때에는 Transaction 이바로멈춰진다. * 참고 : 단계마다상태변화는위에서기술한순서대로가능하고, 단계서로간의 jump 가가능하다. shutdown normal(immediate) 은 SERVICE 단계에서만가능하고, 다른모드에서는 shutdown abort 만가능하다. 알티베이스구동단계에대해서는 Altibase Administrator Manual 을참조한다. archivelog_option 서버컨트롤단계에서데이타베이스모드를아카이브로그모드또는노아카이브로그모드로변경한다. BACKUP LOGANCHOR 데이타베이스를아카이브로그모드로운영할때, 서비스를중지하지 64 ALTIBASE5 SQL User s Manual
않은상태에서로그앵커를온라인백업한다. BACKUP TABLESPACE 데이타베이스를아카이브로그모드로운영할때, 서비스를중지하지않은상태에서지정된테이블스페이스를백업디렉토리에백업한다. BACKUP DATABASE 데이타베이스를아카이브로그모드로운영할때, 서비스를중지하지않은상태에서모든메모리테이블스페이스, 디스크테이블스페이스, 로그앵커가백업된다. RECOVER DATABASE 매체완전복구를한다. 아카이브로그디렉토리의로그파일을판독하여매체오류가발생한데이타파일들을현재시점의데이타파일로복구한다. RECOVER DATABASE UNTIL TIME 데이타가백업된시점부터그이후의특정과거시점까지에대한전체데이타베이스를복구한다. RECOVER DATABASE UNTIL CANCEL 데이타가백업된시점부터그이후의유효한로그파일또는로그레코드를포함한시점까지전체데이타베이스를복구한다. AltiLinker_clause LINKER START LINKER STOP 데이타베이스링크에서원격서버와의데이타교환을매개해주는 AltiLinker 프로세스를종료시키거나재시작한다. AltiLinker 프로세스를시작한다. 단, AltiLinker 가존재하지않아야한다. AltiLinker 프로세스를종료한다. 단, 종료실행시데이타베이스링크를사용하는트랜잭션이없어야한다. 데이타베이스링크를사용하는트랜잭션이존재하면, 이연산은실패한다. 예제 < 질의 > 다음은다단계 startup 시 SERVICE 단계를이용해서데이타베이스 mydb 가정상서비스수행이가능하도록하는구문이다. isql> ALTER DATABASE mydb SERVICE; < 질의 > 아카이브로그모드로데이타베이스를운영한다. 데이터정의어 65
isql> ALTER DATABASE ARCHIVELOG; < 질의 > 불완전복구된데이타베이스를정상구동시킨다. isql> ALTER DATABASE mydb META RESETLOGS; < 질의 > SYS_TBS_DISK_UNDO 테이블스페이스를초기화한다. isql> ALTER DATABASE mydb META RESETUNDO; < 질의 > SYS_TBS_DISK_DATA 테이블스페이스를 /altibase_backup 에백업한다. isql> ALTER DATABASE TABLESPACE SYS_TBS_DISK_DATA TO /altibase_backup/ ; < 질의 > 백업된시점부터 2008 년 2 월 16 일오후 12 시시점으로데이타베이스를복원한다. isql> ALTER DATABASE RECOVER DATABASE UNTIL TIME 2008-02-16:12:00:00 < 질의 > 백업된시점부터유실된로그파일 20001 번이전인로그파일 20000 번까지데이타베이스를복원한다. isql> ALTER DATABASE RECOVER DATABASE UNTIL CANCEL; < 질의 > 데이타베이스링크를위한 AltiLinker 를구동한다. isql> ALTER DATABASE LINKER START; < 질의 > AltiLinker 를종료한다. isql> ALTER DATABASE LINKER STOP; 66 ALTIBASE5 SQL User s Manual
ALTER INDEX 구문 alter_index ::= ALTER INDEX. ; RENAME TO AGING set_persistent_clause ::= rebuild_index_partition ::= index_attribute ::= alter_index_properties::= 데이터정의어 67
alter_index_segment_attribute_clause::= storage_clause::= allocate_extent_clause::= 전제조건 SYS 사용자이거나인덱스가현재사용자의스키마에속하거나또는 ALTER ANY INDEX 시스템권한을가진사용자만이인덱스를변경할수있다. 68 ALTIBASE5 SQL User s Manual
user_name 기존인덱스정의를변경한다. 변경될인덱스의소유자이름을명시한다. index_name 생략하면알티베이스는현재세션에연결된사용자의스키마에속한것으로간주한다. 변경될인덱스의이름을명시한다. SET PERSISTENT 절 PERSISTENT 색인을생성후 PERSISTENT 색인을변경하는문이다. 자세한내용은 CREATE INDEX 참고한다 rebuild_index_partition RENAME AGING index_attribute 지정한테이블스페이스에인덱스파티션을재구축한다. 변경될인덱스의이름을명시한다. 인덱스키에트랜잭션커밋 SCN 을설정하고, 구버전 (old version) 의노드들을삭제한다. 테이블스페이스명을명시한다. alter_index_segment_attribute_clause storage_clause INITRANS 절초기 TTS(Touched Transaction Slot) 의개수를변경한다. MAXTRANS 절초기 TTS 에서확장가능한최대 TTS(Touched Transaction Slot) 의개수를변경한다. 사용자가세그먼트에대한익스텐트관리파라미터를지정할수있는구문이다. 각파라미터의익스텐트크기는익스텐트크기의배수로지정되는것을기본으로하며, 익스텐트크기의배수가아닐경우에는알티베이스가내부적으로조정하여반영한다. 데이터정의어 69
allocate_extent_clause INITEXTENTS 절 ALTER INDEX 구문에서는 INITEXTENTS 파라미터를해석하지않고무시한다. NEXTEXTENTS 절세그먼트생성시다음익스텐트확장시마다확장할익스텐트개수를변경한다. MINEXTENTS 절세그먼트의최소익스텐트개수를변경한다. MAXEXTENTS 절세그먼트의포함할수있는익스텐트총개수를변경한다. 인덱스세그먼트에명시적으로익스텐트를할당한다. 이때 SIZE 의크기를지정하여인덱스세그먼트에추가적으로할당할수있는익스텐트크기를지정한다. 디스크테이블스페이스가여러데이터파일로구성되어있다면여러파일들에걸쳐서고르게할당된다. 주의사항 변경할인덱스가이중화테이블에걸려있는경우에는사용할수없다. 그러나 ALTER INDEX SET PERSISTENT = ON/OFF, ALTER INDEX REBUILD PARTITION 은사용할수있다. 예제 PERSISTENT 인덱스변경 인덱스파티션재구축 < 질의 > 인덱스 emp_idx1 에 PERSISTENT 인덱스를추가하라. isql> ALTER INDEX emp_idx1 SET PERSISTENT = ON; Alter success. < 질의 > 인덱스 const1 에 PERSISTENT 인덱스를추가하라. isql> ALTER INDEX const1 SET PERSISTENT = ON; 인덱스이름변경 < 질의 > 인덱스파티션 IDX_P5 를테이블스페이스 TBS1 에재구축하라. isql> ALTER INDEX IDX1 REBUILD PARTITION IDX_P5 TABLESPACE TBS1; < 질의 > 인덱스 emp_idx1 의이름을 emp_idx2 로변경하라. 70 ALTIBASE5 SQL User s Manual
인덱스에익스텐트할당 isql> ALTER INDEX emp_idx1 RENAME TO emp_idx2; < 질의 > 디스크테이블스페이스에 LOCAL_IDX 인덱스에 10M 만큼의익스텐트를할당한다. isql> ALTER INDEX felt_idx ALLOCATE EXTENT ( SIZE 10M ); Alter success. 데이터정의어 71
ALTER QUEUE 구문 alter_queue ::= COMPACT 큐에대한정의를변경한다. 데이터가없는빈페이지들에대하여테이블스페이스에페이지를반환한다. 알티베이스는콤팩션을수행할때, 데이터를옮기는작업을수행하지않는다. 이구문은메모리테이블과휘발성테이블, 큐 (Queue) 에대해서만지원한다. 72 ALTIBASE5 SQL User s Manual
ALTER REPLICATION 구문 이중화생성 (CREATE REPLICATION) 후이중화의동작을제어하는문장으로다음과같은종류가있다. 이중화에관한자세한내용은 Replication User s Manual 참조한다. replication_name 이중화이름을명시한다. 데이터정의어 73
SYNC SYNC ONLY 지역서버에있는이중화테이블들의모든데이타를원격서버의해당테이블로전송한후이중화를시작한다. 지역서버에있는이중화테이블들의모든데이타를원격서버의해당테이블로전송한다. 송신쓰레드는생성되지않는다. PARALLEL parallel_factor Parallel_factor 값은생략가능하며, 생략할경우 1 로인식된다. Parallel_factor 의최대값은 CPU 개수 * 2 이며, 최대값을초과하여설정해도최대값을넘지못한다. 0 또는음의값을설정한경우엔오류메시지가나타난다. TABLE user_name.table_name START QUICKSTART STOP ADD TABLE where_clause 지역서버이중화테이블중에서 SYNC 대상테이블을지정한다. 이중화시작시에는마지막이중화시점부터이중화를시작하며, TABLE 절을사용하지않았을때에는현재로그의위치부터이중화를시작한다. 가장최근의마지막이중화시점부터이중화를시작한다. 현재시점부터이중화를시작한다. 이중화를중지한다. 이중화할테이블을추가한다. 이중화가중지되어있는상태에서이중화할테이블을추가할수있다. SELECT 구문의 where_clause 를참고한다. DROP TABLE user_name 이중화조건절은 WHERE user_name.table_name.column_name {< > <> >= <= =!=} value [{AND OR}... ] 사용하여조건에해당하는로그만이중화대상으로한다. 단, 이중화조건절은 ADD TABLE 에서만사용할수있다. 이중화테이블을삭제한다. 이중화가중지되어있는상태에서이중화테이블을삭제할수있다. 74 ALTIBASE5 SQL User s Manual
tbl_name FLUSH SET HOST SET MODE 이중화테이블의소유자이름을명시한다. 이중화테이블이름을명시한다. 이중화 sender 쓰레드에의해서현재로그까지의변경내용이상대방서버에전송되도록 wait_time 초만큼기다린다. 만약, All 이함께사용되면현재로그가아닌가장최근로그까지의변경내용이상대방서버에전송되도록기다린다. 특정호스트를현재호스트로지정한다. 이중화를중지한상태에서호스트를변경할수있다. 이중화를생성할때지정한모드를변경한다. 모드변경은이중화가중지된상태에서수행할수있으며, LAZY, ACKED, EAGER 모드중하나의모드를지정할수있다. 주의사항 전제조건 입력 / 수정 / 삭제시충돌 (confliction) 이발생하면무시 (discard) 처리하고에러로그파일에남긴다. * 에러로그파일에제외되는경우 deadlock: 원격서버에서데드락으로인해이중화트랜잭션이롤백될경우에는에러로그를남기지않는다. network error: 이중화도중네트워크 (TCP/IP) 에러로인한데이타손실을막을수없다. 또한에러로그도남기지않는다. 이중화작업도중발생한에러에대해부분롤백한다. 즉여러개의자료입력중한개의중복데이타가있으면중복데이타만취소하고나머지는완료할수있다. 이중화속도는서비스속도보다매우느릴수있다. 알티베이스프로퍼티의 AUTO_REMOVE_ARCHIVE_LOG = 1 로세팅한경우라도완료되지않은이중화작업로그는로그파일에서삭제되지않는다. 만일 0 으로세팅할경우아래의 5 번은이중화작업에영향이없다. 현재이중화송신쓰레드가작업하는로그파일과현재로그파일의차이가알티베이스프로퍼티의최대로그파일개수 (REPLICATION_MAX_LOGFILE) 보다큰시점에체크포인트가발생하면이중화작업이완료되지않은로그파일도 데이터정의어 75
삭제되며, 이중화작업은이전의로그파일은무시하고현재로그파일부터다시시작한다. 데이타제약조건 복제되는테이블에대해반드시기본키가존재해야한다. 복제되는테이블에대해기본키에대한수정이없어야한다. 양쪽테이블의칼럼정보, 기본키, NOT NULL 정보가동일해야한다. 연결제약조건 최대이중화연결은하나의알티베이스데이타베이스에 32 개이다. 예제 이중화이름을 rep1 이라고가정하고이중화를시작하는질의는다음 3 가지중한가지를선택할수있다. < 질의 > 지역서버의데이타를원격서버로전송한후이중화를시작하라. isql> ALTER REPLICATION rep1 SYNC; Alter success. < 질의 > 가장최근의마지막 rep1 이중화시점부터 rep1 이중화를시작하라. isql> ALTER REPLICATION rep1 START; Alter success. < 질의 > 현재부터이중화를시작하라. isql> ALTER REPLICATION rep1 QUICKSTART; Alter success. 이중화이름을 rep1 이라고가정하고이중화테이블을삭제한다. < 질의 > 이중화테이블 employee 를삭제하라. isql> ALTER REPLICATION rep1 STOP; Alter success. isql> ALTER REPLICATION rep1 DROP TABLE FROM sys.employee TO sys.employee; Alter success. 이중화이름을 rep1 이라고가정하고이중화할테이블을추가한다. < 질의 > 이중화할테이블 employee 를추가하라. isql> ALTER REPLICATION rep1 STOP; Alter success. isql> ALTER REPLICATION rep1 ADD TABLE FROM sys.employee TO sys.employee; Alter success. 76 ALTIBASE5 SQL User s Manual
이중화이름을 rep1 이라고가정하고이중화를중지하는질의이다. < 질의 > 이중화를중지하라. isql> ALTER REPLICATION rep1 STOP; Alter success. 데이터정의어 77
ALTER SEQUENCE 구문 alter_sequence ::= 전제조건 SYS 사용자이거나시퀀스가사용자의스키마에속하거나시퀀스에대해 ALTER 객체접근권한을가지거나또는 ALTER ANY SEQUENCE 시스템권한을가진사용자만이시퀀스를변경할수있다. user_name 시퀀스생성 (CREATE SEQUENCE) 후시퀀스의정의를변경하는문으로메타내해당시퀀스의정의가변경된다. CREATE SEQUENCE 참고한다. 78 ALTIBASE5 SQL User s Manual
seq_name INCREMENT BY MAXVALUE MINVALUE CYCLE CACHE 변경될시퀀스의소유자이름을명시한다. 생략하면알티베이스는현재세션에연결된사용자의스키마에속한것으로간주한다. 변경될시퀀스이름을명시한다. 시퀀스값의증감분 시퀀스의최대값 시퀀스의최소값 시퀀스가 MAXVALUE 또는 MINVALUE 한계에도달하면해당시퀀스의추가값을할당하기위하여오름차순시퀀스인경우는 minimum value 를내림차순시퀀스인경우는 maximum value 를생성한다. 해당시퀀스값을더빠르게액세스하기위하여명시된값만큼시퀀스값들을메모리에캐시한다. 캐시는시퀀스를처음참조할때채워지며다음에시퀀스값을요청할때마다캐시된시퀀스에서검색된다. 마지막시퀀스를사용한이후의시퀀스요청은시퀀스의다른캐시를메모리로가져온다. 시퀀스생성시기본값은 20 이다. 주의사항 시퀀스정의변경의경우이미시퀀스생성이후이므로 START WITH 절을사용할수없다. 예제 * CREATE SEQUENCE 참조한다. < 질의 > 시퀀스 seq1 을최소값 0, 최대값 100 을가지고 1 씩증가하도록변경하라. isql> ALTER SEQUENCE seq1 INCREMENT BY 1 MINVALUE 0 MAXVALUE 100; Alter success. 데이터정의어 79