ALTIBASE Application Development SQL User s Manual Release 5.1.5
----------------------------------------------------------- ALTIBASE Application Development SQL User s Manual Release 5.1.5 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 숫자형데이터타입 22 날짜형데이타타입 35 이진데이터타입 48 LOB 데이타타입 52 공간데이터타입 56 Part Ⅱ 57 3. 데이타정의어 58 ALTER DATABASE 59 ALTER INDEX 65 ALTER REPLICATION 67 ALTER SEQUENCE 72 ALTER TABLE 75 ALTER TABLESPACE 91 ALTER TRIGGER 99 ALTER USER 101 ALTER VIEW 103 목차 I
CREATE DATABASE 105 CREATE DATABASE LINK 107 CREATE DIRECTORY 112 CREATE INDEX 114 CREATE QUEUE 122 CREATE REPLICATION 124 CREATE SEQUENCE 128 CREATE SYNONYM 136 CREATE TABLE 140 CREATE DISK TABLESPACE 140 CREATE MEMORY TABLESPACE 166 CREATE VOLATILE TABLESPACE 171 CREATE TEMPORARY TABLESPACE 175 CREATE TRIGGER 177 CREATE USER 184 CREATE VIEW 187 DROP DATABASE 191 DROP DATABASE LINK 193 DROP DIRECTORY 195 DROP INDEX 196 DROP QUEUE 197 DROP REPLICATION 198 DROP SEQUENCE 199 DROP SYNONYM 200 DROP TABLE 202 DROP TABLESPACE 204 DROP TRIGGER 207 DROP USER 208 DROP VIEW 210 GRANT 211 RENAME TABLE 227 REVOKE 229 TRUNCATE TABLE 233 4. 데이타조작어 235 II ALTIBASE5 SQL User s Manual
DELETE 236 INSERT 241 LOCK TABLE 245 SELECT 250 UPDATE 285 MOVE 291 ENQUEUE 294 DEQUEUE 295 5. 데이타제어어 297 ALTER SESSION 298 ALTER SYSTEM 301 COMMIT 303 SAVEPOINT 304 ROLLBACK 306 SET TRANSACTION 309 Part Ⅲ 313 6. 집합연산자 315 합집합 (UNION) 316 합집합 (UNION ALL) 317 교집합 318 차집합 319 우선순위규칙 320 7. 함수 323 함수의종류 324 그룹함수 325 숫자함수 329 문자함수 344 날짜함수 362 변환함수 372 기타함수 379 암호화함수 390 8. 산술연산자 395 목차 III
종류 396 단항연산자 397 사칙연산자 398 연결연산자 401 변환연산자 402 9. 조건연산자 403 종류 404 논리연산자 405 비교조건 408 단항비교 410 Part Ⅳ 419 A. 부록 : 스키마 421 예제테이블정보 422 E-R 다이어그램과샘플데이타 425 Altibase 객체들의최대값 432 찾아보기 433 IV ALTIBASE5 SQL User s Manual
서문 서문 i
이매뉴얼에대하여 이매뉴얼은데이타베이스에서사용되는 SQL(Structured Query Language) 의사용법에대해한다. 대상사용자 이매뉴얼은다음과같은알티베이스사용자를대상으로작성되었다. 데이터베이스관리자 성능관리자 데이터베이스사용자 응용프로그램개발자 기술지원부 다음과같은배경지식을가지고이매뉴얼을읽는것이좋다. 컴퓨터, 운영체제및운영체제유틸리티운용에필요한기본지식 관계형데이타베이스사용경험또는데이타베이스개념에대한이해 컴퓨터프로그래밍경험 데이타베이스서버관리, 운영체제관리또는네트워크관리경험 소프트웨어환경 이매뉴얼은데이타베이스서버로알티베이스버전 5.1.5 을사용한다는가정하에작성되었다. 이매뉴얼의구성 이매뉴얼은다음과같이구성되어있다. 제 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; iv ALTIBASE5 SQL User s Manual
. ENAME --------------------- --- SWNO HJNO HSCHOI... 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://adc.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 표준지원 강력한부연질의 (subquery) 기능지원 다양한시스템제공함수지원 알티베이스의경우대부분의질의들이 SQL 준비 (PREPARE) 과정후실행하기전시스템카탈로그정보가변하지않는점에착안해준비과정시점에최적화된실행계획트리 (execution plan tree) 를미리만들어두고여러번실행할수있도록하여실제질의실행시수행속도를대폭향상시켰다. 이와같은방법은초기데이타베이스스키마생성후데이타정의어 (DDL) 수행은거의일어나지않고데이타조작어 (DML) 작업이빈번한응용어플리케이션에매우유용하다. 알티베이스 SQL 은 SQL/92 표준사양을지원하므로기존 SQL 사용자들은별도의숙지없이알티베이스를쉽게사용할수있다. 일반적으로부연질의는수식의일부, IN, CREATE TABLE, INSERT 등에서주로사용된다. 여기에사용되는부연질의는대부분여러칼럼의여러레코드를검색해주는기능이다. 알티베이스의경우부연질의의결과가한레코드, 한칼럼일경우데이타가위치할수있는임의의위치에치환해사용할수있으며, 빠른검색속도의부연질의을지원하므로여러 SQL 문으로처리가능한질의문을한 SQL 문으로처리할수있다. 따라서복잡한응용어플리케이션에서유용하게사용가능하다. SQL/92 의표준사양이외에사용자가유용하게사용할수있는다양한시스템함수를지원한다. 4 ALTIBASE5 SQL User s Manual
SQL 의수행 알티베이스에서 SQL 문의처리과정은크게준비 (PREPARE) 과정과실행 (EXECUTE) 과정으로나뉘어진다. 준비과정은 SQL 문의문법을분석하여정당성을검사하고최적화한후실행계획을수립해실행계획트리 (execution plan tree) 를생성하는과정이다. 이과정에서메타테이블에접근해테이블정보, 인덱스정보등을읽고최적화된접근계획을수립한다. 따라서준비와실행이한번에이루어지지않고나뉘어져수행된다면준비후메타의변경사항이일어나지않아야준비 (PREPARE) 과정시에생성한실행계획트리를수정없이그대로사용할수있다. 예를들어, 준비과정시존재했던인덱스가실행과정에실제로존재하지않는다면준비과정시인덱스를사용하는환경에서최적화한실행계획트리는실행과정시무효한실행계획이되어사용할수없게된다. 실행과정은준비과정에서생성된실행계획에따라실제질의문을수행하는과정이다. 한 SQL 문이호스트변수를사용하여여러개의값으로변경하여여러번수행하는경우준비과정은한번수행되고변수값설정과실행과정은여러번수행된다. 주석 알티베이스는 SQL 문의임의의위치에다음두가지형식의주석을사용할수있다. /* */ C 언어에서사용한주석형식과동일한방식으로주석의시작에 /* 를명시하고주석의끝에 */ 를명시한다. 여러줄의주석을쓸수있다. -- - 를연이어두번명시하여한줄의주석을쓸때사용한다. 지원언어 다음은알티베이스가제공하는언어이다. US7ASCII: 영어 KO16KSC5601, MS949: 한국어 ZHT16BIG5: 대만어 알티베이스 SQL 소개 5
ZHS16CGB231280: 중국어 UTF8: 유니코드 SHIFT-JIS: 일본어 알티베이스에서지원하는언어를오류없이사용하기위해서버와클라이언트의문자집합설정이일치하여야한다. 문자집합에따라문자처리단위가달라지므로정확한처리를위해문자집합설정에주의가필요하다. 문자집합에관한자세한내용은 Starting User s Manual 의 NLS_USE 프로퍼티부분을참고한다. 알티베이스객체 (Object) 스키마객체 비스키마객체 알티베이스에서제공하는데이타베이스객체 (object) 는스키가객체와비스키마객체로나누어지고그종류는다음과같다. 제약조건 (constraint) 인덱스 (index) 시퀀스 (sequence) 시노님 (synonym) 테이블 (table) 저장프로시저 (stored procedure) 뷰 (view) 트리거 (trigger) 사용자 (user) 이중화 (replication) 테이블스페이스 (tablespace) 디렉토리 (directory) 객체이름생성규칙 객체이름 테이블, 뷰, 시퀀스, 시노님, 저장프로시저는동일한이름공간 (Name Space) 를가지므로같은이름의객체는존재할수없다. 그외에다른객체들은각각의이름공간을가진다. 알티베이스의객체들은한사용자이름내에서유일한이름을 6 ALTIBASE5 SQL User s Manual
사용해야한다. 따라서제약조건의이름도한테이블내에서유일한값이아니고한사용자내에서유일한이름이어야한다. 객체의이름은최대 40 바이트즉 40 자까지사용할수있으며, 영문의경우대문자와소문자를구별하지않는다. A-Z, a-z, 0-9, _, $ 만을사용할수있으며알티베이스의예약어는사용할수없다. 알티베이스의예약어는다음절을참고한다. 첫글자는반드시문자여야한다. 객체에대해서는 Administrator s Manual 을참고한다. 비밀번호 사용자가알티베이스에접속하기위해사용하는비밀번호역시객체이름과유사한제약조건을가진다. A-Z, a-z, 0-9, _, $ 만을사용할수있으며알티베이스의예약어는사용할수없다. 첫글자는반드시문자여야하고비밀번호의최대크기는운영체제에따라다르며 8~40 자사이이다. Solaris10, Window XP 의경우 40 자를지원한다. 예약어 다음단어들은알티베이스에서예약되어있는단어들로테이블, 칼럼, 사용자같은데이타베이스객체이름이나비밀번호로사용할수없다. 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 알티베이스 SQL 소개 7
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 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 데이타베이스정의변경 PERSISTENT 인덱스변경이중화의시작, 종료시퀀스의정의변경테이블의정의변경테이블스페이스정의변경트리거정의변경사용자의암호변경뷰재컴파일데이타베이스생성디렉토리생성인덱스생성큐생성이중화생성시퀀스생성시노님생성테이블생성테이블스페이스생성트리거생성사용자생성뷰생성디렉토리삭제인덱스삭제이중화삭제시퀀스삭제시노님삭제테이블삭제테이블스페이스삭제트리거삭제사용자삭제뷰삭제 알티베이스 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 작업의설정사항변경 한개의작업설정사항을변경하는것으로현재작업에만적용된다. 주의 ) 현재동작중인트랜잭션이없어야한다. 트랜잭션제어문 COMMIT SQL 문 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 ~ 65535 length + 2 VARCHAR 1 ~ 65535 length + 2 숫자형데이타형 Nonnative Native 타입 Precision Scale Size (bytes) 비고 NUMERIC 38 0 3+((precision NUMERIC(p) 1 ~ 38 0 )+2)/2 NUMERIC(p,s) 1 ~ 38-84 ~ 128 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 FLOAT(p) 1 ~ 38 X * 고정소수점 *DECIMAL 은 NUMERIC 과동일한데이터타입이다. * 부동소수점 타입호환 C Type Size (bytes) 비고 DOUBLE double 8 * 실수형부동 REAL float 4 소수점 BIGINT long or long long INTEGER int 4 SMALLINT short 2 8 * 정수형 날짜데이타형 타입 Size (byte) DATE 8 14 ALTIBASE5 SQL User s Manual
이진데이타형 타입 Length Size (byte) BLOB/CLOB 1~2147483647 BYTE 1~65533 length + 2 NIBBLE 1~255 length/2 + 1 BIT 1~60576 length/8 + 4 VARBIT 1~131070 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) 와동일 자료형 15
- DECIMAL(p,s) : NUMERIC(p,s) 와동일 - NUMBER(p) : NUMERIC(p) 와동일 - 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 c l o b 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 l l i n t char o o o o o o o o o o o o varchar clob o o o o o o o o o o o o o o bigint o o o o o o o o o o o decimal o o o o o o o o o o o double o o o o o o o o o o o float o o o o o o o o o o o integer o o o o o o o o o o o number o o o o o o o o o o o numeric o o o o o o o o o o o real o o o o o o o o o o o smallint o o o o o o o o o o o date o o o blob byte nibble bit 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 데이타형식변환 구문 datatype ' 문자또는상수 literal ' 상수테이터가가지는데이터타입을명시적으로다른데이터타입으로변환한다. 예를들어, 다음은 157.27 의숫자값을 '157.27' 의문자열로변환한다. 자료형 17
CHAR '157.27' 18 ALTIBASE5 SQL User s Manual
문자형데이터타입 CHAR 흐름도 CHAR ( size ) FIXED variable_clause variable_clause ::= VARIABLE IN ROW size 구문 CHAR [(size)] [[FIXED ] VARIABLE ( IN ROW size ) ] 명시된크기 (size) 만큼고정길이를가지는문자형데이타타입이다. 명시된전체크기에비해입력값의크기가작을경우뒷부분에공백으로문자가채워진다. CHAR 칼럼의크기는기본값으로 1 바이트이며, 최대길이는선언방식에따라다르다. FIXED 로선언될경우페이지크기 (8K) 내에서지정할수있으며, VARIABLE 로선언될경우 32KB 즉 32768 바이트까지저장할수있다. 자료형 19
VARCHAR 흐름도 VARCHAR ( size ) FIXED variable_clause variable_clause ::= VARIABLE IN ROW size 구문 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 로인식된다. 디스크 20 ALTIBASE5 SQL User s Manual
테이블에대해서는크기에관계없이 VARIABLE 로인식된다. VARCHAR 칼럼의크기는기본값으로 1 바이트이다. 최대길이는, FIXED 로선언될경우한페이지크기 (8K) 내에서지정할수있으며, VARIABLE 로선언될경우 32KB 즉 32768 바이트까지저장할수있다. * 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
숫자형데이터타입 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])] 22 ALTIBASE5 SQL User s Manual
DECIMAL 은 NUMERIC 데이터타입과동일한데이터타입이다. DOUBLE 흐름도 DOUBLE 구문 DOUBLE 8 바이트크기의부동소수점형이다. C 의 double 과동일한데이터타입이다. FLOAT 흐름도 FLOAT ( precision ) 구문 FLOAT [(precision)] 자료형 23
-1E+120 에서 1E+120 까지의부동소수점숫자데이타다. Precision 은정밀도표시하기위해 FLOAT 숫자의가수를유효숫자표기법으로저장하는데사용되는비트수이다. Precision 의범위는 1 에서 38 까지이다. Precision 이생략되면기본값으로 38 이설정된다. INTEGER 흐름도 INTEGER 구문 INTEGER 4 바이트크기의정수형데이터타입이다. C 의 int 와동일한데이터타입이다. 정수값 -2,147,483,647 에서 2,147,483,647 까지의값을가질수있다. * -2,147,483,648 은널값으로사용된다. 24 ALTIBASE5 SQL User s Manual
NUMBER 흐름도 NUMBER ( precision ), scale 구문 NUMBER [(precision, scale)] NUMERIC type 의 alias 형이다. 단, precision 과 scale 이명시되지않으면 FLOAT 과동일하게취급된다. 자료형 25
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 초과 26 ALTIBASE5 SQL User s Manual
REAL 흐름도 REAL 구문 REAL 4 바이트크기의부동소수점형이다. C 의 float 과동일한데이터타입이다. SMALLINT 흐름도 SMALLINT 구문 SMALLINT 2 바이트크기의정수형데이터타입이다. C 의 short 와동일한데이터타입이다. 자료형 27
-2^15 + 1(-32,767) 에서 2^15-1(32,767) 사이의정수데이타다. * 최소값 (-32768) 은널값으로사용된다. 숫자형데이타형식 제한사항 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; 28 ALTIBASE5 SQL User s Manual
TO_NUMBER ( '1.234', '99.999') --------------------------------- 1.234 1 row selected. $ 숫자앞에 $ 기호를붙인다. 예제 isql> SELECT TO_CHAR (123, '$9999') FROM dual; 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 사이에오는마침표는숫자의정수부분과소수부분을구분하여출력하게한다. 첫번째인자에소수가있는데사용자가지정한형식에소수를표현하는부분이없거나, 더적으면반올림해서사용자가지정한형식의소수부분의길이에맞춘다. 자료형 29
예제 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 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. 30 ALTIBASE5 SQL User s Manual
EEEE 입력받은숫자를지수표기법을이용하여표기한다. 제한사항 EEEE 는항상오른쪽끝에와야한다. 단 S, PR, MI 보다는왼쪽에오는것이가능하다. 쉼표와같이사용할수없다. TO_NUMBER 함수에서사용할수없다. 예제 isql> SELECT TO_CHAR (1234, '9.9EEEE') FROM dual; TO_CHAR (1234, '9.9EEEE') ----------------------------- 1.2E+03 1 row selected. MI 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 은항상숫자표현형식의오른쪽끝에와야한다. 자료형 31
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 함수에서사용할수없다. 예제 isql> SELECT TO_CHAR (14, 'RN') FROM dual; TO_CHAR (14, 'RN') ---------------------- XIV 1 row selected. S 숫자표현형식의처음이나끝에와서입력받은수의기호에따라서마이너스 (-) 또는플러스 (+) 기호를붙인다. 제한사항 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; 32 ALTIBASE5 SQL User s Manual
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 함수에서사용할수없다. 예제 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 진수로변환한다. 만약정수가아니라면 자료형 33
반올림하여 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. 34 ALTIBASE5 SQL User s Manual
날짜형데이타타입 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 자료형 35
MI Q SS, SSSSS, SSSSSS, SSSSSSSS, FF[1..6] WW, W 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 함수에서는인자로사용할수없다. 예제 isql> SELECT TO_CHAR ( '28-DEC-1980', 'CC' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'CC' ) 36 ALTIBASE5 SQL User s Manual
----------------------------------- 20 1 row selected. D 일주일중몇번째날인지를나타내는 1 ~ 7 까지의숫자이다. 일요일부터 1 로시작한다. TO_DATE 함수에서인자로사용할수없다. 예제 isql> SELECT TO_CHAR ( '28-DEC-1980', 'D' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'D' ) ---------------------------------- 1 1 row selected. DAY 요일의영문이름을나타낸다. (SUNDAY, MONDAY, ) TO_DATE 함수에서사용할수없다. 예제 isql> SELECT TO_CHAR ( '28-DEC-1980', 'DAY' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'DAY' ) ------------------------------------ SUNDAY 1 row selected. DD 한달중몇번째날인지를나타낸다. (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 자료형 37
일년중몇번째날인지를나타낸다. (1 ~ 366) TO_DATE 함수에서사용할수없다. 예제 isql> SELECT TO_CHAR ( '28-DEC-1980', 'DDD' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'DDD' ) ------------------------------------ 363 1 row selected. 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 함수에서사용할수없다. 예제 isql> SELECT TO_CHAR ( SYSDATE, 'FF5' ) FROM dual; TO_CHAR ( SYSDATE, 'FF5' ) ------------------------------ 34528 1 row selected. HH12 시간을 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', --------------------------------------------- 38 ALTIBASE5 SQL User s Manual
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) 예제 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 자료형 39
월 (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, ) 예제 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. 40 ALTIBASE5 SQL User s Manual
Q 분기를표시한다. (1 ~ 4) TO_DATE 함수에서사용할수없다. 예제 isql> SELECT TO_CHAR ( '28-DEC-1980', 'Q' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'Q' ) ---------------------------------- 4 1 row selected. RM 로마숫자로월을나타낸다. (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. isql> SELECT TO_DATE ( '28-DEC-80', 'DD-MON-RR' ) FROM dual; TO_DATE ( '28-DEC-80', 'DD-MON-RR' ) --------------------------------------- 자료형 41
RRRR 1980/12/28 00:00:00 1 row selected. 연도 (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) 예제 42 ALTIBASE5 SQL User s Manual
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 ------------------------------------------- 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. 자료형 43
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 함수에서사용할수없다. 예제 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 함수에서사용할수없다. 예제 isql> SELECT TO_CHAR ( '28-DEC-1980', 'W' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'W' ) ---------------------------------- 5 1 row selected. Y,YYY 연도를나타내는숫자중임의의위치에,(comma) 를삽입할수있다. 맨앞이나뒤에와도상관없다. TO_DATE 함수에서사용할수없다. 예제 isql> SELECT TO_CHAR ( '28-DEC-1980', 'Y,YYY' ) FROM dual; TO_CHAR ( '28-DEC-1980', 'Y,YYY' ) -------------------------------------- 1,980 1 row selected. 44 ALTIBASE5 SQL User s Manual
YYYY 네자리숫자를그대로연도로간주한다. (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 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 일 자료형 45
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 일 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 46 ALTIBASE5 SQL User s Manual
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 ) 구문 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] 50 ALTIBASE5 SQL User s Manual
VARBIT 흐름도 구문 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 의특징 데이타저장기능 알티베이스가제공하는 LOB 은다음과같은특징이있다. 데이타저장기능 부분읽기 (Partial Read) 부분갱신 (Partial Update) 디스크 LOB 파티션 부분읽기 (Partial Read) ODBC SQLPutLob 함수또는 JDBC File Stream 을이용하여 CLOB, BLOB 데이타를저장한다. 부분갱신 (Partial Update) LOB 데이타의특정구간에대한데이타조각을읽는기능이다. SQLGetLob 함수를이용하여특정오프셋의크기를읽는다. 디스크 LOB 의파티션 LOB 데이타의특정구간에대한특정크기데이타를다른데이타로갱신 (replace) 시킨다. 52 ALTIBASE5 SQL User s Manual
디스크 LOB 데이타는테이블이속한테이블스페이스가아닌다른디스크테이블스페이스로저장이가능하며, 마치파티션을이용하는것처럼구성할수있다. LOB 칼럼의저장 메모리테이블의 LOB 데이타는대부분의경우레코드영역밖의가변영역에저장된다. 또한 LOB 칼럼의크기가크지않을때에는 in row 옵션을사용하여레코드영역 ( 고정영역 ) 안에저장하기도한다. 그러나디스크테이블은크기와상관없이항상가변영역에저장한다. 그러나가변영역에저장되는 LOB 칼럼의데이타는크기가매우크기때문에, 레코드영역과같은테이블스페이스에저장되는것은공간사용측면에서효율성을떨어뜨린다. 디스크테이블은 LOB 칼럼데이타를 LOB 칼럼이속한테이블과별도의테이블스페이스에저장할수있다. 그러나메모리테이블은별도로저장할수없고테이블과동일한테이블스페이스에만저장할수있다. BLOB 흐름도 BLOB VARIABLE IN ROW size 구문 BLOB [ VARIABLE ( IN ROW size ) ] BLOB 은이진형대용량데이타를저장하기위한것으로, 2GB 크기내에서가변길이를가지는이진형데이타타입이다. BLOB 은 FIXED VARIABLE 을명시할수있으나모두 VARIABLE 로처리되어실제로의미가없다. 자료형 53
IN ROW size 메모리테이블에저장된 BLOB 은데이타의크기가 64 바이트이하일경우, 테이블의고정영역에저장되며 64 바이트를초과하면가변영역에저장된다. VARIABLE_LOB_COLUMN_IN_ROW_SIZE 프로퍼티로고정영역에저장되는디폴트크기를명시할수있다. 디스크테이블에대해서는크기에관계없이가변영역에저장된다. 메모리테이블의경우, VARIABLE 지정시에 IN ROW 구문을이용해서고정데이타영역에들어갈데이타길이와가변영역에들어갈길이를지정할수있다. 예를들어, BLOB in row 200 으로설정된칼럼의경우, 삽입되는데이타길이가 200 바이트이하이면고정영역에, 200 바이트를초과하면가변영역에저장된다. 특별한경우가아니면매번 in row 크기를지정할필요없이 VARIABLE_LOB_COLUMN_IN_ROW_SIZE 프로퍼티에디폴트 in row 크기를지정하고테이블생성시에는생략할수있다. 해당프로퍼티에대한상세한은 Starting User s Manual 의알티베이스프로퍼티부분을참조한다. CLOB 흐름도 CLOB VARIABLE IN ROW size 구문 CLOB [ VARIABLE ( IN ROW size ) ] CLOB 은문자형대용량데이타를저장하기위한것으로, 2GB 크기내에서가변길이를가지는문자형데이타타입이다. CLOB 도 BLOB 이나 VARCHAR 타입처럼 FIXED VARIABLE 을명시할수있으나모두 VARIABLE 로처리되어실제로의미가없다. 메모리테이블에저장된 CLOB 은 BLOB 과마찬가지로, 데이타의크기가 64 바이트이하일경우, 테이블의고정영역에저장되며 64 54 ALTIBASE5 SQL User s Manual
IN ROW size 바이트를초과하면가변영역에저장된다. VARIABLE_LOB_COLUMN_IN_ROW_SIZE 프로퍼티로 FIXED 영역에저장되는디폴트크기를명시할수있다. 디스크테이블에대해서는크기에관계없이 VARIABLE 영역에저장된다. 메모리테이블의 CLOB 칼럼의경우, VARIABLE 지정시에 IN ROW 구문을이용해서고정데이타영역에들어갈데이타길이와가변영역에들어갈길이를지정할수있다. 이에대한세부내용은 BLOB 과같다. 제한사항 Stored Procedure 나트리거에서는 LOB 타입을사용할수없다. 커서에서 LOB 타입을사용할수없다. 휘발성테이블과디스크임시테이블스페이스에서는 LOB 타입을사용할수없다. 디스카드된테이블스페이스의 LOB 칼럼은사용이불가능하다. LOB 타입은파티션컬럼으로사용할수없다. 파티션컬럼은대소비교가가능해야한다. LOB 칼럼에는인덱스를생성할수없다. 자료형 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 Ⅱ
3. 데이타정의어 이장에서는데이타베이스오브젝트를생성하기위해서사용하는 SQL 문장인 DDL 문장의문법과특징을사용예제를들어서상세하게하고있다. 58 ALTIBASE5 SQL User s Manual
ALTER DATABASE 구문 alter_database ::= ALTER DATABASE database_name startup_clause ; rename_datafile_clause create_datafile_clause session_clause archivelog_option backup_clause recover_clause altilinker_clause startup_clause ::= CONTROL SERVICE META UPGRADE RESETLOGS RESETUNDO SHUTDOWN NORMAL IMMEDIATE 데이타정의어 59
rename_clause ::= RENAME DATAFILE file_name TO file_name create_clause ::= CREATE DATAFILE datafile_name session_clause ::= SESSION CLOSE number archivelog_option ::= ARCHIVELOG NOARCHIVELOG backup_clause ::= LOGANCHOR BACKUP TABLESPACE tablespace_name TO backup_dir DATABASE recover_clause ::= RECORVER DATABASE until_option until_option ::= UNTIL CANCEL TIME YYYY-MM-DD:HH:MM:SS 60 ALTIBASE5 SQL User s Manual
altilinker_clause ::= LINKER START STOP 전제조건 데이타베이스다단계구동에서서비스전단계에서만수행할수있는 SQL 문으로 SYS 사용자가 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 단계로변경한다. 데이타베이스다단계구동할때메타를로딩하는단계이다. 데이타정의어 61
META UPGRADE META RESETLOGS META RESETUNDO SHUTDOWN IMMEDIATE RENAME DATAFILE CREATE DATAFILE SESSION CLOSE 다음단계를수행하기위해 ALTER DATABASE dababase_name SERVICE; 구문을수행한다. 데이타베이스구동단계를 META UPGRADE 단계로변경한다. 데이타베이스다단계구동시메타를갱신하는단계로, 모든복구가완료된상태이다. 다음단계를수행하기위해 ALTER DATABASE dababase_name SERVICE; 구문을수행해야한다. 데이타베이스다단계 startup 시컨트롤단계에서불완전복구를한경우, 서버를정상구동하기위해필요한작업이다. 불완전복구로불필요한로그레코드들을초기화한다. 다음단계를수행하기위해 ALTER DATABASE dababase_name SERVICE; 구문을수행해야한다. SYS_TBS_DISK_UNDO 테이블스페이스를초기화한다. 그러나파일크기는재설정하지않는다. 단, 데이타베이스의무결성을디스크가비지콜레션이수행된것을확인하고, 서버를정상종료한이후에이구문을실행한다. SHUTDOWN NORMAL 서버에접속한모든클라이언트의연결이정상적으로해제될때까지대기한후서버를정상종료한다. 서버에접속된모든클라이언트의연결을강제로해제한후, 서버를정상종료한다. 데이타베이스에속한데이터파일을새로운이름으로변경한다. TO file_name 의새로운데이터파일이미리생성되어야한다. 데이타파일이유실되었을때, 로그앵커의정보를참고하여데이타파일을생성한다. 이구문을실행한후에는매체완전복구를수행하여데이타파일을복구한다. datafile_path 에데이타파일을생성할디렉토리의상대경로또는절대경로를입력한다. 상대경로를입력할때는 $ALTIBASE_HOME/dbs/ 에서입력한다. 62 ALTIBASE5 SQL User s Manual
archivelog_option BACKUP LOGANCHOR BACKUP TABLESPACE BACKUP DATABASE RECOVER DATABASE 세션을강제로종료시킨다. SESSION CLOSE 다음에 session_id 을넣어주면된다. 이때에는 Transaction 이바로멈춰진다. * 참고 : 단계마다의상태변화는위에서기술한순서대로가능하고, 단계서로간의 jump 가가능하다. shutdown normal(immediate) 은 SERVICE 단계에서만가능하고, 다른모드에서는 shutdown abort 만가능하다. 알티베이스구동단계에대해서는 Altibase Administrator Manual 을참조한다. 서버컨트롤단계에서데이타베이스모드를아카이브로그모드또는노아카이브로그모드로변경한다. 데이타베이스를아카이브로그모드로운영할때, 서비스를중지하지않은상태에서로그앵커를온라인백업한다. 데이타베이스를아카이브로그모드로운영할때, 서비스를중지하지않은상태에서지정된테이블스페이스를백업디렉토리에백업한다. 데이타베이스를아카이브로그모드로운영할때, 서비스를중지하지않은상태에서모든메모리테이블스페이스, 디스크테이블스페이스, 로그앵커가백업된다. 매체완전복구를한다. 아카이브로그디렉토리의로그파일을판독하여매체오류가발생한데이타파일들을현재시점의데이타파일로복구한다. RECOVER DATABASE UNTIL TIME 데이타가백업된시점부터그이후의특정과거시점까지에대한전체데이타베이스를복구한다. RECOVER DATABASE UNTIL CANCEL AltiLinker_clause 데이타가백업된시점부터그이후의유효한로그파일또는로그레코드를포함한시점까지전체데이타베이스를복구한다. LINKER START 데이타베이스링크에서원격서버와의데이타교환을매개해주는 AltiLinker 프로세스를종료시키거나재시작한다. 데이타정의어 63
AltiLinker 프로세스를시작한다. 단, AltiLinker 가존재하지않아야한다. LINKER STOP AltiLinker 프로세스를종료한다. 단, 종료실행시데이타베이스링크를사용하는트랜잭션이없어야한다. 데이타베이스링크를사용하는트랜잭션이존재하면, 이연산은실패한다. 예제 < 질의 > 다음은다단계 startup 시 SERVICE 단계를이용해서데이타베이스 mydb 가정상서비스수행이가능하도록하는구문이다. isql> ALTER DATABASE mydb SERVICE; < 질의 > 아카이브로그모드로데이타베이스를운영한다. 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; 64 ALTIBASE5 SQL User s Manual
ALTER INDEX 구문 alter_index ::= set_persistent_clause ALTER INDEX user_name. index_name rebuild_index_partition ; set_persistent_clause ::= ON SET PERSISTENT = OFF rebuild_index_partition ::= REBUILD PARTITION index_partition_name index_attribute index_attribute ::= TABLESPACE tablespace_name 전제조건 SYS 사용자이거나인덱스가현재사용자의스키마에속하거나또는 ALTER ANY INDEX 시스템권한을가진사용자만이인덱스를변경할수있다. 데이타정의어 65
user_name 기존인덱스정의를변경한다. 변경될인덱스의소유자이름을명시한다. index_name 생략하면알티베이스는현재세션에연결된사용자의스키마에속한것으로간주한다. SET PERSISTENT 절 rebuild_index_partition 변경될인덱스의이름을명시한다. PERSISTENT 색인을생성후 PERSISTENT 색인을변경하는문이다. 자세한내용은 CREATE INDEX 참고한다 index_attribute 지정한테이블스페이스에인덱스파티션을재구축한다. 테이블스페이스명을명시한다. 주의사항 변경할인덱스가이중화테이블에걸려있는경우에는사용할수없다. 그러나 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; 66 ALTIBASE5 SQL User s Manual
ALTER REPLICATION 구문 alter_replication ::= ALTER REPLICATION replication_name SYNC ONLY PARALLEL parallel_factor TABLE user_name. tbl_name, START QUICKSTART STOP ADD TABLE FROM user_name. tbl_name TO user_name. tbl_name ; where_clause DROP HOST remote_host_ip. remote_port_no FLUSH ALL WAIT wait_time HOST remote_host_ip. remote_port_no SET LAZY MODE ACKED EAGER replication_name 이중화생성 (CREATE REPLICATION) 후이중화의동작을제어하는문장으로다음과같은종류가있다. 이중화에관한자세한내용은 Replication User s Manual 참조한다. SYNC 이중화이름을명시한다. 지역서버에있는이중화테이블들의모든데이타를원격서버의 데이타정의어 67
SYNC ONLY 해당테이블로전송한후이중화를시작한다. PARALLEL parallel_factor TABLE user_name.table_name 지역서버에있는이중화테이블들의모든데이타를원격서버의해당테이블로전송한다. 송신쓰레드는생성되지않는다. Parallel_factor 값은생략가능하며, 생략할경우 1 로인식된다. Parallel_factor 의최대값은 CPU 개수 * 2 이며, 최대값을초과하여설정해도최대값을넘지못한다. 0 또는음의값을설정한경우엔오류메시지가나타난다. START QUICKSTART STOP ADD TABLE where_clause 지역서버이중화테이블중에서 SYNC 대상테이블을지정한다. 이중화시작시에는마지막이중화시점부터이중화를시작하며, TABLE 절을사용하지않았을때에는현재로그의위치부터이중화를시작한다. 가장최근의마지막이중화시점부터이중화를시작한다. 현재시점부터이중화를시작한다. 이중화를중지한다. 이중화할테이블을추가한다. 이중화가중지되어있는상태에서이중화할테이블을추가할수있다. SELECT 구문의 where_clause 를참고한다. DROP TABLE user_name tbl_name 이중화조건절은 WHERE user_name.table_name.column_name {< > <> >= <= =!=} value [{AND OR}... ] 사용하여조건에해당하는로그만이중화대상으로한다. 단, 이중화조건절은 ADD TABLE 에서만사용할수있다. 이중화테이블을삭제한다. 이중화가중지되어있는상태에서이중화테이블을삭제할수있다. 이중화테이블의소유자이름을명시한다. 68 ALTIBASE5 SQL User s Manual
FLUSH 이중화테이블이름을명시한다. 이중화 sender 쓰레드에의해서현재로그까지의변경내용이상대방서버에전송되도록 wait_time 초만큼기다린다. 만약, All 이같이사용되면현재로그가아닌가장최근로그까지의변경내용이상대방서버에전송되도록기다린다. 주의사항 전제조건 입력 / 수정 / 삭제시충돌 (confliction) 이발생하면무시 (discard) 처리하고에러로그파일에남긴다. * 에러로그파일에제외되는경우 deadlock: 원격서버에서데드락으로인해이중화트랜잭션이롤백될경우에는에러로그를남기지않는다. network error: 이중화도중네트워크 (TCP/IP) 에러로인한데이타손실을막을수없다. 또한에러로그도남기지않는다. 이중화작업도중발생한에러에대해부분롤백한다. 즉여러개의자료입력중한개의중복데이타가있으면중복데이타만취소하고나머지는완료할수있다. 이중화속도는서비스속도보다매우느릴수있다. 알티베이스프로퍼티의 AUTO_REMOVE_ARCHIVE_LOG = 1 로세팅한경우라도완료되지않은이중화작업로그는로그파일에서삭제되지않는다. 만일 0 으로세팅할경우아래의 5 번은이중화작업에영향이없다. 현재이중화송신쓰레드가작업하는로그파일과현재로그파일의차이가알티베이스프로퍼티의최대로그파일개수 (REPLICATION_MAX_LOGFILE) 보다큰시점에체크포인트가발생하면이중화작업이완료되지않은로그파일도삭제되며, 이중화작업은이전의로그파일은무시하고현재로그파일부터다시시작한다. 데이타제약조건 복제되는테이블에대해반드시기본키가존재해야한다. 복제되는테이블에대해기본키에대한수정이없어야한다. 양쪽테이블의칼럼정보, 기본키, NOT NULL 정보가동일해야한다. 데이타정의어 69
연결제약조건 최대이중화연결은하나의알티베이스데이타베이스에 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. 이중화이름을 rep1 이라고가정하고이중화를중지하는질의이다. 70 ALTIBASE5 SQL User s Manual
< 질의 > 이중화를중지하라. isql> ALTER REPLICATION rep1 STOP; Alter success. 데이타정의어 71
ALTER SEQUENCE 구문 alter_sequence ::= INCREMENT BY integer MAXVALUE integer NOMAXVALUE ALTER SEQUENCE seq_name MINVALUE integer ; user_name. NOMINVALUE CYCLE CACHE integer 전제조건 SYS 사용자이거나시퀀스가사용자의스키마에속하거나시퀀스에대해 ALTER 객체접근권한을가지거나또는 ALTER ANY SEQUENCE 시스템권한을가진사용자만이시퀀스를변경할수있다. 시퀀스생성 (CREATE SEQUENCE) 후시퀀스의정의를변경하는문으로메타내해당시퀀스의정의가변경된다. CREATE SEQUENCE 참고한다. 72 ALTIBASE5 SQL User s Manual
user_name 변경될시퀀스의소유자이름을명시한다. 생략하면알티베이스는현재세션에연결된사용자의스키마에속한것으로간주한다. seq_name 변경될시퀀스이름을명시한다. INCREMENT BY 시퀀스값의증감분 MAXVALUE 시퀀스의최대값 MINVALUE 시퀀스의최소값 CYCLE 시퀀스가 MAXVALUE 또는 MINVALUE 한계에도달하면해당시퀀스의추가값을할당하기위하여오름차순시퀀스인경우는 minimum value 를내림차순시퀀스인경우는 maximum value 를생성한다. CACHE 해당시퀀스값을더빠르게액세스하기위하여명시된값만큼시퀀스값들을메모리에캐시한다. 캐시는시퀀스를처음참조할때채워지며다음에시퀀스값을요청할때마다캐시된시퀀스에서검색된다. 마지막시퀀스를사용한이후의시퀀스요청은시퀀스의다른캐시를메모리로가져온다. 시퀀스생성시기본값은 20 이다. 주의사항 시퀀스정의변경의경우이미시퀀스생성이후이므로 START WITH 절을사용할수없다. 예제 * CREATE SEQUENCE 참조한다. < 질의 > 시퀀스 seq1 을최소값 0, 최대값 100 을가지고 1 씩증가하도록변경하라. isql> ALTER SEQUENCE seq1 INCREMENT BY 1 MINVALUE 0 데이타정의어 73
MAXVALUE 100; Alter success. < 질의 > 시퀀스 seq2 의최소값, 최대값을무한대로변경하라. isql> ALTER SEQUENCE seq2 NOMAXVALUE NOMINVALUE; Alter success. 74 ALTIBASE5 SQL User s Manual
ALTER TABLE 구문 alter_table::= ALTER TABLE table_name user_name. alter_table_properties alter_table_partitioning column_clauses constraint_clauses RENAME TO new_tbl_name ; user_name. MAXROWS integer ALL INDEX ENABLE DISABLE alter_table_properties::= logging_clause parallel_clause row_movement_clause 데이타정의어 75
alter_table_partitioning::= add_table_partition coalesce_table_partition drop_table_partition merge_table_partition rename_table_partition split_table_partition truncate_table_partition add_table_partition ::= ADD PARTITION partition_name alter_table_partition_spec alter_table_partition_spec ::= PARTITION partition_name table_partition_description alter_table_index_partition_description table_partition_description ::= TABLESPACE tablespace_name LOB_storage_clause alter_table_index_partition_description ::= INDEX ( partitioned index_name PARTITION index_partition_name ), TABLESPACE tablespace_name 76 ALTIBASE5 SQL User s Manual
coalesce_table_partition ::= COALESCE PARTITION drop_table_partition ::= DROP PARTITION partition_name merge_table_partition ::= MERGE PARTITIONS partition_1, partition_2 INTO alter_table_partition_spec rename_table_partition ::= RENAME PARTITION old_partition_name TO new_partition_name split_table_partition ::= AT SPLIT PARTITION partition_name ( value ) VALUES, INTO ( alter_table_partition_spec, alter_table_partition_spec ) truncate_table_partition ::= TRUNCATE PARTITION partition_name 데이타정의어 77
column_clauses::= add_column_clause alter_column_clauses drop_column_clause rename_column_clause add_column_clauses::= ADD ( column_definition ) COLUMN, lob_storage_clause partition_lob_storage_clause partition_lob_storage_clause ::= ( PARTITION partition_name LOB_storage_clause ), alter_column_clause ::= ALL INDEX expr ALTER ( column_name DROP DEFAULT ) COLUMN NULL NOT lob_storage_clause partition_lob_storage_clause 78 ALTIBASE5 SQL User s Manual