슬라이드 1

Size: px
Start display at page:

Download "슬라이드 1"

Transcription

1 Developer Course for Tibero RDBMS 2012 Tibero Co., Ltd. All Rights Reserved Tibero Co., Ltd. All Rights Reserved. 1

2 Update History Date Worker Comments 김범석문서업데이트 2012 Tibero Co., Ltd. All Rights Reserved. 2

3 Contents (1/4) Chapter 1장. Tibero RDBMS를 소개합니다. 1. Tibero? (p 8) 2. 주요기능 (p 9) 3. Process architecture (p 10) 4. Directory (p 11) Chapter 2장. SQL 문장의구성요소 1. SQL 문장의구성요소 (p 17) 2. 데이터타입 (p 18) 3. 리터럴 (p 39) 4. 형식문자열 (p 47) 5. 의사컬럼 (p 51) 6. NULL (p 57) 7. 주석 (P 59) 8. 힌트 (P 60) 9. 스키마객체 (P 70) Chapter 3장. tbjdbc 활용편 1. tbjdbc? (p 83) 2. JDK 설치 (p 84) 3. JDBC의표준기능 (p 85) 4. 개발과정 (P 88) 5. 기본프로그래밍 (p 89) Chapter 4 장. 데이터를조회하자. 1. SQL 정의 (p 96) 2. SQL 문장분류 (p 97) 3. SELECT 를이용한데이터조회 (p 98) 4. WHERE 절이용 (p 99) 5. AND (p 100) 6. OR (p 101) 7. BETWEEN AND (p 102) 8. IN (p 103) 9. IS NULL/NOT (p 104) 10. LIKE (p 105) 11. 연산자 (p 106) 12. ORDER BY (p 107) 13. GROUP BY (p 108) 14. HAVING (p 109) 15. 기타 (p 110) 16. SQL 작성시유의사항 (p 116) 2012 Tibero Co., Ltd. All Rights Reserved. 3

4 Contents (2/4) Chapter 5장. 함수를사용하자. 1. 함수정의 / 종류 (p 116) 2. 숫자함수 (ROUND, MOD...) (p 117) 3. 문자함수 (SUBSTR,LOWER...) (p 118) 4. 날짜함수 (ADD_MONTH...) (p 119) 5. 변환함수 (TO_CHAR,TO_DATE...) (p 120) 6. 기타함수 (DECODE,NVL...) (p 121) 7. 집합함수 (AVG,RANK,SUM,MIN...) (p 125) 8. 분석함수 (p 129) Chapter 6 장. 데이터조회고급활용 1. 조인의정의 (p 136) 2. SELECT FROM 을이용한조인 (p 137) 3. JOIN 절을이용한조인 (p 138) 4. 3 개이상의테이블조인 (p 139) 5. 여러형태의조인 (p 140) 6. SUBQUERY( 하위질의 ) (p 148) 7. 스칼라 SUBQUERY (p 149) 8. INLINE VIEW (p 150) 9. Top-N 쿼리 (p 151) 10. ROLLUP (p 152) 11. CUBE (p 153) 12. GROUPING SETS (p 154) 13. 계층질의 (p 155) 14. 조인방식 (p 156) 15. 기타 (p 159) 2012 Tibero Co., Ltd. All Rights Reserved. 4

5 Contents (3/4) Chapter 7장. DML을활용하자. 1. DML 정의 (p 161) 2. INSERT 문 (p 162) 3. UPDATE 문 (p 163) 4. DELETE 문 (p 164) 5. MERGE 문 (p 165) 6. TRIGGER (p 166) 7. Transaction 이란? (p 168) 8. LOCK (p 169) Chapter 8 장. tbpsm 을알아보자. 1. OverView (P 171) 2. 구성요소 (P 172) 3. 프로그램구조 (P 179) 4. tbpsm 문장의구성요소 (P 180) 5. tbpsm의데이터타입 (P 183) 6. 데이터타입의변환 (P 185) 7. 데이터변수의선언과참조영역 (P 186) 8. 연산자 (P 189) 9. 제어구조 (P 190) 10. 복합타입 (P 198) 11. 서브프로그램 (P 103) 12. Package (P 207) 13. SQL 문장의실행 (P 210) 14. 에러처리 (P 217) 2012 Tibero Co., Ltd. All Rights Reserved. 5

6 Contents (4/4) Chapter 9장. tbcli 를활용하자. 1. OverView (P 228) 2. 구성요소 (P 229) 3. Program 구조 (P 230) 4. DATA TYPE (P 234) 5. 함수 (P 237) 6. tbcli Message (P 238) 7. tbcli와 ODBC (P 239) 8. tbcli와 ODBC 연동 (P 242) Chapter 10장. XA 활용법 1. 분산트랜젝션 (P 253) 2. XA 함수 (P 257) 3. XA Application 프로그래밍 (P 259) 4. JDBC에서 XA Interface (P 264) 5. XA Interface 프로그래밍 (P 265) Chapter 11 장. tbsql 사용하기 1. OverView (P 273) 2. 실행 (P 274) 3. 데이터베이스접속 (P 276) 4. 인터페이스 (P 277) 5. 환경설정 (P 278) 6. 종료 (P 279) 7. 시스템변수 (P 280) 8. 기본기능 (P 283) 9. 고급기능 (P 286) 10. 명령어 (P 290) 11. 컬럼포맷 (P 294) Chapter 12 장. tbadmin 사용하기 1. OverView (P 299) 2. 설치및실행 (P 301) 3. 기능 (P 302) 4. Export / Import 기능 (P 317) 2012 Tibero Co., Ltd. All Rights Reserved. 6

7 Chapter 1 장 Tibero RDBMS 를소개합니다 Tibero Co., Ltd. All Rights Reserved. 7 7

8 Tibero? CHAPTER 1 장. Tibero RDBMS 를소개합니다. 현재기업환경은? 폭발적인데이터증가 새로운비즈니스환경 효율, 유연한데이터서비스와정보처리, 데이터관리기능필요 Tibero? 데이터베이스인프라구성지원하며고성능, 고가용성및확장성의문제를해결하는엔터프라이즈데이터베이스관리시스템이다 Tibero Co., Ltd. All Rights Reserved. 8

9 주요기능 CHAPTER 1 장. Tibero RDBMS 를소개합니다. 분산데이터베이스링크 (Distributed Database Link) 데이터이중화 (Data Replication) Tibero 데이터베이스클러스터 (Database Cluster) 병렬쿼리처리 (Parallel Query Processing) 2012 Tibero Co., Ltd. All Rights Reserved. 9

10 Process Architecture CHAPTER 1 장. Tibero RDBMS 를소개합니다 Tibero Co., Ltd. All Rights Reserved. 10

11 Directory CHAPTER 1 장. Tibero RDBMS 를소개합니다. bin config bin Include man1 $TB_HOME client config lib ssl man misc man3 man5 man7 tbepa java database $TB_SID psm config lib audit dbmslog instance $TB_SID log lsnr license path tracelog lib scripts pkg 2012 Tibero Co., Ltd. All Rights Reserved. 11

12 Directory CHAPTER 1 장. Tibero RDBMS 를소개합니다. Directory 구성 bin 구분 Data Type Tibero RDBMS 의실행파일과서버관리를위한유틸리티가위치한디렉터리이다. 이디렉터리에속한파일중에서 tbsvr 과 tblistener 는 Tibero RDBMS 를구성하는실행파일이며, tbboot 와 tbdown 은각각 Tibero RDBMS 를기동하고종료하는역할을담당한다. client/bin tbsvr 과 tblistener 실행파일은반드시 tbboot 명령어를이용하여실행되어야하며, 절대로직접실행해서는안된다. 유틸리티 설명 tbsql tbmigrator tbexport 기본적인클라이언트프로그램으로사용자가직접 SQL 질의를하고그결과를확인할수있는유틸리티이다. 다른데이터베이스의내용을 Tibero RDBMS 의데이터베이스로옮기는것을지원하는유틸리티이다. 논리적백업이나데이터베이스간에데이터이동을위해데이터베이스의내용을외부파일로저장하는유틸리티이다. tbimport 외부파일에저장된내용을데이터베이스로가져오는유틸리티이다. tbloader 대량의데이터를데이터베이스로한꺼번에읽어들이는유틸리티이다. tbpc C 언어로작성된프로그램안에서내장 SQL(Embedded SQL) 을사용하는프로그램을개발할때이를 C 프로그램으로변환하는유틸리티이다. 이렇게변환된프로그램을 C 컴파일러를통해컴파일할수있도록도와주는역할도담당한다 Tibero Co., Ltd. All Rights Reserved. 12

13 Directory CHAPTER 1 장. Tibero RDBMS 를소개합니다. Directory 구성 구분 client/config client/include client/lib Data Type Tibero RDBMS 의클라이언트프로그램을실행하기위한설정파일이위치하는디렉터리이다. Tibero RDBMS 의클라이언트프로그램을작성할때필요한헤더파일이위치하는디렉터리이다. Tibero RDBMS 의클라이언트프로그램을작성할때필요한라이브러리파일이위치하는디렉터리이다. client/ssl 서버보안을위한인증서와개인키를저장하는디렉터리이다. client/tbepa External Procedure 와관련된설정파일과로그파일이있는디렉터리이다. config database/$tb_ SID Tibero RDBMS 의환경설정파일이위치하는디렉터리이다. 이위치에존재하는 $TB_SID.tip 파일이 Tibero RDBMS 의환경설정을결정한다. Tibero RDBMS 의데이터베이스정보를별도로설정하지않는한, 모든데이터베이스정보가이디렉터리와그하위디렉터리에저장된다. ( 이디렉터리에는데이터자체에대한메타데이터뿐만아니라다음과같은종류의파일이있다.) 파일 설명 컨트롤파일다른모든파일의위치를담고있는파일이다. 데이터파일실제데이터를저장하고있는파일이다. 로그파일데이터복구를위해데이터에대한모든변경사항을저장하는파일이다 Tibero Co., Ltd. All Rights Reserved. 13

14 Directory CHAPTER 1 장. Tibero RDBMS 를소개합니다. Directory 구성 구분 database/$tb_ SID/psm Data Type tbpsm 프로그램을컴파일드모드 (Compiled mode) 로컴파일하는경우, 컴파일된파일이저장되는디렉터리이다. 하지만, 현재 Tibero RDBMS 에서는인터프리터모드만을지원하고있다. 자세한내용은 "Tibero RDBMS tbpsm 안내서 " 를참고한다. instance/$tb_ SID/audit 데이터베이스사용자가시스템특권또는스키마객체특권을사용하는것을감시 (AUDIT) 한내용을기록한파일이저장되는디렉터리이다. instance/$tb_ SID/log Tibero RDBMS의트레이스 (trace) 로그파일과 DBMS 로그파일이저장되는디렉터리이다. 파일 트레이스로그파일 DBMS 로그파일 설명 디버깅을위한파일이다. 서버가하는모든일이자세하게기록되는파일이며, 서버성능이저하되는원인을찾거나 Tibero RDBMS 자체의버그를해결하는데사용될수있다. 트레이스로그파일에기록되는정보보다좀더중요한정보가기록되는파일이며, 서버기동및종류, DDL 문장의수행등이기록되는파일이다. 트레이스로그파일과 DBMS 로그파일은데이터베이스를사용할수록계속누적되어저장된다. 또한, 전체디렉터리의최대크기를지정할수있으며, Tibero RDBMS 는그지정된크기를넘어가지않도록오래된파일을삭제한다. DBMS 로그파일을설정하는초기화파라미터는다음과같다 Tibero Co., Ltd. All Rights Reserved. 14

15 Directory CHAPTER 1 장. Tibero RDBMS 를소개합니다. Directory 구성 구분 instance/$tb_ SID/log instance/$tb_ SID/path license 파일 설명 Data Type DBMS_LOG_FILE_SIZE DBMS 로그파일하나의최대크기를설정한다. DBMS_LOG_TOTAL_SIZE_LIMIT DBMS 로그파일이저장된디렉터리의최대크기를설정한다. TRACE_LOG_FILE_SIZE 트레이스로그파일하나의최대크기를설정한다. TRACE_LOG_TOTAL_SIZE_LIMIT 트레이스로그파일이저장된디렉터리의최대크기를설정한다. Tibero RDBMS 서버에서 Spatial 과관련된함수를사용하기위한라이브러리파일이있는디렉터리이다. Tibero RDBMS 의라이선스파일 (license.xml) 이있는디렉터리이다. XML 형식이므로일반텍스트편집기로도라이선스의내용을확인할수있다. scripts Tibero RDBMS 의데이터베이스를생성할때사용하는각종 SQL 문장이있는디렉터리이다. 또한, Tibero RDBMS 의현재상태를보여주는각종뷰의정의도이디렉터리에있다. scripts/pkg Tibero RDBMS 에서사용하는패키지의생성문이저장되는디렉터리이다 Tibero Co., Ltd. All Rights Reserved. 15

16 2012 Tibero Co., Ltd. All Rights Reserved. 16 Chapter 2 장 SQL 문장의구성요소

17 SQL 문장의구성요소 CHAPTER 2 장. SQL 문장의구성요소 구분 데이터타입 설명 Tibero RDBMS 에서는 SQL 표준에기반한여러가지데이터타입을제공한다 리터럴 상수값을의미한다. 형식문자열 NUMBER 타입과날짜형타입의값을문자열로변환하기위한형식을정의한것이다. 의사컬럼 시간간격을표현하는데이터타입이다. NULL 한로우에서어떤컬럼에값이없을때그컬럼을 NULL이라고한다. 주석 책이나문서에서주석이낱말이나문장의뜻을쉽게풀이하는역할을하듯 SQL 문장에도주석을활용하여해당문장의부연설명을삽입할수있다. 힌트 SQL 문장에힌트를추가하여 Tibero RDBMS 의질의최적화기 (Optimizer) 에특정행동을지시하거나질의최적화기의실행계획을변경한다. 스키마객체 한사용자가하나의스키마만을정의할수있고, 스키마의이름은항상사용자의이름과동일하다. 이러한스키마에포함된객체를스키마객체라한다 Tibero Co., Ltd. All Rights Reserved. 17

18 Data Type CHAPTER 2 장. SQL 문장의구성요소 Tibero RDBMS 에서는 SQL 표준에기반한여러가지데이터타입을 제공한다. 구분 Data Type 설명 문자형 CHAR, VARCHAR, NCHAR, NVARCHAR, RAW, LONG, LONG RAW 문자열을저장하는데이터타입이다. 숫자형 NUMBER 정수나실수의숫자를저장하는데이터타입이다. 날짜형 간격형 DATE, TIME, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND 시간이나날짜를저장하는데이터타입이다. 시간간격을표현하는데이터타입이다. 대용량객체형 CLOB, BLOB, XML TYPE 대용량객체를저장하기위해제공하는가장큰데이 터타입이다. 내재형 ROWID 사용자가명시적으로선언하지않아도 Tibero RDBMS가자동으로삽입되는로우마다포함하는컬 럼의타입이다 Tibero Co., Ltd. All Rights Reserved. 18

19 문자형개요 CHAPTER 2 장. SQL 문장의구성요소 문자형 문자열을표현하는데이터타입이다. 문자형에는 CHAR 타입, VARCHAR 타입, NCHAR 타입, NVARCHAR 타입, RAW 타입, LONG 타입, LONG RAW 타입이있다. 구분 Data Type 설명 문자형 CHAR, VARCHAR, NCHAR, NVARCHAR, RAW, LONG, LONG RAW 문자열을저장하는데이터타입이다 Tibero Co., Ltd. All Rights Reserved. 19

20 문자형 (1/4) CHAPTER 2 장. SQL 문장의구성요소 CHAR 문자열을저장하는데이터타입이다. 항상고정된문자열길이를갖는다. CHAR(size[BYTE CHAR]) 옵션 설명 size 최댓값은 2,000byte이다. 문자열의길이가 2,000 byte를넘으면에러가발생한다. size 를입력한경우 : size 만큼의고정길이를갖는다. size 를입력하지않은경우 : 디폴트값인 1byte 의고정길이를갖는다. 문자열의길이는 byte 기준과문자기준이있다. 예 ) CHAR (10, BYTE), CHAR (10, CHAR) 문자기준일때는한문자가몇 byte 로표현되는문자집합인지에따라그길이가달라진다 SQL 문장에서 CHAR 타입의값을표현할때에는작은따옴표 (' ') 를사용한다. 문자열의길이가 0 인값은 NULL 로인식된다. CHAR 타입을설명하는예이다. PRODUCT_NAME CHAR(10) Tibero 문자열입력 위와같이정의된 PRODUCT_NAME 컬럼에 'Tibero' 문자열이입력되었다면, 네개의공백문자 (Space) 가채워져서 'Tibero ' 문자열이저장된다 Tibero Co., Ltd. All Rights Reserved. 20

21 문자형 (2/4) CHAPTER 2 장. SQL 문장의구성요소 VARCHAR 문자열을저장하는데이터타입으로, 가변길이를갖는다. VARCHAR(size[BYTE CHAR]) 옵션 설명 size 최댓값은 4,000byte이다. 문자열의길이가 4,000 byte를넘으면에러가발생한다. size 를입력한경우 : size 만큼의고정길이를갖는다. size 를입력하지않은경우 : 디폴트값인 1byte 의고정길이를갖는다. 문자열의길이는 byte 기준과문자기준이있다. 예 ) CHAR (10, BYTE), CHAR (10, CHAR) 문자기준일때는한문자가몇 byte 로표현되는문자집합인지에따라그길이가달라진다 SQL 문장에서 CHAR 타입의값을표현할때에는작은따옴표 (' ') 를사용한다. 문자열의길이가 0 인값은 NULL 로인식된다. CHAR 타입을설명하는예이다. EMP_NAME VARCHAR(10) Peter 문자열입력 위와같이정의된 EMP_NAME 컬럼에 'Peter' 문자열이입력되었다면, 10byte 로선언되었지만실제로저장된문자열길이는 5byte 가된다 Tibero Co., Ltd. All Rights Reserved. 21

22 문자형 (2/4) CHAPTER 2 장. SQL 문장의구성요소 NCHAR 유니코드문자열을저장하기위한타입으로, 고정된문자열길이를갖는다. NCHAR(size) 옵션 설명 size 최댓값은 2,000byte, 길이는문자기준이다. 타입의길이는데이터베이스의다국어문자집합에따라정해진다. 예 ) UTF8인경우엔 size의최대 3배, UTF16인경우엔 size의최대 2배가된다. SQL 문장에서 CHAR 타입의값을표현할때에는작은따옴표 (' ') 를사용한다. 문자열의길이가 0 인값은 NULL 로인식된다. NVARCHAR 유니코드문자열을저장하기위한타입으로, 가변길이를갖는다. NCHAR(size) 옵션 설명 size 최댓값은 4,000byte이다. 길이는문자기준이다. 타입의길이는데이터베이스의다국어문자집합에따라정해진다. 예 ) UTF8인경우엔 size의최대 3배, UTF16인경우엔 size의최대 2배가된다. SQL 문장에서 CHAR 타입의값을표현할때에는작은따옴표 (' ') 를사용한다. 문자열의길이가 0 인값은 NULL 로인식된다 Tibero Co., Ltd. All Rights Reserved. 22

23 문자형 (3/4) CHAPTER 2 장. SQL 문장의구성요소 RAW 바이너리데이터를저장하는데이터타입으로, 가변길이를갖는다. CHAR, VARCHAR 와차이점 RAW 타입은데이터중간에 NULL 문자 ('\0') 가올수있지만 CHAR, VARCHAR 타입은그렇지않다. 따라서 RAW 타입은 NULL 문자로데이터의끝을나타낼수없으므로항상길이정보를같이저장한다. RAW(size) 옵션 설명 size 최댓값은 2,000byte이다. 데이터중간에 NULL 문자 ( \0 ) 가올수있다. LONG RAW RAW 타입을확장한타입으로바이너리데이터가저장된다. LONG RAW(size) 옵션 설명 size 최댓값은 2GB이다. 테이블내의한컬럼에만선언할수있다. LONG RAW 타입의컬럼에대해인덱스를생성할수없다 Tibero Co., Ltd. All Rights Reserved. 23

24 문자형 (3/4) CHAPTER 2 장. SQL 문장의구성요소 LONG VARCHAR 타입을확장한데이터타입이다. 가변길이문자열이저장된다. LONG 설명 최댓값은 2GB 이다. LONG 컬럼이있는테이블을생성하지마십시오. 대신에 LOB 열 ( CLOB, BLOB ) 를사용하십시오. LONG 컬럼은 Oracle 과의호환성을위해지원하고있습니다. LONG 타입의컬럼을포함한로우 (Row) 가디스크에저장될때에는다른컬럼의값과함께동일한디스크블록에저장되며, 길이에따라여러디스크블록에걸쳐저장될수있다. 테이블내의한컬럼에만선언할수있다. LONG 타입의컬럼에대해인덱스를생성할수없다. LONG 열은 WHERE 절이나무결성제약조건은지정할수없습니다 ( NULL 및 NOT NULL 제약조건은제외 ). 내장함수는 LONG 값을변경할수없습니다. LONG 데이터는정규표현식에서사용할수없습니다. LONG 데이터형식을사용하여 PL / SQL 프로그램단위의변수또는인수를선언할수있습니다. 그러나이프로그램은 SQL에서호출할수없습니다 Tibero Co., Ltd. All Rights Reserved. 24

25 숫자형개요 CHAPTER 2 장. SQL 문장의구성요소 숫자형 정수나실수의숫자를저장하는데이터타입이다. 숫자형에는 NUMBER 타입, INTEGER 타입, FLOAT 타입이있다. Tibero RDBMS 에서는 ANSI 에서제정한 SQL 표준의숫자타입의선언을지원한다. 즉, INTEGER 타입또는 FLOAT 타입으로컬럼을선언하더라도내부적으로적절한정밀도와스케일을설정하여 NUMBER 타입으로변환해준다. 구분 Data Type 설명 숫자형 NUMBER, INTEGER, FLOART 정수나실수의숫자를저장하는데이터타입이다 Tibero Co., Ltd. All Rights Reserved. 25

26 숫자형 CHAPTER 2 장. SQL 문장의구성요소 NUMBER(1/2) 정수또는실수를저장하는데이터타입이다. 실제로데이터베이스에저장될때는숫자의크기에따라가변길이로저장된다. NUMBER[(precision precision, scale)] 옵션 설명 precision 정밀도는데이터의전체자릿수이다. - 정밀도를초과하는자릿수의데이터는저장할수없다. - 정밀도는 1 ~ 38 까지정의할수있다. - 정밀도는별표 (*) 로도선언할수있다. 최대 38 자리한도내에서임의의자릿수를갖는모든데이터값을받아들이겠다는의미이며, 대체로스케일값을함께선언한다. scale 스케일이며, 소수점의자릿수를설정한다. - 마이너스의스케일은소수점위의자릿수이다. - 스케일을초과하는데이터는반올림을수행한다. - 스케일은 -125 ~ 130 까지정의할수있다 Tibero Co., Ltd. All Rights Reserved. 26

27 숫자형 CHAPTER 2 장. SQL 문장의구성요소 NUMBER(2/2) 다음은입력된데이터가 NUMBER 타입의정밀도와스케일에정의된값에따라실제데이터베이스에어떤형태로저장되는지를보여준다. 입력된데이터 NUMBER 타입선언실제저장된데이터 12, NUMBER 12, , NUMBER(*,3) 12, , NUMBER(8,3) 12, , NUMBER(8,2) 12, , NUMBER(8) 12,346 12, NUMBER(8,-2) 12,300 12, NUMBER(3) (ERROR) 입력된데이터의자릿수가정밀도를초과했으므로저장할수없다 Tibero Co., Ltd. All Rights Reserved. 27

28 날짜형개요 CHAPTER 2 장. SQL 문장의구성요소 날짜형 시간이나날짜를저장하는데이터타입이다. 날짜형에는 DATE 타입, TIME 타입, TIMESTAMP 타입이있다. 날짜형 구분 Data Type 설명 DATE, TIME, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE 시간이나날짜를저장하는데이터타입이다 Tibero Co., Ltd. All Rights Reserved. 28

29 날짜형 (1/3) CHAPTER 2 장. SQL 문장의구성요소 DATE 특정날짜와초단위까지의시간을표현하는데이터타입이다. DATE 설명 연도, 월, 시, 분, 초를표현할수있다. 연도는 BC 9,999 ~ AD 9,999까지표현할수있다. 시간은 24시간단위로표현된다. 초이하단위 ( 밀리초등 ) 과, Timezone과관련된정보를저장하지않음 Tibero Co., Ltd. All Rights Reserved. 29

30 날짜형 (1/3) CHAPTER 2 장. SQL 문장의구성요소 TIMESTAMP 날짜와초단위소수점 9 자리까지의시간을모두표현하는데이터타입이다. 연도, 월, 시, 분, 초, 10-9 초를표현할수있다. 연도는 BC 9,999 ~ AD 9,999까지표현가능하다. 시간은 24시간단위로표현된다. TIMESTAMP[(frac_sec_prec)] 옵션 설명 frac_sec_prec 시간값의소수초정밀도 (fractional second precision) 를설정한다. -0부터 9까지사용할수있다. -디폴트값은 6이다 Tibero Co., Ltd. All Rights Reserved. 30

31 날짜형 (1/3) CHAPTER 2 장. SQL 문장의구성요소 TIMESTAMP WITH TIME ZONE TIMESTAMP 타입을확장하여시간대까지표현하는데이터타입이다. 연도, 월, 일, 시, 분, 초, 소수점초등은 TIMESTAMP 타입과동일한특징을가진다. 각시간요소들을 UTC(Coordinated Universal Time) 시간으로정규화해서저장한다. 지역이름이나오프셋으로표현된시간대를포함하여저장한다. 여기서오프셋은현재지역의시간과 UTC 시간과의차이를말한다. TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE 옵션 설명 fractional_second s_precision 시간값의소수초정밀도 (fractional second precision) 를설정한다. -0 부터 9 까지사용할수있다. - 디폴트값은 6 이다 Tibero Co., Ltd. All Rights Reserved. 31

32 날짜형 (2/3) CHAPTER 2 장. SQL 문장의구성요소 INTERVAL YEAR TO MONTH 년과월의차이를저장하는데이터타입이다 실제로데이터베이스에저장될때는고정길이로저장된다. INTERVAL YEAR [(year_prec)] TO MONTH 옵션 설명 year_prec year precision 를설정한다. - 0 부터 9 까지사용할수있다. - 디폴트값은 2 이다. - 년의자릿수를제한할수있다. TIME 초단위소수점 9 자리까지의특정시간을표현하는데이터타입이다 Tibero Co., Ltd. All Rights Reserved. 32

33 날짜형 (3/3) CHAPTER 2 장. SQL 문장의구성요소 INTERVAL DAY TO SECOND 날짜와시간의차이를저장하는데이터타입이다. 실제로데이터베이스에저장될때는고정길이로저장된다. INTERVAL DAY [(day_prec)] TO SECOND [(frac_sec_prec)] 옵션 설명 day_prec day precision 를설정한다. - 0 부터 9 까지사용할수있다. - 디폴트값은 2 이다. frac_sec_prec TIMESTMAP 타입에정의된옵션과같다 Tibero Co., Ltd. All Rights Reserved. 33

34 대용량객체형개요 CHAPTER 2 장. SQL 문장의구성요소 대용량객체형 대용량의객체를저장하기위해 Tibero RDBMS 에서제공하는가장큰데이터타입이며, CLOB 타입과 BLOB 타입, XMLTYPE 타입이있다. 구분 Data Type 설명 대용량객체형 CLOB, BLOB, XML TYPE 대용량객체를저장하기위해제공하는가장큰데이터타입이다 Tibero Co., Ltd. All Rights Reserved. 34

35 대용량객체형 CHAPTER 2 장. SQL 문장의구성요소 CLOB LONG 타입을확장한데이터타입이다. 설명 최댓값은 4GB 이다. 테이블내에서하나이상의컬럼에선언할수있다. 데이터에접근할때, LONG 타입과달리임의의위치에서접근할수있다. Table CLOB 타입의컬럼값은같은테이블의다른타입으로선언된컬럼값과동일한디스크블록에저장되지않는다. 디스크블록내의로우는별도의디스크블록에저장된 CLOB 타입의포인터만저장하고있다. CLOB Column LOB Locator LOB Segment 8K 8K 8K 8K 8K 8K 8K 8K 8K 8K 2012 Tibero Co., Ltd. All Rights Reserved. 35

36 대용량객체형 CHAPTER 2 장. SQL 문장의구성요소 BLOB LONG RAW 를확장한데이터타입으로, CLOB 과유사한특징을갖고있다. 설명 최댓값은 4GB 이다. 테이블내에서하나이상의컬럼에선언할수있다. 데이터에접근할때, LONG RAW 타입과달리임의의위치에서접근할수있다. Table BLOB 타입의컬럼값은같은테이블의다른타입으로선언된컬럼값과동일한디스크블록에저장되지않는다. 디스크블록내의로우는별도의디스크블록에저장된 BLOB 타입의포인터만저장하고있다. BLOB Column LOB Locator LOB Segment 8K 8K 8K 8K 8K 8K 8K 8K 8K 8K 2012 Tibero Co., Ltd. All Rights Reserved. 36

37 대용량객체형 CHAPTER 2 장. SQL 문장의구성요소 XML TYPE XML (Extensible Markup Language) 은구조화되거나그렇지않은모든데이터를표현하기위해 W3C (World Wide Web Consortium) 에의해표준으로제정된형식이다. Tibero RDBMS 에서는이 XML 데이터를저장하기위해 XMLTYPE 타입을제공하며, 내부적으로 CLOB 형식으로저장된다. 설명 데이터를 CLOB의최대크기까지저장할수있다. 테이블내에서하나이상의컬럼에선언할수있다. XML 데이터에대한접근, 추출, 질의를수행할때사용한다 Tibero Co., Ltd. All Rights Reserved. 37

38 내재형 CHAPTER 2 장. SQL 문장의구성요소 ROWID 데이터베이스내의각로우를식별하기위해, Tibero RDBMS 가각로우마다자동으로부여하는데이터타입이다. 각로우가저장되어있는물리적인위치를포함하고있다 Tibero Co., Ltd. All Rights Reserved. 38

39 리터럴 (Literal) CHAPTER 2 장. SQL 문장의구성요소 상수값을나타내는단어이다. 상수란변수에대응되는개념으로말그대로변하지않는값을의미한다. 문자열리터럴은작은따옴표를사용하여다른스키마객체와구분한다. 리터럴은 SQL 문장에서연산식이나조건식의일부로사용할수있다. 구분 설명 문자열리터럴 문자열을표현할때사용하는리터럴이다 숫자리터럴 정수또는실수를표현할때사용하는리터럴이다. 간격리터럴 특정시간과시간사이의간격을표현하는리터럴이다. 날짜형리터럴 날짜와시간정보를표현하는리터럴이다 Tibero Co., Ltd. All Rights Reserved. 39

40 문자열리터럴 CHAPTER 2 장. SQL 문장의구성요소 문자열리터럴 문자열을표현할때사용하는리터럴. 실제로데이터베이스에저장될때는고정길이로저장된다. 설명 최대 4,000byte까지선언할수있다. 연산식이나조건식에문자열리터럴이사용되면, 문자열리터럴은 CHAR 타입으로취급된다. CHAR 타입의데이터와문자형리터럴을비교하는경우더짧은길이를가진데이터에공백문자를삽입하여비교한다. VARCHAR 타입의데이터와문자형리터럴을비교하는경우공백문자를삽입하지않고비교한다 문자열리터럴사용예 ) 'Tibero' 'Database' '2009/11/11' 2012 Tibero Co., Ltd. All Rights Reserved. 40

41 숫자리터럴 CHAPTER 2 장. SQL 문장의구성요소 숫자리터럴 정수또는실수를표현할때사용하는리터럴이다. 설명 정수리터럴과실수리터럴이있다. 과학적기수법 (Scientific Notation) 으로표기할수있다. 예를들어 8.33e-4 는 을 8.33e+4 는 83,300 을의미한다. e 대신 E 를사용해도 e 를사용할때와의미는동일하다. e 나 E 다음에나오는숫자는지수를나타낸다. 이때지수는 -130 ~ 125 사이의값이어야한다. NUMBER 타입이표현할수있는최대 38 자리의정밀도를초과하는경우숫자리터럴은 NUMBER 타입의최대정밀도에맞춘후맨마지막수를버린다. 또한, NUMBER 타입이표현할수있는범위를넘어서는숫자리터럴이입력되면에러가발생한다. 숫자리터럴사용예 ) e Tibero Co., Ltd. All Rights Reserved. 41

42 간격리터럴 CHAPTER 2 장. SQL 문장의구성요소 간격리터럴 (Interval literal) 특정시간과시간사이의간격을표현하는리터럴이다. 이러한간격은 ' 연과월 ' 로구성된단위나 ' 날짜, 시간, 분, 초 ' 로구성된단위중하나로표현될수있다. 설명 두가지타입으로지원한다. YEAR TO MONTH 간격을연과월로표현. DAY TO SECOND 간격을연과월로표현. YEAR TO MONTH 사용예 ) INTERVAL '12-3' YEAR TO MONTH INTERVAL '123' YEAR(3) INTERVAL '123' MONTH INTERVAL '1' YEAR INTERVAL '1234' MONTH(3 - DAY TO SECOND 사용예 ) INTERVAL '1 2:3:4.567' DAY TO SECOND(3) INTERVAL '1 2:3' DAY TO MINUTE INTERVAL '123 4' DAY(3) TO HOUR INTERVAL '123' DAY(3) INTERVAL '12:34: ' HOUR TO SECOND(7) INTERVAL '12:34' HOUR TO MINUTE INTERVAL '12' HOUR INTERVAL '12:34' MINUTE TO SECOND INTERVAL '12' MINUTE INTERVAL ' ' SECOND(2,6) 2012 Tibero Co., Ltd. All Rights Reserved. 42

43 날짜형리터럴 CHAPTER 2 장. SQL 문장의구성요소 날짜형리터럴 날짜형리터럴은날짜와시간정보를표현하는리터럴이다. 구분 설명 DATE 리터럴날짜와시간정보를표현하는날짜형리터럴이다. TIME 리터럴시간정보를표현하는날짜형리터럴이다. TIMESTAMP 리터럴 DATE 리터럴을확장한날짜형리터럴이다 Tibero Co., Ltd. All Rights Reserved. 43

44 날짜형리터럴 CHAPTER 2 장. SQL 문장의구성요소 DATE 리터럴 날짜와시간정보를표현하는날짜형리터럴이다. 설명 세기, 년, 월, 일, 시, 분, 초의속성이있다. 리터럴변환 TO_DATE('2005/01/01 12:38:20', 'YY/MM/DD HH24:MI:SS') 한쪽에만시간정보가있고다른쪽에는시간정보가없을경우두날짜가같다고비교하기위해서는시간정보를제거하고비교해야하는데이때 TRUNC 함수를사용하면된다. TO_DATE('2005/01/01', 'YY/MM/DD') = TRUNC(TO_DATE('2005/01/01 12:38:20', 'YY/MM/DD HH24:MI:SS')) ANSI 표현 DATE ' ' 시간정보가없다. 기본형식은 'YYYY-MM-DD' 이다. 구분자는하이픈 (-) 외에도여러가지가있다. 슬래시 (/), 별표 (*), 점 (.) 등이있다 Tibero Co., Ltd. All Rights Reserved. 44

45 날짜형리터럴 CHAPTER 2 장. SQL 문장의구성요소 TIME 리터럴 시간정보를표현하는날짜형리터럴이다. 설명 시, 분, 초, 소수점아래의초의속성이있다. TO_TIME 함수를사용하여시간값을직접지정하거나문자리터럴이나숫자리터럴로표현된시간값을 TIME 리터럴로변환할수있다. TO_TIME('12:38: ', HH24:MI:SSXFF') 기본시간형식은초기화파라미터파일에 NLS_TIME_FORMAT 파라미터로정의되어있다. ANSI 표현 TIME '10:23: ' TIME '10:23:10' TIME '10:23' TIME '10' 기본형식은 'HH24:MI:SS.FF9' 이다. 분이하는생략할수있다 Tibero Co., Ltd. All Rights Reserved. 45

46 날짜형리터럴 CHAPTER 2 장. SQL 문장의구성요소 TIMESTAMP 리터럴 DATE 리터럴을확장한날짜형리터럴이다. 설명 ' 년, 월, 일 ' 의날짜와 ' 시, 분, 초 ', ' 소수점아래의초 ' 의속성이있다. TIMESTAMP 리터럴로의변환 TO_TIMESTAMP('09-Aug-01 12:07:15.50', 'DD-Mon-RR HH24:MI:SS.FF') 기본시간형식은초기화파라미터파일에 NLS_TIMESTAMP_FORMAT 파라미터로정의되어있다. ANSI 표현 TIMESTAMP '2005/01/31 08:13:50.112' TIMESTAMP '2005/01/31 08:13:50' TIMESTAMP '2005/01/31 08:13' TIMESTAMP '2005/01/31 08' TIMESTAMP '2005/01/31' 기본형식은 'YYYY/MM/DD HH24:MI:SSxFF' 이다. 날짜부분 ('YYYY/MM/DD') 이외에는생략할수있다. 소수점아래의초 ('FF') 부분은 0~9 자리까지표현할수있다 Tibero Co., Ltd. All Rights Reserved. 46

47 형식문자열 CHAPTER 2 장. SQL 문장의구성요소 형식문자열 형식문자열이란 NUMBER 타입과날짜형타입의값을문자열로변환하기위한형식을정의한것이다. 디폴트시간형식으로되어있지않은문자열이나숫자이외의문자를포함하는문자열은각각날짜형또는 NUMBER 타입의값으로변환할수없다. 이러한경우반드시 TO_DATE, TO_NUMBER 등의변환함수를사용해야한다. 형식문자열은 TO_CHAR, TO_DATE, TO_NUMBER 함수의파라미터로사용된다. 만약함수파라미터로형식문자열이주어지지않으면, 디폴트형식을사용하여변환한다. 형식문자열은종류 NUMBER 타입의형식문자열 날짜형타입의형식문자열 2012 Tibero Co., Ltd. All Rights Reserved. 47

48 형식문자열 CHAPTER 2 장. SQL 문장의구성요소 NUMBER 타입의형식문자열 함수 설명 TO_CHAR NUMBER 타입의값을문자열로변환한다. TO_NUMBER 문자열을 NUMBER 타입의값으로변환한다. NUMBER 타입의값을문자열로변환하기위한형식 NUMBER 타입의값 형식문자열 출력결과 '.00' '.10' ' -.10' ' 0.00' ' 0.10' ' -0.10' ' 0' ' 1' ' 0' ' -0' 2012 Tibero Co., Ltd. All Rights Reserved. 48

49 형식문자열 CHAPTER 2 장. SQL 문장의구성요소 날짜형타입의형식문자열 함수 설명 TO_CHAR 날짜형타입의값을문자열로변환한다. TO_DATE 문자열을날짜형타입의값으로변환한다. 날짜형타입의값을문자열로변환하기위한형식 NUMBER 타입의값형식문자열출력결과 Q 아니오분기를출력한다. (1-4) RM 예달을로마숫자로출력한다. (I-XII) RR RRRR 2012 Tibero Co., Ltd. All Rights Reserved. 49 예 예 SS 예초를출력한다. (0-59) 두자릿수의연도의입력값에따라몇세기인지자동으로조절한다. 반올림한연도. 4 자리혹은 2 자리를입력받는다. 2 자리로입력했을경우는 RR 과똑같이동작한다. SSSSS 예자정을기준으로현재몇초인지출력한다. ( ) WW W 아니오 아니오 X 예점 (.) 을출력한다. 1 년중몇번째주인지출력한다. (1-53). 첫번째주는 1 월 1 일에시작하고 1 월 7 일에끝난다. 1 개월중몇번째주인지출력한다. (1-5). 첫번째주는그달 1 일에시작하고그달 7 일에끝난다.

50 형식문자열 CHAPTER 2 장. SQL 문장의구성요소 날짜형타입의형식문자열 함수 설명 TO_CHAR 날짜형타입의값을문자열로변환한다. TO_DATE 문자열을날짜형타입의값으로변환한다. 날짜형타입의값을문자열로변환하기위한형식 NUMBER 타입의값형식문자열출력결과 Q 아니오분기를출력한다. (1-4) RM 예달을로마숫자로출력한다. (I-XII) RR RRRR 2012 Tibero Co., Ltd. All Rights Reserved. 50 예 예 SS 예초를출력한다. (0-59) 두자릿수의연도의입력값에따라몇세기인지자동으로조절한다. 반올림한연도. 4 자리혹은 2 자리를입력받는다. 2 자리로입력했을경우는 RR 과똑같이동작한다. SSSSS 예자정을기준으로현재몇초인지출력한다. ( ) WW W 아니오 아니오 X 예점 (.) 을출력한다. 1 년중몇번째주인지출력한다. (1-53). 첫번째주는 1 월 1 일에시작하고 1 월 7 일에끝난다. 1 개월중몇번째주인지출력한다. (1-5). 첫번째주는그달 1 일에시작하고그달 7 일에끝난다.

51 의사컬럼 CHAPTER 2 장. SQL 문장의구성요소 의사컬럼이란? 사용자가명시적으로선언하지않아도시스템이자동으로모든테이블에포함시키는컬럼을말한다. 종류 CONNECT_BY_IS_LEAF ROWID ROWNUM LEVEL SELECT rowid,rownum, emp_id FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 51

52 의사컬럼 CHAPTER 2 장. SQL 문장의구성요소 CONNECT_BY_IS_LEAF 의사컬럼 현재로우가 CONNECT BY 조건에의해정의된트리 (Tree) 의리프 (Leaf) 이면 1 을반환하고그렇지않을경우에는 0 을반환한다. 이정보는해당로우가계층구조 (Hierarchy) 를보여주기위해확장될수있는지없는지를나타낸다. 다음은 CONNECT_BY_IS_LEAF 의사컬럼을사용한예이다. SQL> SELECT ENAME, CONNECT_BY_ISLEAF, LEVEL, SYS_CONNECT_BY_PATH(ENAME,'-') "PATH" FROM EMP2 START WITH ENAME = 'Clark' CONNECT BY PRIOR EMPNO = MGRNO ORDER BY ENAME; ENAME CONNECT_BY_ISLEAF LEVEL PATH Alicia 1 3 -Clark-Martin-Alicia Allen 1 3 -Clark-Ramesh-Allen Clark 0 1 -Clark James 1 3 -Clark-Martin-James John 0 3 -Clark-Ramesh-John Martin 0 2 -Clark-Martin Ramesh 0 2 -Clark-Ramesh Ward 1 4 -Clark-Ramesh-John-Ward 2012 Tibero Co., Ltd. All Rights Reserved. 52

53 의사컬럼 CHAPTER 2 장. SQL 문장의구성요소 ROWID 의사컬럼 전체데이터베이스내의하나의로우를유일하게참조하는식별자이다. ROWID 는그로우의디스크의물리적인위치를가리키고있으며, 그로우가삭제될때까지변화되지않는다. Segment# Data File# Data Block# Row# 4 byte 2 byte 4 byte 2 byte ROWID 값을표현하기위한포맷으로는 BASE64 인코딩을이용한다. BASE64 인코딩은 6bit 에포함된숫자를 8bit 문자로나타내는방식으로, 0 ~ 63 까지의숫자를 A ~ Z, a ~ z, 0 ~ 9, +, / 로대치한다. ROWID 를 BASE64 인코딩으로변환하면세그먼트 #, 데이터파일 #, 데이터블록 #, 로우 # 가각각 6, 3, 6, 3byte 로되고, 'SSSSSSFFFBBBBBBRRR' 의형태를갖는다. 예를들어, 세그먼트 # = 100, 데이터파일 # = 20, 데이터블록 # = 250, 로우 # = 0 인 ROWID 는 'AAAABkAAUAAAAD6AAA' 로나타낸다 Tibero Co., Ltd. All Rights Reserved. 53

54 의사컬럼 CHAPTER 2 장. SQL 문장의구성요소 ROWNUM 의사컬럼 SELECT 문장의실행결과로나타나는로우에대하여순서대로번호를부여한다. ROWNUM 이할당되는순서 1 질의를수행한다. 2 질의결과로로우가생성된다. 3 로우를반환하기직전에그로우에 ROWNUM 이할당된다. Tibero RDBMS 는 내부적으로 ROWNUM 카운터를가지고있으며, 카운터값을질의결과의로우에 할당한다. 4 ROWNUM 을할당받은로우에 ROWNUM 에대한조건식을적용한다. 5 조건식을만족하면할당된 ROWNUM 이확정되고, 내부의 ROWNUM 카운터의 값이 1 로증가한다. 6 조건식을만족하지않으면그로우는버려지고, 내부의 ROWNUM 카운터의값은 증가하지않는다. 10 개의로우만을반환하는예 SELECT * FROM EMP WHERE ROWNUM <= 10; 2012 Tibero Co., Ltd. All Rights Reserved. 54

55 의사컬럼 CHAPTER 2 장. SQL 문장의구성요소 ROWNUM 의사컬럼 주의사항 WHRER 절을포함하는모든부질의를처리한다음에 ORDER BY 절을처리한다. 따라서 ORDER BY 절을이용해서항상같은결과를얻을수는없다. 예를들어, 다음의질의는실행할때마다다른결과를얻는다. SELECT * FROM EMP WHERE ROWNUM <= 10 ORDER BY EMPNO; 다음과같이변환하면 ORDER BY 절을먼저처리하게되므로항상같은결과를얻을수있다. SELECT * FROM (SELECT * FROM EMP ORDER BY EMPNO) WHERE ROWNUM <= 10; 다음과같은 SELECT 문장은하나의로우도반환하지않는다. SELECT * FROM EMP WHERE ROWNUM > 1; ROWNUM 값이확정되기전에 ROWNUM에대한조건식이수행되기때문에첫번째로우가 ROWNUM = 1 으로조건식을만족하지않고, 두번째결과로우도 ROWNUM = 1이므로반환되지않는다 Tibero Co., Ltd. All Rights Reserved. 55

56 의사컬럼 CHAPTER 2 장. SQL 문장의구성요소 LEVEL 의사컬럼 계층질의 (Hierarchical Query) 를실행한결과에각로우의트리내계층을출력하기위한컬럼타입이다. 최상위로우의 LEVEL 값은 1 이며, 하위로우로갈수록 1 씩증가한다 Tibero Co., Ltd. All Rights Reserved. 56

57 NULL CHAPTER 2 장. SQL 문장의구성요소 NULL 어떤컬럼에값이없을때그컬럼을 NULL 이라고하거나 NULL 값을가진다고한다. NULL 은 NOT NULL 제약과 PRIMARY KEY 제약이걸리지않은모든데이터타입의칼럼에포함될수있다. 실제값을모르거나아무런의미없는값이필요할때사용할수있다. NULL 과 0 은다르기때문에 NULL 을 0 으로나타내면안된다. 다만문자타입의컬럼에빈문자열 ('') 이들어가면 NULL 로처리된다. 다음연산의결과는 NULL 이다. NULL + 1 = NULL DATA = {1000, 500, NULL, NULL, 1500} AVG(DATA) = ( ) /3 = Tibero Co., Ltd. All Rights Reserved. 57

58 NULL CHAPTER 2 장. SQL 문장의구성요소 NULL 에대한비교조건 NULL 을검사할수있는비교조건은 IS NULL 과 IS NOT NULL 만가능하다. NULL 은데이터가없다는것을의미한다. 때문에 NULL 과 NULL, NULL 과 NULL 이아닌다른값을서로비교할수없다. 다만 DECODE 함수에서는두개의 NULL 을비교할수있다. SQL> SELECT DECODE(NULL, NULL, 1) FROM DUAL; DECODE(NULL,NULL,1) 만일 NULL 에다른비교조건을사용하면, 결과는 UNKOWN 으로나타난다. UNKNOWN 으로판별되는조건은거의대부분 FALSE 처럼처리된다. 그예로 SELECT 문에서 WHERE 절에 UNKNOWN 으로판별되는조건이있을경우반환되는로우가없다. 하지만 UNKNOWN 이 FALSE 와다른점은 UNKNOWN 조건에또다른연산자가더해져도결과는 UNKNOWN 이라는점이다 Tibero Co., Ltd. All Rights Reserved. 58

59 주석 CHAPTER 2 장. SQL 문장의구성요소 주석 SQL 문장과데이터베이스오브젝트에대한주석을작성할수있다. HINT 를제외한주석은 SQL 문장의실행에영향을주지않는다. 주석시작 /*, 주석끝 */ 으로표기하고, 따로공백이나줄바꿈으로내용과구분할필요는없다. -- 로주석의시작을나타내고바로뒤에주석의내용을적는다. SELECT emp_id, emp_name, /* 부서가총무과인직원의명단을출력한다. */ e.dept_id FROM emp e, dept d -- 테이블 WHERE e.dept_id = d.dept_id AND d.dept_name = ' 총무과 AND e.status!= 1; /* 퇴사한사람제외 */ 스키마객체에도주석을삽입할수있다. 즉 COMMENT 명령을사용하여스키마객체인테이블, 뷰, 컬럼에주석을삽입할수있다. 스키마객체에삽입된주석은데이터사전에저장된다 Tibero Co., Ltd. All Rights Reserved. 59

60 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) SQL 문에주석을추가하여 Optimizer 의특정행동을지시할수있다. 힌트는반드시 SELECT, INSERT, UPDATE, DELETE 키워드뒤에만사용할수있다. 문법에맞지않는힌트는주석으로취급한다. (DELETE INSERT SELECT UPDATE) /*+ hint [hint]... */ (DELETE INSERT SELECT UPDATE) --+ hint [hint]... 힌트를사용할때주의할점 힌트는반드시 DELETE, INSERT, SELECT, UPDATE 절뒤에만올수있다. '+' 기호는반드시주석구분자 ('/*' 또는 '--') 바로뒤에공백없이붙여써야한다. 힌트와 '+' 기호사이에공백은있어도되고, 없어도된다. 문법에맞지않는힌트는주석으로취급되며, 에러는발생하지않는다 Tibero Co., Ltd. All Rights Reserved. 60

61 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) 의종류 구분 힌트 질의변형최적화방법접근방법조인순서조인방법병렬처리실체화뷰기타 NO_MERGE, UNNEST, NO_UNNEST, ALL_ROWS, FIRST_ROWS FULL, INDEX, NO_INDEX, INDEX_ASC, INDEX_DESC, INDEX_FFS, NO_INDEX_FFS LEADING, ORDERED, USE_NL, NO_USE_NL, USE_NL_WITH_INDEX, USE_MERGE, NO_USE_MERGE, USE_HASH, NO_USE_HASH PARALLEL, NO_PARALLEL, PQ_DISTRIBUTE REWRITE, NO_REWRITE APPEND, NOAPPEND 2012 Tibero Co., Ltd. All Rights Reserved. 61

62 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) - 질의변형 구분 힌트 특정뷰에대해뷰병합을하지않도록지시하는힌트이다. Tibero RDBMS 에서는뷰병합이디폴트로수행되며, 뷰가병합이가능할경우상위의질의블록과결합해하나의질의블록을형성한다. NO_MERGE 힌트를사용하면이렇게디폴트로수행되는뷰의병합을막을수있다. NO_MERGE SELECT * FROM T1, (SELECT /*+ NO_MERGE */ * FROM T2, T3 WHERE T2.A = T3.B) V WHERE T1.C = V.D 힌트가없었다면뷰가병합되어질의최적화기에서테이블 T1, T2, T3 에대한조인순서와조인방법을고려하게되지만, 위와같이힌트가있을경우는뷰가병합되지못하기때문에 T2 와 T3 가먼저조인되고, 그이후에 T1 이조인된다. UNNEST NO_UNNEST Subquery 를언네스팅하도록지시하는힌트이다. 디폴트로수행하지만, 특정쿼리만언네스팅을하려면초기화파라미터에서언네스팅을해제하면된다. 그러면 UNNEST 힌트를이용할수있다. UNNEST 힌트는부질의블록에명시한다. Subquery 언네스팅을수행하지않도록지시하는힌트이다. 언네스팅을디폴트로수행하며언네스팅이가능한경우부질의를조인으로변환한다. 이때 NO_UNNEST 힌트를사용해서언네스팅을막을수있다. NO_UNNEST 힌트는부질의블록에명시한다 Tibero Co., Ltd. All Rights Reserved. 62

63 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) - 최적화방법 처리과정과결과표시를최적화할수있다. 만약최적화방법이적용된힌트가사용된질의가있다면해당질의에대해서는통계정보와초기화파라미터의최적화방법 (OPTIMIZER MODE) 의값이없는것처럼처리된다. 구분 ALL_ROWS 힌트 최소한의리소스를사용하여전체결과에대한처리량이가장많도록처리과정의최적화방법을선택하는힌트이다. FIRST_ROWS 첫로우부터파라미터로입력된번호의로우까지가장빠르게보여줄수있도록결과표시의최적화방법을선택하는힌트이다 Tibero Co., Ltd. All Rights Reserved. 63

64 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) - 접근방법 접근방법이적용된힌트는질의최적화기가특정접근방법의사용이가능한경우, 그방법을사용하도록명시한다. 만일힌트에서명시한방법을사용할수없는경우에는질의최적화기는그힌트를무시한다. 힌트에명시하는테이블명은 SQL 문에서사용하는이름과동일해야한다. 즉, 테이블이름에대한별칭을사용하였다면, 테이블이름대신에별칭을사용하여야한다. SQL 문에서테이블이름에스키마이름을포함하여명시하였더라도힌트에서는테이블이름만을명시하여야한다 Tibero Co., Ltd. All Rights Reserved. 64

65 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) - 접근방법종류 구분 힌트 FULL 전체테이블을스캔하도록지시하는힌트이다. WHERE 절에명시된조건식에맞는인덱스가있더라도전체테이블스캔을사용한다. INDEX 명시한인덱스를사용하여인덱스스캔을하도록지시하는힌트이다. NO_INDEX INDEX_ASC INDEX_DESC INDEX_FFS 명시한인덱스를사용하는인덱스스캔을하지않도록지시하는힌트이다. 만일 NO_INDEX 힌트와 INDEX 또는 INDEX_ASC, INDEX_DESC 힌트가동일한인덱스를명시한다면질의최적화기는이두힌트를모두무시한다. 명시한인덱스를사용하여인덱스스캔을하도록지시하는힌트이다. 만일인덱스범위스캔을사용하는경우에는인덱스를오름차순으로스캔하도록한다. 현재 Tibero RDBMS 의인덱스스캔의기본동작이오름차순이기때문에 INDEX_ASC 는 INDEX 와동일한작업을수행한다. 분할된인덱스의경우분할된각영역내에서오름차순으로스캔한다. 명시한인덱스를사용하여인덱스스캔을하도록지시하는힌트이다. 만일인덱스범위스캔을사용하는경우에는인덱스를내림차순으로스캔하도록한다. 분할된인덱스의경우분할된각영역내에서내림차순으로스캔한다. 명시한인덱스를사용하는빠른전체인덱스스캔을사용하지않도록지시하는힌트이다 Tibero Co., Ltd. All Rights Reserved. 65

66 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) - 조인순서 LEADING, ORDERED 는조인순서를결정하는힌트이다. LEADING 힌트가 ORDERED 보다질의최적화기를선택할수있는폭이넓어서 LEADING 을사용하는것이좋다. 구분 LEADING 힌트 LEADING 은조인에서먼저조인되어야할테이블의집합을명시하는힌트이다. LEADING 힌트가먼저조인될수없는테이블을포함하는경우무시된다. LEADING 힌트끼리충돌하는경우에는 LEADING, ORDERED 힌트가모두무시된다. 만일 ORDERED 힌트가사용되는경우에는 LEADING 힌트는모두무시된다. ORDERED 는테이블을 FROM 절에명시된순서대로조인하도록지시하는힌트이다. ORDERED 질의최적화기는조인의결과집합의크기에대한정보를추가로알고있다. 사용자가그정보를통해질의최적화기의조인순서를명확히알고있을경우에만 ORDERED 힌트를사용하는것이좋다 Tibero Co., Ltd. All Rights Reserved. 66

67 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) 병렬처리 구분 PARALLEL 힌트 지정한개수의스레드를사용해질의의수행을병렬로진행하도록지시하는힌트이다. NO_PARALLEL 질의의수행을병렬로진행하지않도록지시하는힌트이다. PQ_DISTRIBUTE 조인을포함한질의의병렬처리에서조인될로우의분산방법을지시하는힌트이다. 분산방법으로는 HASH-HASH, BROADCAST-NONE, NONE-BROADCAST, NONE-NONE 이있으며특정한분산방법을선택함으로써병렬처리에서조인의성능을향상시킬수있다 Tibero Co., Ltd. All Rights Reserved. 67

68 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) 실체화뷰 REWRITE 구분 힌트 REWRITE 는해당질의블록에서비용의비교없이실체화뷰를사용하여질의의다시쓰기를하도록지시하는힌트이다. 따라서최종으로는 REWRITE 힌트가사용된질의블록만다시쓰기를한결과와모든블록에서다시쓰기를한결과의비용을비교해서더좋은쪽을질의최적화기가선택하게된다. 그리고실체화뷰의목록이명시된경우에는목록에있는실체화뷰만사용하여질의의다시쓰기를시도한다. NO_REWRITE NO_REWRITE 는해당질의블록에서는질의의다시쓰기를하지않도록지시하는힌트이다 Tibero Co., Ltd. All Rights Reserved. 68

69 힌트 CHAPTER 2 장. SQL 문장의구성요소 힌트 (HINT) 기타 APPEND 구분 힌트 APPEND 는 DML 문장에서직접데이터파일에추가하는삽입방법즉 Direct- Path 방식을수행하도록지시하는힌트이다. Direct-Path 방식은일반적인삽입방법과달리항상새로운데이터블록을할당받아서데이터삽입을수행하며, 버퍼캐시를이용하지않고직접데이터파일을추가하기때문에성능향상에많은이점이있다. NOAPPEND NOAPPEND 는 DML 문장에서 Direct-Path 방식을수행하지않도록지시하는힌트이다 Tibero Co., Ltd. All Rights Reserved. 69

70 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 스키마객체의구성요소 데이터베이스는여러객체로구성된다. 각객체는 ' 데이터베이스 > 사용자 > 스키마 > 스키마객체 의순으로포함관계를갖는다. 하나의데이터베이스는여러사용자가공유하고있다. 또한사용자중에는데이터베이스를관리하기위해특별한권한을부여받고있는 DBA 가있다. 스키마란사용자가소유한객체의모임 (Collection) 이다. Tibero RDBMS 에서는한사용자가하나의스키마만을정의할수있고, 스키마의이름은항상사용자의이름과동일하다. Tibero RDBMS 에서제공하는스키마객체는다음과같다. 테이블 (Table) 인덱스 (Index) 뷰 (View) 시퀀스 (Sequence) 동의어 (Synonym) 2012 Tibero Co., Ltd. All Rights Reserved. 70

71 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 스키마객체의구성요소 데이터베이스는여러객체로구성된다. 각객체는 ' 데이터베이스 > 사용자 > 스키마 > 스키마객체 의순으로포함관계를갖는다. 하나의데이터베이스는여러사용자가공유하고있다. 또한사용자중에는데이터베이스를관리하기위해특별한권한을부여받고있는 DBA 가있다. 스키마란사용자가소유한객체의모임 (Collection) 이다. Tibero RDBMS 에서는한사용자가하나의스키마만을정의할수있고, 스키마의이름은항상사용자의이름과동일하다. Tibero RDBMS 에서제공하는스키마객체는다음과같다. 테이블 (Table) 인덱스 (Index) 뷰 (View) 시퀀스 (Sequence) 동의어 (Synonym) 2012 Tibero Co., Ltd. All Rights Reserved. 71

72 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 테이블 관계형데이터베이스의기본저장단위이다. 다른모든스키마객체는테이블을중심으로정의된다. 테이블은 2 차원행렬 (Matrix) 의형태를갖는다. 테이블은하나이상의컬럼으로구성되며각컬럼은고유의데이터타입을갖는다. 하나의테이블은 0 개이상의로우를포함한다. 각로우는각컬럼에해당하는값을갖는다. EMPNO ENAME ADDR SALARY DEPTNO John Houston Alicia Castle Ramesh Humble James Houston 테이블전체또는일부컬럼에무결성제약조건 (Integrity Constraints) 을선언할수있다. 무결성제약조건은테이블에어떠한로우가삽입되든항상만족되어야한다 Tibero Co., Ltd. All Rights Reserved. 72

73 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 인덱스 인덱스는테이블과별도의저장공간을이용하여그테이블의특정컬럼을빠르게검색할수있도록해주는데이터구조이다. 테이블의소유자는어떤컬럼에대해하나이상의인덱스를생성할수있다. 인덱스특징 구분 자동인덱싱 힌트 Tibero RDBMS 에서는모든테이블의기본키 (Primary Key) 컬럼에대해자동으로인덱스를생성한다. 기본키컬럼이란테이블내의특정로우를유일하게식별할수있는값을갖는컬럼을의미한다. 하나의테이블내에서어떤로우도다른로우와동일한기본키컬럼값을가질수없다. 컬럼의중복허용 인덱스는컬럼값의중복유무에관계없이생성할수있다. 예를들어, 테이블 DEPT 의컬럼 DEPTNO 와같이중복이없는컬럼이나테이블 EMP 의컬럼 DEPTNO 와같이중복이있는컬럼에대해서도인덱스를생성할수있다. 복수컬럼허용 인덱스는하나의컬럼뿐만아니라둘이상의컬럼값을하나로접합하여생성할수도있다. 예를들어, 테이블 EMP 의컬럼 ENAME 과 ADDR 값을합쳐서인덱스를만들수있다. 이러한인덱스는둘이상의컬럼이동시에검색대상이될확률이높은경우에유용하다 Tibero Co., Ltd. All Rights Reserved. 73

74 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 인덱스 인덱스특징 ( 계속 ) 구분 인덱스의적용 힌트 사용자가인덱스를생성하더라도바로사용되지는않는다. 인덱스가생성되면 SQL 질의를수행할때, 질의최적화기가인덱스를사용할때와사용하지않을때의실행효율성을비교하고, 더효율적인방향으로실제질의를실행한다. 따라서, 질의대상테이블에대해서생성된인덱스를이용할것인지, 어떤컬럼에대해서생성된인덱스를이용할것인지는데이터베이스시스템에의하여자동적으로결정된다. 인덱스의관리 인덱스의관리도데이터베이스시스템에서자동적으로이루어진다. 인덱스가생성된후에테이블에하나의로우가삽입되거나갱신, 삭제되면, 그테이블에대하여생성된모든인덱스에서그로우에대한삽입, 갱신, 삭제가이루어진다. 인덱스가더이상필요하지않으면언제라도그인덱스를제거할수있다. 인덱스의제거 인덱스를너무많이생성해놓으면테이블에대한갱신이이루어질때마다인덱스에도함께반영해주어야하므로성능저하의원인이될수있다. 따라서, 불필요한인덱스는제거하는것이바람직하다 Tibero Co., Ltd. All Rights Reserved. 74

75 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 뷰 뷰는 SQL 문장에이름을붙인것으로, 빈번히수행되는질의의결과를테이블형태로이용할수있도록정의한것이다. 뷰는테이블또는다른뷰를이용하여정의할수있으며, SQL 문장내에서일반테이블과동일하게이용할수있다. 뷰가정의된테이블을기반테이블 (base table) 이라한다. 뷰를정의하는이유는, 하나의테이블을여러사용자가함께접근할수있지만사용자에따라테이블내용의일부를숨김으로써정보보안을유지하고자하는것이다 Tibero Co., Ltd. All Rights Reserved. 75

76 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 뷰의특징 구분 힌트 데이터베이스시스템내에서뷰는질의문장을문자열형태로관리한다. 뷰병합 만약뷰를포함한 SQL 문장이입력되면, 데이터베이스시스템은그문장을뷰를포함하지않는기반테이블에대한 SQL 문장으로변환한다. 이러한과정을뷰병합이라고한다. 뷰가이용되는경우는빈번한질의를단순화하고자하는경우이외에, 뷰를정의한기반테이블의일부만을드러내고자하는경우에도사용된다. 뷰의활용과권한 예를들어, 테이블 EMP 의내용중에서컬럼 SALARY 의내용을관리직이아닌일반직원에게드러내고싶지않은경우에, 일반직원이테이블 EMP 를직접접근하지못하고뷰를통해서만접근하도록할수있다. 이러한경우스키마객체를접근할수있는권한 (Authority) 과연관이된다. 즉, 뷰를정의한사용자가일반직원에게그뷰를접근할권한만을부여하고뷰가정의된기반테이블 EMP 를접근할권한을부여하지않으면, 일반직원에게테이블 EMP 내의데이터중에서그뷰에의하여볼수있는일부만을드러내는것이다 Tibero Co., Ltd. All Rights Reserved. 76

77 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 시퀀스 시퀀스는유일한연속적인값을생성해낼수있는스키마객체이다. 이값은보통기본키혹은유일키에값을채워넣을때사용된다. 항상시퀀스의이름에는의사컬럼을붙여서사용한다. SQL 문에서는다음의의사컬럼을통해시퀀스의값을읽어들인다. CURRVAL: 시퀀스의현재값을반환. seq1.currval NEXTVAL: 시퀀스의현재값을증가시키고증가된그값을반환. seq2.nextval 시퀀스사용여부의결정 사용여부 사용가능 위치 SELECT 리스트 부질의혹은뷰의 SELECT 리스트에서는사용할수없다. INSERT 문의부질의의 SELECT 리스트 INSERT 문의 VALUES 절 UPDATE 문의 SET 절 2012 Tibero Co., Ltd. All Rights Reserved. 77

78 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 시퀀스 시퀀스사용여부의결정 ( 계속 ) 사용여부 사용불가능 위치 SELECT, DELETE, UPDATE 문의부질의의내부뷰의내부 DISTINCT가있는 SELECT 문 GROUP BY 절이나 ORDER BY 절이있는 SELECT 문집합연산자 (UNION, INTERSECT, MINUS) 로다른 SELECT 문과연결된 SELECT 문 SELECT 문의 WHERE절 CREATE TABLE 혹은 ALTER TABLE을실행할때컬럼의 DEFAULT 값 CHECK 제약조건 시퀀스를생성할때, 초기값과증감치가결정된다. NEXTVAL 의사컬럼을통해최초로시퀀스에접근하면, 시퀀스는초기값을반환한다. 이후 NEXTVAL 을사용할때마다시퀀스의값은증감치만큼증가하고, 새로증가된값을반환한다. CURRVAL 의사컬럼은항상시퀀스의현재값을반환하며, 이것은가장마지막에사용된 NEXTVAL 이반환한값과같다 Tibero Co., Ltd. All Rights Reserved. 78

79 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 시퀀스 CURRVAL 의사컬럼을사용하기전에, 적어도한번이상은시퀀스에 NEXTVAL 을사용해서초기화를시켜야한다. SQL 문장에사용된 NEXTVAL 의사컬럼은, SQL 문장이처리하는행의단위별로시퀀스의값을증가시킨다. 시퀀스의값을증가시키는행은다음과같다. 최상위레벨의 SELECT 문이출력하는행 INSERT... SELECT 문에서 SELECT 문이선택하는행 CREATE TABLE... AS SELECT 문에서 SELECT 문이선택하는행 UPDATE 문이갱신하는각각의행 VALUES 절을포함한 INSERT 문이삽입하는행 한행에두번이상의 NEXTVAL 이나왔을경우, 시퀀스값은처음한번만증가되며, 증가된그값이다음위치에동일하게사용된다. NEXTVAL 과 CURRVAL 이한행에동시에나왔을경우, 시퀀스값은역시한번만증가되며, NEXTVAL 에사용된값이 CURRVAL 에동일하게사용된다 Tibero Co., Ltd. All Rights Reserved. 79

80 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 동의어 동의어는특정스키마객체에정의하는일종의별칭 (Alias) 이다. 대개긴이름을갖는스키마객체에대하여짧은이름의동의어를정의하거나, 특별한용도의스키마객체에대하여동의어를정의한다. 동의어와뷰의차이점동의어는긴이름대신사용한다는점에서뷰와같다. 그러나뷰는하나의완전한 SQL 문장에대한것이고, 동의어는하나의스키마객체에한정된다는차이점이있다. 또한동의어는뷰와다르게접근권한이별도로설정되지않는다. 만약특정스키마객체에대한접근권한이있다면그에대한동의어에대해서도접근권한을갖게된다. 동의어의사용설정동의어는기본적으로동의어를정의한사용자만이사용할수있으나, 다른모든사용자도함께사용하도록공용으로정의할수도있다. 이렇게모든사용자가사용할수있는동의어를공유동의어라고부른다. Tibero RDBMS에서는 DBA와일반사용자가데이터사전 (Data Dictionary) 의정보를쉽게접근할수있도록, 여러가지시스템뷰를정의하고각각에대한동의어를정의하고있다 Tibero Co., Ltd. All Rights Reserved. 80

81 스키마객체 CHAPTER 2 장. SQL 문장의구성요소 스키마객체의이름 SQL 문장에서스키마객체의이름을명시할때는 ' 따옴표있는식별자 ' 혹은 ' 따옴표없는식별자 - 큰따옴표 (" ") ' 를사용한다. 길이가 30byte 를넘어서는안된다. 예약어는따옴표없는식별자가될수없다. 따옴표를적용하여예약어를식별자로만들수있으나, 권장하지는않는다. 따옴표없는식별자는알파벳, 한글, 숫자, 밑줄 ( _ ), $, # 만사용할수있다. 다만, 숫자, '$', '#' 는첫글자로올수없다. 따옴표있는식별자는공백을포함한어떤문자라도쓸수있다. 다만큰따옴표 (" ") 는 사용할수없다. 하나의네임스페이스안에서서로다른두객체가동일한이름을가질수없다. 하나의테이블내의서로다른컬럼은동일한이름을가질수없다. 서로다른테이블에속해있는컬럼은동일한이름을가질수있다. 한패키지내의서로다른프로시저나함수는인자의개수나데이터타입이다른 경우에한해서동일한이름을가질수있다 Tibero Co., Ltd. All Rights Reserved. 81

82 Chapter 3 장 tbjdbc 활용편 2012 Tibero Co., Ltd. All Rights Reserved

83 tbjdbc? CHAPTER 3 장. tbjdbc 활용편 Java 프로그램안에서 SQL 문장을실행하기위해데이터베이스를 연결해주는 Application 프로그램의인터페이스를 tbjdbc(tibero 의 Java database connectivity) 라한다 Tibero Co., Ltd. All Rights Reserved. 83

84 JDK 설치 CHAPTER 3 장. tbjdbc 활용편 tbjdbc 를사용하기위해서는 JDK1.3 이상이반드시설치되어있어야 한다. JDK 다운로드 JDK 설치방법 Tibero Co., Ltd. All Rights Reserved. 84

85 JDBC 의표준기능 (1/3) CHAPTER 3 장. tbjdbc 활용편 JDBC 1.0 및 JDBC 2.0 지원기능 설명 인터페이스메소드 결과집합기능 - 노트부분참조 - Scrolling 기능 - 결과집합타입 : 다음과같이 3 가지타입으로지정할수있다. Forward-only Scroll-insensitive Scroll-sensitive - Concurrency 타입 : 결과집합에대해다음과같이 2 가지타입을지정할수있다. Read-only Updatable Batch update - 여러개의 DML 문장을한꺼번에처리. - 개별로 INSERT 문을수행하거나준비된문장 (Prepared Statement) 을사용하여파라미터만바꿔가며수행함으로써, 시스템성능향상을지원함. 데이터타입 - BLOB, CLOB 데이터타입을지원 (getclob(), getblob(), setclob(), setblob() 메소드지원 ) 2012 Tibero Co., Ltd. All Rights Reserved. 85

86 JDBC 의표준기능 (2/3) CHAPTER 3 장. tbjdbc 활용편 JDBC 3.0 지원기능 인터페이스메소드 저장점 접속풀링 / 문장풀링 파라미터메타데이터 자동생성키 이름있는파라미터 결과집합의유지성 복수개의결과집합반환 BLOB 와 CLOB 객체에존재하는데이터의수정 - 노트부분참조 설명 - Savepoint 인터페이스를구현하여임의의트랜잭션에대한저장점설정과커밋및롤백기능을제공 - ConnectionPoolDataSource 인터페이스에서설정할수있는내용을지원한다. 사용자는 DataSource 객체에의해 PooledConnection 이어떠한특성을갖고생성될지를결정할수있다. - Prepared Statement) 에서사용한파라미터개수의정보를제공 - SQL 문장을실행한후결과집합으로부터 getgeneratedkeys 함수를사용. 결과로우에대한키또는자동으로생성된컬럼의값을얻는다. - CallableStatement 객체의파라미터를저장할때파라미터이름으로구별할수있는이름있는파라미터 (named parameter) 기능을지원 - 결과집합이열려있는동안에커밋이발생했을때, 결과집합을그대로유지할지아니면닫을지를설정 - 한 SQL 문장이여러개의결과집합을열수있도록지원 - updatexxx API 를통해 BLOB 와 CLOB 객체에포함된데이터를수정하는기능을제공한다 Tibero Co., Ltd. All Rights Reserved. 86

87 JDBC 의표준기능 (3/3) CHAPTER 3 장. tbjdbc 활용편 JDBC 4.0 지원하는기능 인터페이스메소드 XML 데이터타입 자동드라이버검출 국가별캐릭터세트지원 향상된 SQLException - 노트부분참조 설명 - SQLXML 인터페이스를통해 SQL:2003 에추가된 XML 데이터타입을사용할수있다. - 자동으로드라이버를로딩할수있게되어 Class.forName 를사용한 java.sql.driver 클래스의로드없이도드라이버객체를사용할수있다. - 데이터베이스에서별도로지정해사용하는국가별캐릭터세트를지원하기위한 API 가추가되었다. - 연쇄적으로연결된예외를생성할수있게되어보다자세한원인을전달해줄수있으며, 새로운종류의예외타입이추가되었다. 향상된 Blob/Clob 기능 - Blob/Clob 객체를생성 / 해제할수있는 API 를지원한다. SQL ROWID 데이터타입의지원 실제 JDBC 객체에대한접근허용 접속풀링환경에서실제접속상태에대한통지 - RowId 인터페이스를이용하여 SQL ROWID 타입을사용할수있다. - Wrapper 인터페이스를이용하여어플리케이션서버나접속풀링환경에서도실제 JDBC 객체에접근해사용할수있다. - 접속풀링환경에서실제접속이닫히거나유효하지않게되었을때, 그상태를풀링된문장에통지해준다 Tibero Co., Ltd. All Rights Reserved. 87

88 개발과정 CHAPTER 3 장. tbjdbc 활용편 패키지임포트데이터베이스연결 Statement 객체생성질의문수행과 ResultSet 객체받기 ResultSet 객체처리커밋또는롤백수행 ResultSet 객체와 Statement 객체소멸데이터베이스연결해제 2012 Tibero Co., Ltd. All Rights Reserved. 88

89 기본프로그래밍 (1/6) CHAPTER 3 장. tbjdbc 활용편 import java.sql.callablestatement; import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; import java.sql.statement; import java.sql.types; public class JdbcTest { Connection conn; public static void main(string[] args) throws Exception { JdbcTest test = new JdbcTest(); test.connect(); test.executestatement(); test.executepreparedstatement(); test.executecallablestatement(); test.disconnect(); } /*... 기능별멤버함수를구현한다. */ } 2012 Tibero Co., Ltd. All Rights Reserved. 89

90 기본프로그래밍 (2/6) CHAPTER 3 장. tbjdbc 활용편 접속 private void connect() throws SQLException, ClassNotFoundException { Class.forName("com.tmax.tibero.jdbc.TbDriver"); conn = DriverManager.getConnection( "jdbc:tibero:thin:@localhost:8629:tibero","tibero", "tmax"); if (conn == null) { System.out.println("connection failure!"); System.exit(-1); } System.out.println("Connection success!"); } 2012 Tibero Co., Ltd. All Rights Reserved. 90

91 기본프로그래밍 (3/6) CHAPTER 3 장. tbjdbc 활용편 실행 1 private void executestatement() throws SQLException { String droptable = "drop table emp"; String createtable = "create table emp (id number, "+ " name varchar(20), salary number)"; String InsertTable = "insert into emp values(1000, 'Park', 5000)"; Statement stmt = conn.createstatement(); try { stmt.executeupdate(droptable); } catch(sqlexception e) { // if there is not the table } stmt.executeupdate(createtable); stmt.executeupdate(inserttable); stmt.close(); } 2012 Tibero Co., Ltd. All Rights Reserved. 91

92 기본프로그래밍 (4/6) CHAPTER 3 장. tbjdbc 활용편 실행 2 private void executepreparedstatement() throws SQLException { PreparedStatement pstmt = conn.preparestatement("select name from emp where id =?"); pstmt.setstring(1, "1000"); ResultSet rs = pstmt.executequery(); while (rs.next()) { System.out.println(rs.getString(1)); } pstmt.close(); } 2012 Tibero Co., Ltd. All Rights Reserved. 92

93 기본프로그래밍 (5/6) CHAPTER 3 장. tbjdbc 활용편 호출 private void executecallablestatement() throws SQLException { String callsql = " CREATE PROCEDURE testproc +" (ID_VAL IN NUMBER, SAL_VAL IN OUT NUMBER) as " + " BEGIN" + " update emp" +" set salary = SAL_VAL" + " where id = ID_VAL;" + " select salary into SAL_VAL" + " from emp" + " where id = ID_VAl;" + " END;"; String dropproc = "DROP PROCEDURE testproc"; Statement stmt = conn.createstatement(); try { stmt.executeupdate(dropproc); } catch(sqlexception e) { // if there is not the procedure } stmt.executeupdate(callsql); CallableStatement cstmt = conn.preparecall("{call testproc(?,?)}"); cstmt.setint(1, 1000); cstmt.setint(2, 7000); cstmt.registeroutparameter(2, Types.INTEGER); cstmt.executeupdate(); int salary = cstmt.getint(2); System.out.println(salary); stmt.close(); cstmt.close(); } 2012 Tibero Co., Ltd. All Rights Reserved. 93

94 기본프로그래밍 (6/6) CHAPTER 3 장. tbjdbc 활용편 COMMIT & ROLLBACK conn.setautocommit(false); conn.rollback(); conn.commit(); conn.settransactionisolation(connection.transaction_read_uncommited) 접속해제 private void disconnect() throws SQLException { if (conn!= null) conn.close(); } 2012 Tibero Co., Ltd. All Rights Reserved. 94

95 2012 Tibero Co., Ltd. All Rights Reserved. 95 Chapter 4 장데이터를조회하자.

96 SQL 정의 CHAPTER 4 장. 데이터를조회하자. SQL (Structure Query Language) : 구조질의언어 데이터베이스와소통을위해필요한언어 SQL 전송 TIBERO SQL 결과응답 사용자 2012 Tibero Co., Ltd. All Rights Reserved. 96

97 SQL 문장분류 CHAPTER 4 장. 데이터를조회하자. DML 데이터베이스객체내의데이터조회및삽입, 삭제, 변경을위한문장. SELECT, INSERT, UPDATE, DELETE DDL 데이터베이스객체를생성, 변경, 제거하기위한문장. CREATE, ALTER, DROP, RENAME, TRUNCATE DCL 데이터및객체들에대한작업등에대한권한을부여하고취소하기위한문장 GRANT, REVOKE Transaction Control Transaction 종료및취소하기위한문장 COMMIT, ROLLBACK, SAVEPOINT 2012 Tibero Co., Ltd. All Rights Reserved. 97

98 SELECT 를이용한데이터조회 CHAPTER 4 장. 데이터를조회하자. SQL : 문법 SELECT [DISTINCT] 컬럼명 1, 컬럼명 2,... FROM 테이블명 ; Query 및결과예제 SELECT * FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 98

99 WHERE 절이용 CHAPTER 4 장. 데이터를조회하자. SQL : 문법 WHERE 조건 (Condition) Query 및결과예제 SELECT emp_id, emp_name, hiredate FROM employee WHERE emp_name = 'PAUL'; 2012 Tibero Co., Ltd. All Rights Reserved. 99

100 AND CHAPTER 4 장. 데이터를조회하자. SQL : 문법 WHERE 조건 (Condition) AND 조건 (Condition) Query 및결과예제 SELECT emp_id, emp_name, salary FROM employee WHERE salary >= 3000 AND salary <= 4000; 2012 Tibero Co., Ltd. All Rights Reserved. 100

101 OR CHAPTER 4 장. 데이터를조회하자. SQL : 문법 WHERE 조건 (Condition) OR 조건 (Condition) Query 및결과예제 SELECT * FROM employee WHERE dept_id = 10 OR dept_id = 30; 2012 Tibero Co., Ltd. All Rights Reserved. 101

102 BETWEEN AND CHAPTER 4 장. 데이터를조회하자. SQL : 문법 WHERE 컬럼명 BETWEEN value1 AND value2 Query 및결과예제 SELECT * FROM employee WHERE salary BETWEEN 3000 AND 4000; 2012 Tibero Co., Ltd. All Rights Reserved. 102

103 IN CHAPTER 4 장. 데이터를조회하자. SQL : 문법 WHERE 컬럼명 IN (value1, value2,...) Query 및결과예제 SELECT * FROM employee WHERE emp_name IN ('STEVE','PAUL'); 2012 Tibero Co., Ltd. All Rights Reserved. 103

104 IS NULL / NOT CHAPTER 4 장. 데이터를조회하자. SQL : 문법 WHERE 컬럼명 IS [NOT] NULL Query 및결과예제 SELECT * FROM employee WHERE comm IS NULL; 2012 Tibero Co., Ltd. All Rights Reserved. 104

105 LIKE CHAPTER 4 장. 데이터를조회하자. SQL : 문법 WHERE 컬럼명 LIKE [% _]value1[% _] Query 및결과예제 SELECT * FROM employee WHERE emp_name LIKE 'J%'; 2012 Tibero Co., Ltd. All Rights Reserved. 105

106 연산자 CHAPTER 4 장. 데이터를조회하자. = 동일함 ( 같음 ) 을테스트한다.!=, <>, ^= 동일하지않음 ( 같지않음 ) 을테스트한다. >=, >, <=, < 큰경우혹은크거나같은경우의비교테스트를한다. 이와반대의경우도적용된다. AND A AND B 의경우두조건모두를만족해야한다. OR A OR B 의경우두조건중하나를만족해야한다. BETWEEN AND 주어진범위의값에해당하면그값을반환한다. IN 하나이상의동일조건을만족해야한다. LIKE IS NULL (IS NOT NULL) 조건의일부와일치하는경우에적용된다. 할당되지않은값을만족하는경우이다. 할당된값의경우 NOT NULL 을사용한다 Tibero Co., Ltd. All Rights Reserved. 106

107 ORDER BY CHAPTER 4 장. 데이터를조회하자. SQL : 문법 WHERE 컬럼명 ORDER BY [ASC DESC] Query 및결과예제 SELECT * FROM employee WHERE salary >= 5000 ORDER BY salary; 2012 Tibero Co., Ltd. All Rights Reserved. 107

108 GROUP BY CHAPTER 4 장. 데이터를조회하자. GROUP BY 절과집합함수를이용하여다양한데이터조회가능 GROUP BY 절이후의컬럼리스트별로 GROUP 을묶어조회한다. Query 및결과예제 SELECT dept_id, count(*) FROM employee GROUP BY dept_id; 2012 Tibero Co., Ltd. All Rights Reserved. 108

109 HAVING CHAPTER 4 장. 데이터를조회하자. GROUP BY 절과결과로부터특정조건을만족하는값을얻고자할경우 HAVING 절을사용 Query 및결과예제 SELECT dept_id, count(*) FROM employee GROUP BY dept_id HAVING count(*) >= 5; 2012 Tibero Co., Ltd. All Rights Reserved. 109

110 기타 (1/6) CHAPTER 4 장. 데이터를조회하자. 데이터타입 타입종류데이터타입길이설명 CHAR 최대 2000 Byte 고정길이문자데이터타입 VARCHAR 최대 4000 Byte 가변길이문자데이터타입 문자타입 RAW 최대 2000 Byte 임의의바이너리데이터를저장하기위한데 이터타입 LONG 최대 2GB 가변길이문자데이터타입 LONG RAW 최대 2GB 바이너리데이터저장타입 숫자타입 NUMBER 1~38 자리, -37~37 정수또는실수를저장하기위한데이터타입 INTEGER,FLOAT NUMBER 타입과동일 DATE 날짜 + 시간 ( 초 ) 고정길이날짜데이터타입 날짜타입 TIME 시간 ( 소수점 9 자리 ) TIMESTAMP 날짜 + 시간 ( 소수점 9 자리 ) 고정길이시간데이터타입 대용량객체타입 BLOB 최대 4GB 가변길이원시이진데이터 CLOB 최대 4GB 가변길이문자데이터 2012 Tibero Co., Ltd. All Rights Reserved. 110

111 기타 (2/6) CHAPTER 4 장. 데이터를조회하자. 데이터형식 (NUMBER) 형식요소예제결과설명,( 쉼표 ) or G 9,999 9G999 1,234 해당위치에쉼표를표기한다..( 마침표 ) or D 9, , 해당위치에소수점을표기하고지정된자릿수에데이터가없으면 0 을표기한다. $ $9,999 $1,234 숫자의시작에달러문자를표기한다. 0 00,999 01,234 해당되는위치에값이없을경우 0 을표기한다. MI 9999MI 음수부호를표기하는형식요소로문자를숫자로변환시엔음수기호를앞에표기해주고숫자를문자로변환시엔음수기호를뒤에표기한다. PR 9999PR <1234> 음수에대해서숫자를문자로변환할때만음수표시를 < > 로표기한다. S S S 양수 / 음수부호를해당위치에표기한다 Tibero Co., Ltd. All Rights Reserved. 111

112 기타 (3/6) CHAPTER 4 장. 데이터를조회하자. 데이터형식 (DATE) 형식요소예제결과설명 -,.;:/ text YYYY-MM-DD 결과값의해당하는위치에그대로출력된다. D D 4 일주일중몇번째날 (1~7) DAY DAY 수요일요일이름을표기한다. DD DD 07 일자표기 (1~31) DDD DDD 280 일년중몇번째날 (1~366) DY DY 수 축약한요일이름표기 MM MM 10 달을표기 MON MON 10월 축약한달이름표기 MONTH MONTH 10월 달이름표기 Q Q 4 일년중몇번째분기 (1~4) YYYY YYYY 2009 연도 4자리수표기 YEAR YEAR TWO THOUSAND NINE 연도를말로풀어서표기 2012 Tibero Co., Ltd. All Rights Reserved. 112

113 기타 (4/6) CHAPTER 4 장. 데이터를조회하자. 데이터형식 (TIME) 형식요소예제결과설명 FF[1..9] HH:MI:SS,FF3 11:38: 소수점이하자리의초를표시. FF 뒤에명시한숫자의개수만큼소수점이하자릿수가출력된다. FM FM YYYY /MM/DD 2009/10/7 앞뒤공백을제거하고출력하도록하는조절자 HH HH12 HH:MI:SS HH12:MI:SS 11:40:22 시간표기 (1~12) HH24 HH24:MI:SS 23:40:38 시간표기 (0~23) MI HH:MI:SS 11:40:22 시간중분을표기 (0~59) SS HH:MI:SS 11:40:22 시간중초를표기 (0~59) SSSSS SSSSS 자정부터현재몇초 (0~86399) 2012 Tibero Co., Ltd. All Rights Reserved. 113

114 SQL 작성시유의사항 CHAPTER 4 장. 데이터를조회하자. SQL 문은대소문자를구별하지는않지만프로젝트의규율에맞추도록합니다. SQL 문은하나이상의줄에입력할수있지만, 키워드는여러줄에나누어입력할수없습니다. SQL 구문은가로최대길이가 80 컬럼이하가되도록작성하여 SQL 튜닝시또는유지보수를할때쉽게 이해할수있도록한다. 절은일반적으로읽기쉽고편집하기쉽도록다른줄에씁니다. 들여쓰기를사용하면좀더읽기쉬운 SQL 문을작성할수있습니다. 일반적으로키워드는대문자로입력하고테이블이름, 열등다른단어는모두소문자로입력합니다. TAB 과들여쓰기를사용하여좀더읽기쉬운 SQL 로작성하도록합니다 Tibero Co., Ltd. All Rights Reserved. 114

115 2012 Tibero Co., Ltd. All Rights Reserved. 115 Chapter 5 장함수를사용하자.

116 함수정의 / 종류 CHAPTER 5 장. 함수를사용하자. 주어진인수를처리하여결과값을반환한다. SELECT 문을간결하게만들어 Data 조작을쉽고간결하게만든다. 종류 함수 (function) 단일행함수 (Single-Row Functions) 집합함수 (Aggregate Functions) 분석함수 (Analytical Functions) 2012 Tibero Co., Ltd. All Rights Reserved. 116

117 숫자함수 CHAPTER 5 장. 함수를사용하자. 숫자데이터타입의값을조작하여변환된숫자값을반환한다. SQL 예시 결과 SELECT MOD(10,3) Mod FROM dual; 1 SELECT ROUND(18.172,2) Round FROM dual; SELECT ABS(-10) Abs FROM dual; 10 SELECT CEIL(10.1) Ceil FROM dual; 11 SELECT TRUNC(50.627,2) Trunc FROM dual; Tibero Co., Ltd. All Rights Reserved. 117

118 문자함수 CHAPTER 5 장. 함수를사용하자. 문자데이터타입의값을조작하여변환된문자값을반환한다. SQL 예시 SELECT CONCAT('Tmax','Soft') "Concat" FROM dual; SELECT SUBSTR('TmaxSoft',2,5) "Substr" FROM dual; 결과 TmaxSoft maxso SELECT LENGTH('TmaxSoft') "Length" FROM dual; 8 SELECT INSTR('TmaxSoft','a') "Instr" FROM dual; 3 SELECT LOWER('TmaxSoft') "Lower" FROM dual; SELECT UPPER('TmaxSoft') "Upper" FROM dual; SELECT LPAD('TmaxSoft',10,'*') "Lpad" FROM dual; SELECT RPAD('TmaxSoft',10,'*') Rpad" FROM dual; tmaxsoft TMAXSOFT **TmaxSoft TmaxSoft** 2012 Tibero Co., Ltd. All Rights Reserved. 118

119 날짜함수 CHAPTER 5 장. 함수를사용하자. DATE 로지정된데이터타입의값에적용한다. SQL 예시 SELECT ADD_MONTHS(TO_DATE('2009/10/07','YYYY/MM/DD'),1) "Add_months" FROM dual; SELECT ROUND(TO_DATE('2009/10/07','YYYY/MM/DD'),'YEAR') "Round" FROM dual; SELECT TRUNC(TO_DATE('2009/10/07','YYYY/MM/DD'),'YEAR') "Round" FROM dual; 결과 2009/11/ /01/ /01/01 SELECT SYSDATE FROM dual; 현재시스템날짜 SELECT LAST_DAY(SYSDATE) FROM dual; SELECT MONTHS_BETWEEN(LAST_DAY(SYSDATE),SYSDATE) FROM dual; 해당월의마지막일 Tibero Co., Ltd. All Rights Reserved. 119

120 변환함수 CHAPTER 5 장. 함수를사용하자. 데이터타입을변환시켜표현한다. SQL 예시 결과 SELECT TO_CHAR(sysdate) FROM dual; 2009/10/07 SELECT TO_DATE('07/10/2009','DD/MM/YYYY') FROM dual; 2009/10/07 SELECT TO_NUMBER('10000') FROM dual; Tibero Co., Ltd. All Rights Reserved. 120

121 기타함수 (1/4) CHAPTER 5 장. 함수를사용하자. DECODE 함수 SQL : 문법 DECODE(expr, search, result, default) Query 및결과예제 SELECT DISTINCT DECODE(PROD_PID,101,'AnyLink',201,'ProFrame',301,'JEUS',401,'WebtoB',501,'TMAX',601,'TIBERO',' 기타 ') " 제품구분 " FROM PRODUCT; 2012 Tibero Co., Ltd. All Rights Reserved. 121

122 기타함수 (2/4) CHAPTER 5 장. 함수를사용하자. NVL 함수 SQL : 문법 NVL(expr1, expr2) Query 및결과예제 SELECT prod_pid, prod_name, NVL(prod_pid,999) "nvl result" FROM product; 2012 Tibero Co., Ltd. All Rights Reserved. 122

123 기타함수 (3/4) CHAPTER 5 장. 함수를사용하자. NVL2 함수 SQL : 문법 NVL2(expr1, expr2, expr3) Query 및결과예제 SELECT prod_pid, prod_name, NVL2(prod_pid,prod_id,999) "nvl2 result" FROM product; 2012 Tibero Co., Ltd. All Rights Reserved. 123

124 기타함수 (4/4) CHAPTER 5 장. 함수를사용하자. COALESCE 함수 SQL : 문법 COALESCE(expr1, expr2, expr3,...) Query 및결과예제 SELECT comm, COALESCE(comm,1) "COALESCE" FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 124

125 집합함수 (1/4) CHAPTER 5 장. 함수를사용하자. AVG 함수 SQL : 문법 AVG(expr) Query 및결과예제 SELECT AVG(salary) "Avg" FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 125

126 집합함수 (2/4) CHAPTER 5 장. 함수를사용하자. RANK 함수 SQL : 문법 RANK(expr) WITHIN GROUP(ORDER BY expr) Query 및결과예제 SELECT -- 급여가 3000 인사람의상위급여순위를나타낸다. RANK(3000) WITHIN GROUP (ORDER BY salary DESC) "rank" FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 126

127 집합함수 (3/4) CHAPTER 5 장. 함수를사용하자. RANK 함수 ( 계속 ) SQL : 문법 RANK(expr) OVER(query_partition_clause order_by_clause) Query 및결과예제 SELECT emp_id, salary, emp_name, RANK() OVER(ORDER BY salary) "rank" FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 127

128 집합함수 (4/4) CHAPTER 5 장. 함수를사용하자. SUM, MIN, MAX, COUNT, STDDEV 함수 SQL : 문법 SUM(expr), MIN(expr), MAX(expr), COUNT(expr), STDDEV(expr) Query 및결과예제 SELECT -- 연도별입사자의수와최대, 최소급여를조회한다. TO_CHAR(hiredate,'YYYY'), COUNT(emp_id), MAX(salary), MIN(salary) FROM employee GROUP BY TO_CHAR(hiredate,'YYYY'); 2012 Tibero Co., Ltd. All Rights Reserved. 128

129 분석함수 (1/6) CHAPTER 5 장. 함수를사용하자. FIRST_VALUE 함수 SQL : 문법 FIRST_VALUE(expr) OVER (analytic_clause) Query 및결과예제 SELECT -- 전체사원의급여와함께각부서의최고급여를조회한다. emp_id, salary, FIRST_VALUE(salary) OVER (PARTITION BY dept_id ORDER BY salary DESC) "FirstValue" FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 129

130 분석함수 (2/6) CHAPTER 5 장. 함수를사용하자. COUNT 함수 SQL : 문법 COUNT(expr) OVER (analytic_clause) Query 및결과예제 SELECT /* 부서번호가 10인부서직원에대해각직원의급여보다같거나적게받는사람에대한누적합을조회한다. */ emp_id, salary,count(*) OVER (ORDER BY salary) "count" FROM employee WHERE dept_id = 10; 2012 Tibero Co., Ltd. All Rights Reserved. 130

131 분석함수 (3/6) CHAPTER 5 장. 함수를사용하자. SUM 함수 SQL : 문법 SUM(expr) OVER (analytic_clause) Query 및결과예제 SELECT -- 전직원에대한누적급여합계를조회한다. emp_id, emp_name, salary,sum(salary) OVER (ORDER BY emp_id) "sum" FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 131

132 분석함수 (4/6) CHAPTER 5 장. 함수를사용하자. ROW_NUMBER 함수 SQL : 문법 ROW_NUMBER() OVER ( [query_partition_clause] order_by_clause) Query 및결과예제 SELECT -- 부서별급여순위계산하여조회한다. e.emp_id, e.emp_name, d.dept_name, e.salary,row_number() OVER (PARTITION BY d.dept_id ORDER BY salary) row_num" FROM employee e, department d WHERE e.dept_id = d.dept_id; 2012 Tibero Co., Ltd. All Rights Reserved. 132

133 분석함수 (5/6) CHAPTER 5 장. 함수를사용하자. RANK 함수 SQL : 문법 RANK() OVER (order_by_clause) Query 및결과예제 SELECT -- 부서별급여순위계산하여조회한다. e.emp_id, e.emp_name, d.dept_name, e.salary,rank() OVER (PARTITION BY d.dept_id ORDER BY salary) rank" FROM employee e, department d WHERE e.dept_id = d.dept_id; 2012 Tibero Co., Ltd. All Rights Reserved. 133

134 분석함수 (6/6) CHAPTER 5 장. 함수를사용하자. DENSE_RANK 함수 SQL : 문법 DENSE_RANK() OVER ( [query_partition_clause] order_by_clause) Query 및결과예제 SELECT -- 부서별급여순위계산하여조회한다. e.emp_id, e.emp_name, d.dept_name, e.salary,dense_rank() OVER (PARTITION BY d.dept_id ORDER BY salary) rank FROM employee e, department d WHERE e.dept_id = d.dept_id; 2012 Tibero Co., Ltd. All Rights Reserved. 134

135 2012 Tibero Co., Ltd. All Rights Reserved. 135 Chapter 6 장데이터조회고급활용

136 조인의정의 CHAPTER 6 장. 데이터조회고급활용. 조인 (JOIN) 이란? 둘이상의테이블을연결하여데이터를검색하는방법 둘이상의행들의공통된값을사용하여조인한다. 조인유형 (ANSI) American National Standard Institute에서정의한 JOIN 표준안 CROSS JOIN NATURAL JOIN JOIN ~ USING JOIN ~ ON OUTER JOIN 2012 Tibero Co., Ltd. All Rights Reserved. 136

137 SELECT FROM 을이용한조인 CHAPTER 6 장. 데이터조회고급활용. SQL : 문법 SELECT 컬럼명 1, 컬럼명 2 FROM 테이블명 1, 테이블명 2 WHERE 테이블명 1. 컬럼이름 = 테이블명 2. 컬럼이름 Query 및결과예제 SELECT e.emp_id, e.emp_name, d.dept_name FROM employee e, department d WHERE e.dept_id = d.dept_id; 2012 Tibero Co., Ltd. All Rights Reserved. 137

138 JOIN 절을이용한조인 CHAPTER 6 장. 데이터조회고급활용. SQL : 문법 SELECT 컬럼명 1, 컬럼명 2 FROM 테이블명 1 JOIN 테이블명 2 ON 테이블명 1. 컬럼이름 = 테이블명 2. 컬럼이름 Query 및결과예제 SELECT e.emp_id, e.emp_name, d.dept_name FROM employee e JOIN department d ON e.dept_id = d.dept_id; 2012 Tibero Co., Ltd. All Rights Reserved. 138

139 3 개이상의테이블조인 CHAPTER 6 장. 데이터조회고급활용. SQL : 문법 SELECT 컬럼명 1, 컬럼명 2,... FROM 테이블명 1 별칭 1, 테이블명 2 별칭 2, 테이블명 3 별칭 3 WHERE 별칭 1. 컬럼명 1 = 별칭 2. 컬럼명 1 AND 별칭 1. 컬럼명 2 = 별칭 3. 컬럼명 2 Query 및결과예제 SELECT e.emp_name, c.cust_name, o.ord_amount FROM employee e, customer c, orders o WHERE e.emp_id = o.emp_id AND o.cust_id = c.cust_id; 2012 Tibero Co., Ltd. All Rights Reserved. 139

140 여러형태의조인 (1/8) CHAPTER 6 장. 데이터조회고급활용. CROSS JOIN Query 및결과예제 SELECT emp_name FROM employee CROSS JOIN department; 2012 Tibero Co., Ltd. All Rights Reserved. 140

141 여러형태의조인 (2/8) CHAPTER 6 장. 데이터조회고급활용. NATURAL JOIN Query 및결과예제 SELECT emp_id, emp_name, dept_name FROM employee NATURAL JOIN department; 2012 Tibero Co., Ltd. All Rights Reserved. 141

142 여러형태의조인 (3/8) CHAPTER 6 장. 데이터조회고급활용. JOIN ~ USING Query 및결과예제 SELECT e.emp_id, e.emp_name, d.dept_name FROM employee e JOIN department d USING(dept_id); 2012 Tibero Co., Ltd. All Rights Reserved. 142

143 여러형태의조인 (4/8) CHAPTER 6 장. 데이터조회고급활용. JOIN ~ ON Query 및결과예제 SELECT e.emp_id, e.emp_name, d.dept_name FROM employee e JOIN department d ON e.dept_id=d.dept_id 2012 Tibero Co., Ltd. All Rights Reserved. 143

144 여러형태의조인 (5/8) CHAPTER 6 장. 데이터조회고급활용. OUTER JOIN Query 및결과예제 NO NAME 10 AAA 20 BBB T1 테이블 NO NAME 10 ATT 30 CCC T2 테이블 SELECT T1.NO, T1.NAME, T2.NO, T2.NAME FROM T1, T2 WHERE T1.NO = T2.NO; 2012 Tibero Co., Ltd. All Rights Reserved. 144

145 여러형태의조인 (6/8) CHAPTER 6 장. 데이터조회고급활용. OUTER JOIN ( 계속 ) Query 및결과예제 SELECT T1.NO, T1.NAME, T2.NO, T2.NAME FROM T1, T2 WHERE T1.NO(+) = T2.NO; SELECT T1.NO, T1.NAME, T2.NO, T2.NAME FROM T1 RIGHT OUTER JOIN T2 ON T1.NO = T2.NO; 2012 Tibero Co., Ltd. All Rights Reserved. 145

146 여러형태의조인 (7/8) CHAPTER 6 장. 데이터조회고급활용. OUTER JOIN ( 계속 ) Query 및결과예제 SELECT T1.NO, T1.NAME, T2.NO, T2.NAME FROM T1, T2 WHERE T1.NO = T2.NO(+); SELECT T1.NO, T1.NAME, T2.NO, T2.NAME FROM T1 LEFT OUTER JOIN T2 ON T1.NO = T2.NO; 2012 Tibero Co., Ltd. All Rights Reserved. 146

147 여러형태의조인 (8/8) CHAPTER 6 장. 데이터조회고급활용. OUTER JOIN ( 계속 ) Query 및결과예제 SELECT T1.NO, T1.NAME, T2.NO, T2.NAME FROM T1 FULL OUTER JOIN T2 ON T1.NO = T2.NO; 2012 Tibero Co., Ltd. All Rights Reserved. 147

148 SUBQUERY( 하위질의 ) CHAPTER 6 장. 데이터조회고급활용. Query 및결과예제 SELECT emp_id, emp_name, dept_id, salary FROM employee WHERE salary IN ( SELECT MAX(salary) FROM employee GROUP BY dept_id ) ORDER BY dept_id; 2012 Tibero Co., Ltd. All Rights Reserved. 148

149 스칼라 SUBQUERY CHAPTER 6 장. 데이터조회고급활용. Query 및결과예제 SELECT emp_name, salary,case WHEN dept_id = (SELECT dept_id FROM employee WHERE emp_id = ' ') THEN 'PART1' ELSE 'OTHER' END AS "location" FROM employee; 2012 Tibero Co., Ltd. All Rights Reserved. 149

150 INLINE VIEW CHAPTER 6 장. 데이터조회고급활용. Query 및결과예제 SELECT b.emp_id, b.emp_name, b.salary, b.dept_id FROM ( SELECT emp_id FROM employee WHERE salary > (SELECT AVG(salary) FROM employee WHERE dept_id = 10) )a, employee b WHERE a.emp_id = b.emp_id AND b.dept_id!= 20; 2012 Tibero Co., Ltd. All Rights Reserved. 150

151 TOP-N QUERY CHAPTER 6 장. 데이터조회고급활용. Query 및결과예제 SELECT a.emp_id, a.cnt FROM ( SELECT emp_id, count(*) cnt FROM ORDERS GROUP BY emp_id ORDER BY cnt DESC )a WHERE rownum<=3; 2012 Tibero Co., Ltd. All Rights Reserved. 151

152 ROLLUP CHAPTER 6 장. 데이터조회고급활용. SQL : 문법 SELECT 컬럼명, 계산식, 함수... FROM 테이블명 [WHERE 조건 ] [GROUP BY ROLLUP 그룹화할조건 ] Query 및결과예제 SELECT e.emp_name, e.dept_id, ROUND(AVG(e.salary),2) AS "Avg_salary" FROM employee e, department d WHERE e.dept_id = d.dept_id GROUP BY ROLLUP (e.dept_id, e.emp_name); 2012 Tibero Co., Ltd. All Rights Reserved. 152

153 CUBE CHAPTER 6 장. 데이터조회고급활용. SQL : 문법 SELECT 컬럼명, 계산식, 함수... FROM 테이블명 [WHERE 조건 ] [GROUP BY CUBE 그룹화할조건 ] Query 및결과예제 SELECT cust_id, emp_id, SUM(ord_amount) FROM orders GROUP BY CUBE (cust_id, emp_id); 2012 Tibero Co., Ltd. All Rights Reserved. 153

154 GROUPING SETS CHAPTER 6 장. 데이터조회고급활용. 비교정리 ROLLUP(a,b,c) GROUPING SETS( (a,b,c), (a,b), (a), () ) CUBE(a,b,c) GROUPING SETS( (a,b,c), (a,b), (a,c), (b,c), (a), (b), (c), () ) Query 및결과예제 SELECT cust_id, emp_id, SUM(ord_amount) FROM orders GROUP BY GROUPING SETS ((cust_id, emp_id),(cust_id),(emp_id),()); 2012 Tibero Co., Ltd. All Rights Reserved. 154

155 계층질의 CHAPTER 6 장. 데이터조회고급활용. 비교정리 SELECT [LEVEL], 컬럼명 FROM 테이블명 [WHERE 조건 ] [START WITH 계층의시작점이될행을구별하는논리식표현 ] [CONNECT BY 계층을구성할때사용될논리식표현 ] Query 및결과예제 SELECT LPAD(prod_id,level*3,'.') prod_id, prod_name FROM product START WITH PROD_ID = 999 CONNECT BY PRIOR PROD_ID = PROD_PID; 2012 Tibero Co., Ltd. All Rights Reserved. 155

156 조인방식 (1/3) NESTED LOOP JOIN(NLJ) Deptno = 10 TABLE_A d.deptno = e.deptno TABLE_B CHAPTER 6 장. 데이터조회고급활용. SELECT /*+ ORDERED USE_NL(d e) */ e.ename, d.dname, FROM dept d, emp e WHERE d.deptno = e.deptno AND d.deptno = 10 AND e.ename = KING Data Blocks 3 Data Blocks o 1 x 운반단위 Index Range Scan 2 Access By ROWID 4 Access By ROWID o 5 Check ename= KING Index Leaf Blocks Index Leaf Blocks INDEX for DEPT table INDEX for EMP 2012 Tibero Co., Ltd. All Rights Reserved. 156

157 조인방식 (2/3) CHAPTER 6 장. 데이터조회고급활용. MERGE JOIN SELECT /*+ ORDERED USE_MERGE(d e) */ e.ename, d.dname, FROM dept d, emp e ename = KING EMP Data Blocks WHERE d.deptno = e.deptno AND e.ename = KING d.deptno = e.deptno Merge DEPT 1 Full Table Scan 1 Index Range Scan S O R T 4 S O R T Multi-Block IO Count = 8 Index Leaf Blocks 운반단위 5 Data Blocks INDEX for EMP Access By ROWID 2012 Tibero Co., Ltd. All Rights Reserved. 157

158 조인방식 (3/3) CHAPTER 6 장. 데이터조회고급활용. HASH JOIN ename = KING EMP (Probing Table) Data Blocks SELECT /*+ ORDERED USE_HASH(d e) */ e.ename, d.dname, FROM dept d, emp e WHERE d.deptno = e.deptno AND e.ename = KING Hash Table In Hash Memory (HASH_AREA_SIZE) DEPT (Build Input Table) 1 Full Table Scan 1 Index Range Scan 3 2 Multi-Block IO Count = 8 Index Leaf Blocks 2 운반단위 4 Data Blocks INDEX for EMP Access By ROWID 2012 Tibero Co., Ltd. All Rights Reserved. 158

159 기타 CHAPTER 6 장. 데이터조회고급활용. AUTOTRACE SQL : 문법 SET AUTOT[RACE] {OFF ON TRACE[ONLY]} [EXPLAIN] [STATISTICS] Query 및결과예제 SQL> SET AUTOTRACE ON; SQL> SELECT SYSDATE FROM DUAL; SYSDATE /10/13 17:37:23 1 row selected. SQL ID: 57 Plan Hash Value: Explain Plan DPV: _VT_DUAL (1,1) VALUE EVENT_NAME db block gets 0 consistent gets 0 physical reads 0 redo size 0 sorts (disk) 0 sorts (memory) 1 rows processed 2012 Tibero Co., Ltd. All Rights Reserved. 159

160 2012 Tibero Co., Ltd. All Rights Reserved. 160 Chapter 7 장 DML 을활용하자

161 DML 정의 CHAPTER 7 장. DML 을활용하자. Data Manipulation Language 테이블의데이터를추가, 삭제, 변경작업을수행하는명령어이다 Tibero Co., Ltd. All Rights Reserved. 161

162 INSERT 문 CHAPTER 7 장. DML 을활용하자. SQL : 문법 기본 INSERT 문 INSERT INTO 테이블명 ( 컬럼명 1, 컬럼명 2,...) VALUES ( 값 1, 값 2,...) SELECT 문을이용한 INSERT 문 INSERT INTO 테이블명 ( 컬럼명 1, 컬럼명 2,...) SELECT 구문 Multi Table INSERT 문 INSERT [ALL \ FIRST] WHEN 조건 1 THEN INTO 테이블명 1 WHEN 조건 2 THEN INTO 테이블명 2 ELSE INTO 테이블명 0 SELECT 구문 ; 2012 Tibero Co., Ltd. All Rights Reserved. 162

163 UPDATE 문 CHAPTER 7 장. DML 을활용하자. SQL : 문법 기본 UPDATE 문 UPDATE 테이블명 SET 컬럼명 = 값1, 컬럼명 = 값2... [WHERE 조건 ] SUBQUERY를이용한 UPDATE 문 UPDATE 테이블명 SET 컬럼명 = (SELECT 컬럼명 FROM 테이블명 [WHERE 조건 ]) [WHERE 조건 ] 2012 Tibero Co., Ltd. All Rights Reserved. 163

164 DELETE 문 CHAPTER 7 장. DML 을활용하자. 테이블에입력되어있는데이터를삭제할때사용한다. SQL : 문법 DELETE FROM 테이블명 [WHERE 조건 ] 2012 Tibero Co., Ltd. All Rights Reserved. 164

165 MERGE 문 CHAPTER 7 장. DML 을활용하자. UPDATE 와 INSERT 를결합한문장이다. SQL : 문법 MERGE INTO 테이블명 USING {table view subquery} ON ( 조건 ) WHEN MATCHED THEN UPDATE SET 컬럼명 1 = 값 1 [, 컬럼명 2 = 값 2...] WHEN NOT MATCHED THEN INSERT ( 컬럼리스트 ) VALUES ( 값...) Query 예제 MERGE INTO emp_history eh USING employee e ON (e.emp_id = eh.emp_id) WHEN MATCHED THEN UPDATE SET eh.salary = e.salary WHEN NOT MATCHED THEN INSERT VALUES (e.emp_id, sysdate, e.salary); 2012 Tibero Co., Ltd. All Rights Reserved. 165

166 TRIGGER (1/2) CHAPTER 7 장. DML 을활용하자. Type 로우 (row) 및문장 (statement) 로우 타입 설명 테이블에 INSERT, UPDATE, DELETE 가발생하는로우마다트리거의내용이실행되는타입이다. 이타입의트리거는각로우에연산이발생할때마다연산직전또는직후에트리거가실행된다. 문장로우의갯수에상관없이문장단위로한번만실행되는타입이다. BEFORE 및 AFTER 타입 설명 BEFORE 조건문장이실행되기전에트리거의내용이실행되는타입이다. AFTER 조건문장이실행된후트리거의내용이실행되는타입이다 Tibero Co., Ltd. All Rights Reserved. 166

167 TRIGGER (2/2) CHAPTER 7 장. DML 을활용하자. SQL : 문법 CREATE [OR REPLACE] TRIGGER 트리거 _ 이름 {BEFORE AFTER} {INSERT UPDATE DELETE} ON 테이블 _ 이름 [FOR EACH ROW] WHEN ( 조건 _ 제약 ) {[ 선언부 ] BEGIN... END} CALL 함수 _ 혹은 _ 프로시저 _ 이름 ; Trigger 생성예제 CREATE OR REPLACE TRIGGER Log_overflow AFTER UPDATE ON Deck_tbl FOR EACH ROW WHEN (new.count > 1000) BEGIN INSERT INTO Deck_log (Deck_id, Timestamp, New_count, Action) VALUES (:new.deck_no, SYSTIMESTAMP, :new.count, 'overflow'); END; 2012 Tibero Co., Ltd. All Rights Reserved. 167

168 Transaction 이란? CHAPTER 7 장. DML 을활용하자. Transaction BEGIN UPDATE 계좌1 SET 잔고 = 잔고 WHERE 계좌번호 = 1001; UPDATE 계좌2 SET 잔고 = 잔고 WHERE 계좌번호 = 1002; INSERT INTO 이체이력 VALUES( 시퀀스,1001,1002,10000); COMMIT/ROLLBACK; Transaction END 2012 Tibero Co., Ltd. All Rights Reserved. 168

169 LOCK CHAPTER 7 장. DML 을활용하자. Query 및결과예제 Session 1 Session 2 UPDATE employee SET salary = salary + salary * 0.1 WHERE emp_id = 100 UPDATE employee SET salary = salary + salary * 0.2 WHERE emp_id = DATA BASE LOCK 2012 Tibero Co., Ltd. All Rights Reserved. 169

170 2012 Tibero Co., Ltd. All Rights Reserved. 170 Chapter 8 장 tbpsm 을알아보자.

171 OverView CHAPTER 8 장. tbpsm 을알아보자. 개요 SQL 은비절차적 (Non-procedural) 언어로데이터베이스의모든작업을통제하며, 대체로간단하고적은수의명령어로구성되어있다. 따라서데이터구조와알고리즘을몰라도자유롭게 SQL 명령을실행할수있다는장점을갖추고있는반면, 사용자가원하는데이터처리프로그램을작성하려고할때는불편함이따른다. tbpsm 은 Tibero RDBMS 에서제공하는 PSM 프로그램언어및실행시스템이다. 순차적으로원하는결과를얻어야하는프로그램을 SQL 문장만으로작성할수없다는제약때문에 tbpsm 이필요하다 tbpsm 란? Persistent Stored Modules 절차적기능을갖춘확장된 SQL 를생성하는언어이다. 절차형언어 ( 제 3 세대언어 ) 변수와타입 제어구조 프로시저와함수 2012 Tibero Co., Ltd. All Rights Reserved. 171

172 구성요소 (1/7) CHAPTER 8 장. tbpsm 을알아보자. 변수와상수 변수 - 프로그램을작성할때값을나타내는문자나문자들의집합 변수이름변수의타입 [ 제약조건 ] [ 디폴트값정의 ] [ 할당받는대상 ] := [ 할당하는대상 ] -- 변수선언 id NUMBER; productname VARCHAR2(20) := 'Tibero RDBMS'; -- 변수할당 grade := calculate_the_grade('darwin'); 상수 - 프로그램이수행되는동안은변하지않는값을나타내는데이터 변수이름 CONSTANT 변수의타입 := [ 디폴트값정의 ] -- 상수선언, 값할당 PI CONSTANT NUMBER := ; 2012 Tibero Co., Ltd. All Rights Reserved. 172

173 구성요소 (2/7) CHAPTER 8 장. tbpsm 을알아보자. 제어구조 tbpsm 은프로그램실행중에발생되는조건에따라특정작업을수행하거나반복적인작업을수행하는제어구조 (Control Structure) 를제공한다. 선택적 (selective) 제어구조 - IF 문과 CASE 문 반복제어구조 (iterative structure) - LOOP 문, WHILE 문, FOR 문 IF 문예시 DECLARE evaluation_score NUMBER; BEGIN SELECT comm into evaluation_score FROM employee WHERE emp_id = ; bonus.'); END; IF evaluation_score > 80 THEN DBMS_OUTPUT.PUT_LINE('This person gets a salary bonus.'); ELSE DBMS_OUTPUT.PUT_LINE('This person does not get a salary END IF; 2012 Tibero Co., Ltd. All Rights Reserved. 173

174 구성요소 (3/7) CHAPTER 8 장. tbpsm 을알아보자. 서브프로그램과패키지 서브프로그램 프로시저 (procedure) 와함수 (function) 를제공 tbpsm의프로그램구조와마찬가지로선언부, 실행부, 예외처리부로구성된다. 서브프로그램작성예시 CREATE [OR REPLACE] PROCEDURE check_reg_number(name VARCHAR2) IS id NUMBER; invalid_id exception; BEGIN SELECT emp_id INTO id FROM employee WHERE emp_name = name; IF id < THEN raise invalid_id; END IF; DBMS_OUTPUT.PUT_LINE('Correct'); EXCEPTION WHEN invalid_id THEN DBMS_OUTPUT.PUT_LINE('Invalid registration number'); END; 2012 Tibero Co., Ltd. All Rights Reserved. 174

175 구성요소 (4/7) CHAPTER 8 장. tbpsm 을알아보자. 서브프로그램과패키지 패키지 (Package) 는서브프로그램과변수, 상수의집합이라할수있다. 즉, 관련된기능을그룹으로묶어사용할수있어프로그램을관리하기가쉬우며, 사용시점에일시에메모리에로드되므로빠른성능을제공한다. 또한모듈간의의존성축소화를위해서도사용된다. 서브프로그램과변수, 상수의집합 선언부 (specification) 와구현부 (body) 로구성된다. Package 선언부작성예시 CREATE OR REPLACE PACKAGE book_manager IS book_cnt NUMBER; PROCEDURE add_new_book(v_author VARCHAR2, v_name VARCHAR2,publish_year DATE); PROCEDURE remove_lost_book(v_author VARCHAR2, v_name VARCHAR2); FUNCTION search_book_position(v_author VARCHAR2,v_name VARCHAR2) RETURN NUMBER; FUNCTION get_total_book_cnt RETURN NUMBER; END; 2012 Tibero Co., Ltd. All Rights Reserved. 175

176 구성요소 (5/7) CHAPTER 8 장. tbpsm 을알아보자. Package 구현부작성예시 CREATE OR REPLACE PACKAGE BODY book_manager IS PROCEDURE add_new_book(v_author VARCHAR2, v_name VARCHAR2,publish_year DATE) IS BEGIN IF substr(v_name, 1, 1) >= 'a' AND substr(v_name, 1, 1) < 'k' THEN INSERT INTO books VALUES (1, v_author, v_name, publish_year); BEGIN END; ELSE END IF; COMMIT; book_cnt := book_cnt + 1; INSERT INTO books VALUES (2, v_author, v_name, publish_year); END; PROCEDURE remove_lost_book(v_author VARCHAR2, v_name VARCHAR2) IS BEGIN DELETE FROM books WHERE author = v_author AND name = v_name; COMMIT; END; FUNCTION search_book_position(v_author VARCHAR2, v_name VARCHAR2) RETURN NUMBER IS book_position NUMBER; BEGIN SELECT kind INTO book_position FROM books WHERE author = v_author AND name = v_name; RETURN book_position; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('NOT EXIST...SORRY'); RAISE; END; FUNCTION get_total_book_cnt RETURN NUMBER IS BEGIN RETURN book_cnt; END; book_cnt := 0; 2012 Tibero Co., Ltd. All Rights Reserved. 176

177 구성요소 (6/7) CHAPTER 8 장. tbpsm 을알아보자. 커서 SQL 문장을처리한후얻은결과집합에대한포인터이다. 커서사용예시 DECLARE CURSOR c1 IS SELECT * FROM employee; BEGIN OPEN c1; LOOP FETCH c1 INTO emp_id, emp_name, hiredate, salary, comm, dept_id; EXIT WHEN c1%notfound; END LOOP; END; 2012 Tibero Co., Ltd. All Rights Reserved. 177

178 구성요소 (7/7) CHAPTER 8 장. tbpsm 을알아보자. 에러처리 tbpsm 프로그램은실행중에에러가발생할수있으며, 이러한에러를예외상황이라한다. 예외상황 (exception) 을처리하기위한루틴을에러처리루틴 (error handling routine) 이라고한다. 에러처리예시 DECLARE no_bonus exception; the_sales NUMBER := 12000; BEGIN IF the_sales < THEN raise no_bonus; END IF; DBMS_OUTPUT.PUT_LINE('Your bonus is $' the_sales * 0.1); EXCEPTION WHEN no_bonus THEN DBMS_OUTPUT.PUT_LINE('Sorry, increase the sales'); END; 2012 Tibero Co., Ltd. All Rights Reserved. 178

179 프로그램구조 CHAPTER 8 장. tbpsm 을알아보자. 블록 (block) 구조로이루어져있다. 하나의블록은크거나작은하나의작업을수행하는모듈이다. 구성 선언부 실행코드부 에러처리부 예제 DECLARE -- 선언부 name varchar(32); BEGIN -- 실행코드부 SELECT ename INTO name FROM emp WHERE empno = 100; EXCEPTION -- 에러처리부 WHEN NO_DATA_FOUND THEN dbms_output.put_line('employee not exist'); END; 2012 Tibero Co., Ltd. All Rights Reserved. 179

180 tbpsm 문장의구성요소 (1/3) CHAPTER 8 장. tbpsm 을알아보자. 식별자 tbpsm 프로그램의구성요소 ( 변수, 상수, 레이블, 커서, 함수, 패키지등 ) 의이름을식별자라한다. 특징 알파벳문자 ( 대문자와소문자 ), 한글, 숫자, $, _, # 를사용하여만든다. 알파벳문자또는한글로시작해야한다. 대문자와소문자를구분하지않는다. 최대길이는 255byte 이다. 유효한식별자의예 x employee_# room_num Local 유효하지않은식별자의예 abc=xyz -- 허가되지않은기호 ( 예 : =) 를포함한경우 _under_departs -- 알파벳문자로시작하지않은경우 Date Year -- 허가되지않은기호 ( 예 : 공백문자 ) 를포함한경우 000_name -- 알파벳문자로시작하지않은경우 2012 Tibero Co., Ltd. All Rights Reserved. 180

181 tbpsm 문장의구성요소 (2/3) CHAPTER 8 장. tbpsm 을알아보자. 분리자 분리자는식별자를구분하기위해사용한다. 일부분리자는연산자의역할도수행한다. 기호의미기호의미기호의미 + 덧셈, 항목구분 <= - 뺄셈. 컴포넌트구분 >= * 데이터베이스링크표시 := 대입 / 나눗셈 문자열분리자.. 범위 = 등호 인용된문자열분리자 크지않다 ( 보다작거나같다 ) 작지않다 ( 보다크거나같다 ) 문자열결합 < 부등호 ( 보다작다 ) : 바인드변수표시 << 레이블 ( 왼쪽 ) > 부등호 ( 보다크다 ) ** 지수 >> 레이블 ( 오른쪽 ) ( 괄호 ( 왼쪽 ) <> 같지않다 -- 단일라인주석 ) 괄호 ( 오른쪽 )!= 같지않다 /* 다중라인 ( 왼쪽 ) ; 문장의끝표시 ~= 같지않다 */ 다중라인 ( 오른쪽 ) % 속성표시 ^= 같지않다 2012 Tibero Co., Ltd. All Rights Reserved. 181

182 tbpsm 문장의구성요소 (3/3) CHAPTER 8 장. tbpsm 을알아보자. 상수 주석 하나또는그이상의문자를사용하여어떤값자체를표현하는경우를상수 (literal) 라한다. 상수는한번표시되면변하지않고, 숫자상수, 문자상수, 문자열상수, 날짜상수, 진리 (boolean) 상수등으로분류된다. tbpsm 이인식하지않는문자열 단일라인주석 -- 사용한다. 다중라인주석 /* */ 사용한다. DECLARE guest_id BINARY_INTEGER; -- 고객을식별하기위한 ID guest_name VARCHAR2(100); -- 고객의이름, 길이는 VARCHAR2 타입의 100자리 BEGIN INSERT INTO add_books (id, name) VALUES (guest_id, guest_name); /* guest_id 와 guest_name 으로입력된정보를 add_books 테이블에삽입한다. */ END; 2012 Tibero Co., Ltd. All Rights Reserved. 182

183 tbpsm 의데이터타입 (1/2) CHAPTER 8 장. tbpsm 을알아보자. 스칼라타입 그룹 NUMERIC CHARACTER / STRING DATETIME / INTERVAL BOOLEAN 서브타입 NUMBER, DEC, DECIMAL, DOUBLE PRECISION, FLOAT, INTEGER, INT, NATURAL, NATURALN, NUMERIC, REAL, POSITIVE, POSITIVEN, SMALLINT, SIGNTYPE, PLS_INTEGER, BINARY_INTEGER, BINARY_FLOAT, BINARY_DOUBLE VARCHAR2, VARCHAR, CHAR, CHARACTER, LONG, STRING, RAW, ROWID, LONG RAW DATE, TIMESTAMP, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND BOOLEAN 복합타입 그룹 - RECORD, VARRAY, TABLE 서브타입 2012 Tibero Co., Ltd. All Rights Reserved. 183

184 tbpsm 의데이터타입 (2/2) CHAPTER 8 장. tbpsm 을알아보자. 참조타입 그룹 - REF CURSOR 서브타입 대용량객체형타입 그룹 - CLOB, BLOB 서브타입 기타타입 그룹 - %TYPE, %ROWTYPE 서브타입 2012 Tibero Co., Ltd. All Rights Reserved. 184

185 데이터타입의변환 CHAPTER 8 장. tbpsm 을알아보자. 명시적 (explicit) 변환 명시적변환은시스템변환함수를사용하여변환하는것을말한다. TO_CHAR, TO_DATE, TO_CLOB, TO_TIMESTAMP, TO_NUMBER RAWTOHEX, HEXTORAW, CHARTOROWID, ROWIDTOCHAR 묵시적 (implicit) 변환 묵시적변환은변수사이의대입등에서필요하다고판단될경우자동으로일어나는변환을말한다. 예시 SQL> CREATE TABLE emp (id NUMBER, current_credits NUMBER(3)); SQL> INSERT INTO emp VALUES (1004, 2);... SQL> DECLARE cur_cred VARCHAR2(5); BEGIN SELECT current_credits INTO cur_cred FROM emp WHERE id = 1004; END; 2012 Tibero Co., Ltd. All Rights Reserved. 185

186 데이터변수의선언과참조영역 (1/3) CHAPTER 8 장. tbpsm 을알아보자. 변수선언 변수이름입력후데이터타입정의 변수에초기값을할당할수있으며, 상수로초기값을선언할수도있다. 예시 radius REAL := 1.0; pi CONSTANT REAL := ; area REAL NOT NULL := 0.0; SUBTYPE Single IS NUMBER(1, 0) NOT NULL; 2012 Tibero Co., Ltd. All Rights Reserved. 186

187 데이터변수의선언과참조영역 (2/3) CHAPTER 8 장. tbpsm 을알아보자. 변수의참조영역 변수의참조영역 (scope) 은프로그램의일부로서, 한프로그램내에서해당변수에접근할수있는영역을의미한다. DECLARE BEGIN END; employee_num NUMBER; DECLARE employee_name VARCHAR2(100); BEGIN employee_num = '100'; employee_name = 'Peter';... END; DECLARE employee PLS_INTEGER; BEGIN... a... employee := 100; DECLARE employee VARCHAR2(255);... b... BEGIN... c... employee := 'John'; END;... d... employee := employee + 10;... e... END;... f Tibero Co., Ltd. All Rights Reserved. 187

188 데이터변수의선언과참조영역 (3/3) CHAPTER 8 장. tbpsm 을알아보자. 변수의참조영역 서브블록내에서는외부블록에서선언된 employee 변수를사용할수없다. 단사용하고자한다면외부블록에레이블을붙여서사용해야한다. <<first_block>> DECLARE employee PLS_INTEGER; BEGIN employee := 100; DECLARE employee VARCHAR2(255); BEGIN employee := 'Susan'; first_block.employee := 200; END; employee := employee + 10; END; 2012 Tibero Co., Ltd. All Rights Reserved. 188

189 연산자 CHAPTER 8 장. tbpsm 을알아보자. CASE 연산자 name := CASE order WHEN 1 THEN 'Mercury' WHEN 2 THEN 'Venus' WHEN 3 THEN 'Earth'... ELSE 'No Such Planet' END; name := CASE WHEN 1 <= order and order <= 2 THEN 'Inner Planet' WHEN order = 3 THEN 'Earth' WHEN 4 <= order and order <= 9 THEN 'Outer Planet' ELSE 'No Such Planet' END; 대입연산자 DECLARE local_01 VARCHAR2(100); BEGIN local_01 := 'Seoul'; END; 2012 Tibero Co., Ltd. All Rights Reserved. 189

190 제어구조 (1/8) CHAPTER 8 장. tbpsm 을알아보자. 조건구조 IF, CASE 반복구조 LOOP 단순구조 GOTO 2012 Tibero Co., Ltd. All Rights Reserved. 190

191 제어구조 (2/8) CHAPTER 8 장. tbpsm 을알아보자. IF 문 형태 IF-THEN IF-THEN-ELSE IF-THEN-ELSEIF 설명한가지경우만을선택하여사용하는가장단순한형태두가지중에서하나를선택하여사용다양한경우에서하나를선택하여사용 IF 조건식 THEN 실행문 END IF; If 조건식 THEN 실행문 -1 ELSE 실행문 -2 END IF; If 조건식 THEN 실행문 -1 ELSIF 조건식 THEN 실행문 ELSIF 조건식 THEN 실행문 -n END IF; 2012 Tibero Co., Ltd. All Rights Reserved. 191

192 제어구조 (3/8) CHAPTER 8 장. tbpsm 을알아보자. CASE 문 CASE 표현식 WHEN 연산식 THEN 실행문 -1 WHEN 연산식 THEN 실행문 WHEN 연산식 THEN 실행문 -n END CASE; CASE WHEN 조건식 THEN 실행문 -1 WHEN 조건식 THEN 실행문 WHEN 조건식 THEN 실행문 -n END CASE; CASE employee_grade WHEN 'A' THEN pay_bonus_a(employee_num); WHEN 'B' THEN pay_bonus_b(employee_num); WHEN 'C' THEN pay_bonus_c(employee_num); ELSE check_grade(employee_num); END CASE; DECLARE value PLS_INTEGER := 0; result VARCHAR2(10); BEGIN CASE WHEN value = 0 THEN result := 'true'; WHEN value!= 0 THEN result := 'false'; END CASE; DBMS_OUTPUT.PUT_LINE( 'Is the value Zero? ' result ); END; / 2012 Tibero Co., Ltd. All Rights Reserved. 192

193 제어구조 (4/8) CHAPTER 8 장. tbpsm 을알아보자. LOOP 문 형태단순 LOOP FOR-LOOP WHILE-LOOP 단순히반복을계속하는 LOOP 문 조건을부여할수있는 LOOP 문 조건을부여할수있는 LOOP 문 설명 LOOP 실행문 END LOOP; FOR loop_counter IN low_bound..high_bound LOOP 실행문 END LOOP; WHILE 조건식 LOOP 실행문 END LOOP; 2012 Tibero Co., Ltd. All Rights Reserved. 193

194 제어구조 (5/8) CHAPTER 8 장. tbpsm 을알아보자. LOOP 문사용예 LOOP v_order := v_order + 1; IF v_order > 9 THEN EXIT; END IF; END LOOP; LOOP v_order := v_order + 1; EXIT WHEN v_order > 9; END LOOP; <<LOOP_OUT>> LOOP <<LOOP_IN>> LOOP v_order := v_order + 1; EXIT LOOP_OUT WHEN v_order > 9;... a... END LOOP <<LOOP_IN>>; END LOOP <<LOOP_OUT>>;... b Tibero Co., Ltd. All Rights Reserved. 194

195 제어구조 (6/8) CHAPTER 8 장. tbpsm 을알아보자. LOOP 문사용예 FOR box_num IN REVERSE LOOP box_weight := box_num * 10; END LOOP; WHILE TRUE LOOP 실행문집합 END LOOP; DECLARE low_value BINARY_INTEGER := 10; high_value BINARY_INTEGER := 50; box_weight NUMBER; BEGIN FOR box_num IN low_value..high_value LOOP box_weight := box_num * 10; END LOOP; END; 2012 Tibero Co., Ltd. All Rights Reserved. 195

196 제어구조 (7/8) CHAPTER 8 장. tbpsm 을알아보자. GOTO 문 GOTO 문이실행되면 GOTO 문에명시된레이블을찾아서해당실행문이나블록으로제어를이동한다. LABEL 문이 GOTO 문보다먼저올수있다. EXIT 문 GOTO lable; EXIT [ 레이블 ]; BEGIN <<outer>> FOR out_index IN LOOP <<inner>> FOR inner_index IN LOOP IF inner_index > out_index THEN EXIT outer; END IF; END LOOP inner; END LOOP outer; END; 2012 Tibero Co., Ltd. All Rights Reserved. 196

197 제어구조 (8/8) CHAPTER 8 장. tbpsm 을알아보자. NULL 문 NULL 문은프로그램상에명시되어도실제로는아무런일도발생하지않는다. 프로그램을설계할때서브프로그램의내용을일시적으로 NULL 문으로대체경우 제어구조를작성하면서실행문을 NULL 문으로대체하는경우 DECLARE tmp_current_guest BINARY_INTEGER; tmp_max_guest BINARY_INTEGER; PROCEDURE raise_guest_max (current_guest BINARY_INTEGER) IS BEGIN NULL; END; BEGIN SELECT current_guest, max_guest INTO tmp_current_guest, tmp_max_guest FROM guest WHERE local = 'SEOUL'; IF tmp_current_guest > tmp_max_guest THEN raise_guest_max (tmp_current_guest); ELSE NULL; END IF; END; 2012 Tibero Co., Ltd. All Rights Reserved. 197

198 복합타입 (1/5) CHAPTER 8 장. tbpsm 을알아보자. tbpsm이제공하는스칼라타입의집합이다. 일반적인프로그래밍언어의구조체에해당한다. 종류 컬렉션 (collection) 타입 테이블 (nested table), 배열 (varray) 레코드 (record) 2012 Tibero Co., Ltd. All Rights Reserved. 198

199 복합타입 (2/5) CHAPTER 8 장. tbpsm 을알아보자. 컬렉션타입 테이블 TYPE name IS TABLE OF type [NOT NULL]; DECLARE TYPE kind_tab IS TABLE OF VARCHAR2(10) NOT NULL; kinds kind_tab; BEGIN kinds := kind_tab('math', 'physics', 'history', 'science'); END; DECLARE TYPE class_tab IS TABLE OF VARCHAR2(10); classes class_tab := class_tab('math', 'physics', 'science'); BEGIN classes(3) := 'history'; IF classes(1) IS NULL THEN DBMS_OUTPUT.PUT_LINE('I hate this class'); END IF; DBMS_OUTPUT.PUT_LINE(classes(3) ' is my favorite class'); END; / history is my favorite class PSM completed 2012 Tibero Co., Ltd. All Rights Reserved. 199

200 복합타입 (3/5) CHAPTER 8 장. tbpsm 을알아보자. 컬렉션타입 배열 TYPE name IS VARRAY(limit) OF type [NOT NULL]; DECLARE TYPE class_arr IS VARRAY(10) OF VARCHAR2(10) NOT NULL; classes class_arr; BEGIN classes := class_arr('math', 'physics', 'history', 'science'); END; DECLARE TYPE class_arr IS VARRAY(10) OF VARCHAR2(10); classes class_arr := class_arr('math', 'physics', 'art'); BEGIN classes(3) := 'history'; IF classes(1) IS NULL THEN DBMS_OUTPUT.PUT_LINE('I hate this class'); END IF; DBMS_OUTPUT.PUT_LINE(classes(3) ' is my favorite class'); END; / history is my favorite class PSM completed 2012 Tibero Co., Ltd. All Rights Reserved. 200

201 복합타입 (4/5) CHAPTER 8 장. tbpsm 을알아보자. 컬렉션타입 컬렉션함수와프로시저 구분이름설명 컬렉션함수 프로시저 EXISTS COUNT LIMIT FIRST, LAST PRIOR, NEXT EXTEND TRIM DELETE 컬렉션함수는항상반환값을갖는다. 프로시저는반환값을갖지않는다. 예외상황 구분 COLLECTION_IS_NULL NO_DATA_FOUND SUBSCRIPT_BEYOND_COUNT SUBSCRIPT_OUSIDE_LIMIT VALUE_ERROR 설명 초기화되지않은컬렉션변수에접근하는경우 DELETE 프로시저에의해제거된구성요소에접근하는경우인덱스가구성요소의개수를초과한값으로주어진경우인덱스가허용범위를벗어난경우인덱스가 NULL이거나숫자의형태로변환이안되는경우 2012 Tibero Co., Ltd. All Rights Reserved. 201

202 복합타입 (5/5) CHAPTER 8 장. tbpsm 을알아보자. 레코드 관련있는구성요소의집합 일반적인프로그래밍언어의구조체와동일 레코드에소속된모든구성요소의타입이서로같을필요가없다. 필드가다시레코드를포함할수도있다. TYPE rec_name IS RECORD (field1 field1_type[, field2 field2_type...]); DECLARE music_info musics%rowtype; BEGIN SELECT * INTO music_info FROM musics WHERE kind = 'POP'; DBMS_OUTPUT.PUT_LINE(music_info.title); END; 2012 Tibero Co., Ltd. All Rights Reserved. 202

203 서브프로그램 (1/4) CHAPTER 8 장. tbpsm 을알아보자. 서브프로그램 (subprogram) 은다른 tbpsm 프로그램내에서호출할수 있는프로그램블록이다. 장점 모듈성 (modularity) 재사용성 (reusability), 관리의편의성 (maintainability) 추상화 (abstraction) 구분 프로시저 (procedure) 함수 (function) 2012 Tibero Co., Ltd. All Rights Reserved. 203

204 서브프로그램 (2/4) CHAPTER 8 장. tbpsm 을알아보자. 프로시저 반환값이없다. 문법 [CREATE [OR REPLACE]] PROCEDURE 프로시저 _ 이름 [( 파라미터 [, 파라미터 ])] [AUTHID {DEFINER CURRENT_USER}] {AS IS} [PRAGMA AUTONOMOUS_TRANSACTION;] [ 선언부 ] BEGIN [ 실행부 ] [ 예외처리부 ] END; 2012 Tibero Co., Ltd. All Rights Reserved. 204

205 서브프로그램 (3/4) CHAPTER 8 장. tbpsm 을알아보자. 프로시저 예제 CREATE OR REPLACE PROCEDURE NEW_EMP (ename VARCHAR2, deptno NUMBER) IS salary NUMBER; deptno_not_found EXCEPTION; BEGIN IF deptno = 5 THEN salary := 30000; ELSIF deptno = 6 THEN salary := 35000; ELSE RAISE deptno_not_found; END IF; INSERT INTO EMP (ENAME, SALARY, DEPTNO) VALUES (ename, salary, deptno); EXCEPTION WHEN deptno_not_found THEN -- Report Unknown Deptno ROLLBACK; END NEW_EMP; 2012 Tibero Co., Ltd. All Rights Reserved. 205

206 서브프로그램 (4/4) CHAPTER 8 장. tbpsm 을알아보자. 함수 반환값이있다. 따라서 RETURN 문이반드시삽입되어야한다. 문법 [CREATE [OR REPLACE]] FUNCTION 함수 _ 이름 [( 파라미터 [, 파라미터 ])] RETURN 반환 _ 타입 [AUTHID {DEFINER CURRENT_USER}] {AS IS} [PRAGMA AUTONOMOUS_TRANSACTION;] [ 선언부 ] BEGIN [ 실행부 ] RETURN 반환값 ; [ 예외처리부 ] END; CREATE OR REPLACE FUNCTION NEW_EMP (ename VARCHAR, deptno INT) RETURN NUMBER IS... BEGIN... RETURN salary; EXCEPTION... END NEW_EMP; 2012 Tibero Co., Ltd. All Rights Reserved. 206

207 패키지 (1/3) CHAPTER 8 장. tbpsm 을알아보자. 패키지 (package) 는개념적으로관련있는 tbpsm 의변수나타입, 서브프로그램을그룹화하여모아놓은객체이다. 구조 선언부 CREATE [OR REPLACE] PACKAGE 패키지 _ 이름 [AUTHID {CURRENT_USER DEFINER}] {IS AS} [ 변수, 타입선언...] -- 공개 [ 커서선언...] [ 함수선언...] [ 프로시저선언...] END; 구현부 CREATE [OR REPLACE] PACKAGE BODY 패키지 _ 이름 [AUTHID {CURRENT_USER DEFINER}] {IS AS} [ 변수, 타입선언...] -- 비공개 [ 커서구현...] [ 함수구현...] [ 프로시저구현...] [BEGIN 초기화 ] END; 2012 Tibero Co., Ltd. All Rights Reserved. 207

208 패키지 (2/3) CHAPTER 8 장. tbpsm 을알아보자. 패키지예제 CREATE PACKAGE anniversary_manager IS month_counter PLS_INTEGER; PROCEDURE compute_elapsed_days(start_day DATE); END; CREATE PACKAGE BODY anniversary_manager IS PROCEDURE compute_elapsed_days(start_day DATE) IS BEGIN month_counter := months_between(sysdate(), start_day); DBMS_OUTPUT.PUT_LINE(month_counter * 30 ' days...'); END; BEGIN month_counter := 0; DBMS_OUTPUT.PUT_LINE('package is initialized'); END; 2012 Tibero Co., Ltd. All Rights Reserved. 208

209 패키지 (3/3) CHAPTER 8 장. tbpsm 을알아보자. 시스템패키지 Tibero RDBMS 에서기본적으로제공하는패키지라이브러리 시스템패키지 DBMS_LOB BLOB, CLOB 타입의대용량데이터를처리하기위한패키지이다. DBMS_OBFUSCATION_T OOLKIT 설명 DES, DES3 알고리즘을이용한데이터암호화및복호화패키지이다. DBMS_OUTPUT 메시지버퍼에메시지를저장하고읽기위한패키지이다. DBMS_STATS 데이터베이스객체에대한통계정보를관리하기위한패키지이다. DBMS_TRANSACTION 트랜잭션 (transaction) 문장을실행하고트랜잭션을관리하기위한패키지이다. UTL_RAW RAW 타입의데이터를처리하기위한패키지이다. DBMS_JOB JOB 을관리하기위한패키지이다. DBMS_SQL 데이터베이스에접근하는 Dynamic SQL 을사용하기위한패키지이다. DBMS_ROWID ROWID 에담긴정보를보거나생성하기위한패키지이다. DBMS_JAVA 데이터베이스에서사용하는 Java 객체에접근하기위한패키지이다. UTL_FILE 운영체제에서관리하는파일에접근하기위한함수와프로시저를제공하는패키지이다 Tibero Co., Ltd. All Rights Reserved. 209

210 SQL 문장의실행 (1/7) CHAPTER 8 장. tbpsm 을알아보자. DCL COMMIT COMMIT [task]; ROLLBACK ROLLBACK [task]; SAVEPOINT SAVEPOINT savepoint_name; ROLLBACK [task] TO SAVEPOINT savepoint_name; 자율트랜잭션 PRAGMA AUTONOMOUS_TRANSACTION; 2012 Tibero Co., Ltd. All Rights Reserved. 210

211 SQL 문장의실행 (2/7) CHAPTER 8 장. tbpsm 을알아보자. Dynamic SQL EXECUTE IMMEDIATE sql_stmt [INTO id_list USING id_list RETURNING INTO id_list]; DECLARE sql_stmt VARCHAR2(2000); emp_id NUMBER := 1; emp_name VARCHAR2(10) := 'John'; BEGIN sql_stmt := 'INSERT INTO emp VALUES (:1, :2)'; EXECUTE IMMEDIATE sql_stmt USING emp_id, emp_name; sql_stmt := 'SELECT name FROM emp WHERE id = :id'; EXECUTE IMMEDIATE sql_stmt INTO emp_name USING emp_id; EXECUTE IMMEDIATE 'CREATE TABLE dept (id NUMBER)'; END; 2012 Tibero Co., Ltd. All Rights Reserved. 211

212 SQL 문장의실행 (3/7) CHAPTER 8 장. tbpsm 을알아보자. 커서 tbpsm 에서 SQL 을수행하기위해하나의문장마다사용하는내부구조를말한다. 일반적으로커서에는묵시적커서와명시적커서, 커서변수가있다. %ISOPEN, %FOUND, %NOTFOUND, %ROWCOUNT 의특별한속성을제공한다 Tibero Co., Ltd. All Rights Reserved. 212

213 SQL 문장의실행 (4/7) CHAPTER 8 장. tbpsm 을알아보자. 커서 묵시적커서 BEGIN INSERT INTO emp VALUES (1, 'Susan'); UPDATE emp SET name = 'Peter' WHERE id = 1; DELETE FROM emp WHERE id = 1; END; BEGIN FOR result IN (SELECT * FROM emp) LOOP DBMS_OUTPUT.PUT_LINE(result.id ' 번직원 =' result.name); END LOOP; END; 2012 Tibero Co., Ltd. All Rights Reserved. 213

214 SQL 문장의실행 (5/7) CHAPTER 8 장. tbpsm 을알아보자. 커서 명시적커서 CURSOR cursor_name IS SELECT...; CURSOR cursor_name (param1 TYPE [DEFAULT VALUE],...) IS SELECT...; DECLARE CURSOR c1 IS SELECT * FROM emp; BEGIN OPEN c1; END; DECLARE emp_rec emp%rowtype; CURSOR c1 IS SELECT * FROM emp; BEGIN OPEN c1; FETCH c1 INTO emp_rec; CLOSE c1; END; 2012 Tibero Co., Ltd. All Rights Reserved. 214

215 SQL 문장의실행 (6/7) CHAPTER 8 장. tbpsm 을알아보자. 커서 커서변수 TYPE csr_type_name IS REF CURSOR [RETURN type_name]; csr_var_name csr_type_name; DECLARE TYPE ref_csr IS REF CURSOR; c1 ref_csr; OPEN csr_var_name FOR sql_query; DECLARE TYPE ref_csr IS REF CURSOR; c1 ref_csr; BEGIN OPEN c1 FOR SELECT * FROM emp; OPEN c1 FOR SELECT part FROM dept; 2012 Tibero Co., Ltd. All Rights Reserved. 215

216 SQL 문장의실행 (7/7) CHAPTER 8 장. tbpsm 을알아보자. 커서 커서속성 묵시적커서 SQL%{ISOPEN FOUND NOTFOUND ROWCOUNT} 명시적커서 cursor_name%{isopen FOUND NOTFOUND ROWCOUNT} BEGIN INSERT INTO emp VALUES (1, 'Susan'); IF SQL%ISOPEN = FALSE THEN DBMS_OUTPUT.PUT_LINE(' 묵시적커서는항상자동으로닫힌다.'); END IF; END; BEGIN UPDATE emp SET name = 'John' WHERE id = 1; IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('1 번직원은존재하지않는다.'); END IF; END; 2012 Tibero Co., Ltd. All Rights Reserved. 216

217 에러처리 (1/10) CHAPTER 8 장. tbpsm 을알아보자. OverView 에러상황 컴파일중일때 프로그램이실행중일때 에러발생이예상되는부분을예외상황으로정의하고예외처리루틴을만든다. DECLARE a NUMBER := 5; b NUMBER := 0; BEGIN a := a / b; END; 결과 tbpsm : division by zero DECLARE a NUMBER := 5; b NUMBER := 0; BEGIN a := a / b; EXCEPTION WHEN OTHERS THEN handle_numeric_error(b); END; 2012 Tibero Co., Ltd. All Rights Reserved. 217

218 에러처리 (2/10) CHAPTER 8 장. tbpsm 을알아보자. 시스템정의예외 DECLARE exception_identifier EXCEPTION; 예외상황 CASE_NOT_FOUND CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX INVALID_CURSOR NO_DATA_FOUND TOO_MANY_ROWS VALUE_ERROR ZERO_DIVIDE COLLECTION_IS_NULL SUBSCRIPT_BEYOND_COUNT SUBSCRIPT_OUTSIDE_LIMIT 설명 CASE 문의 WHEN 절중에서조건을만족하는것이없고 ELSE 절도없는경우 이미열려있는커서를또다시여는경우 유일키 (UNIQUE) 제약조건이선언되어있는컬럼에중복된값을삽입하려는경우 열려있지않은커서를닫는경우 SELECT INTO 에의한질의에서결과로우가하나도없는경우 SELECT INTO 에의한질의에서결과로우가둘이상인경우 데이터값의변환 (conversion), 절단 (truncation), 제약조건등과관련된에러가발생한경우 0 으로나눗셈연산을수행하는경우 초기화되지않은컬렉션변수의요소에값을대입하려는경우초기화되지않은컬렉션변수에 EXISTS 를제외한서브프로그램을사용하는경우 컬렉션변수에있는요소의개수보다큰인덱스를사용하는경우 컬렉션변수를접근하는인덱스가유효하지않은경우예 : Tibero Co., Ltd. All Rights Reserved. 218

219 에러처리 (3/10) CHAPTER 8 장. tbpsm 을알아보자. 시스템정의예외예제 DECLARE employee_num NUMBER := ; employee_grade VARCHAR2(10) := 'S'; BEGIN CASE employee_grade WHEN 'A' THEN pay_bonus_a(employee_num); WHEN 'B' THEN pay_bonus_b(employee_num); WHEN 'C' THEN pay_bonus_c(employee_num); WHEN 'D' THEN pay_bonus_d(employee_num); END CASE; EXCEPTION WHEN case_not_found THEN pay_bonus_special(employee_num); END; 2012 Tibero Co., Ltd. All Rights Reserved. 219

220 에러처리 (4/10) CHAPTER 8 장. tbpsm 을알아보자. 사용자정의예외 DECLARE exception name EXCEPTION; RAISE 문의사용 DECLARE too_many_guest EXCEPTION; cur_guest BINARY_INTEGER; max_guest BINARY_INTEGER; BEGIN /* guest_info 테이블에서 local 이 New York 인현재고객수와최대고객수를찾는다. */ SELECT current_guest, max_guest INTO cur_guest, max_guest FROM guest_info WHERE local = 'New York'; IF cur_guest > max_guest THEN /* 만약현재고객수가최대고객수를초과하면예외상황을발생시킨다. */ RAISE too_many_guest; END IF; END; 2012 Tibero Co., Ltd. All Rights Reserved. 220

221 에러처리 (5/10) CHAPTER 8 장. tbpsm 을알아보자. 사용자정의예외 RAISE_APPLICATION_ERROR 프로시저의사용 RAISE_APPLICATION_ERROR ( error_number, error_message[, {true false}] ); DECLARE man_cnt NUMBER; woman_cnt NUMBER; BEGIN SELECT count(*) INTO man_cnt FROM class WHERE gender = 'M'; SELECT count(*) INTO woman_cnt FROM class WHERE gender = 'F'; IF man_cnt!= woman_cnt THEN RAISE_APPLICATION_ERROR(-20101, ' 남자와여자의비율이맞지않는다.'); END IF; END; 2012 Tibero Co., Ltd. All Rights Reserved. 221

222 에러처리 (6/10) CHAPTER 8 장. tbpsm 을알아보자. 예외처리루틴 예외상황이발생하면예외처리루틴으로이동한다. 예외처리루틴이실행된다. 실행이끝나면, 외부블록으로이동한다. 외부블록을실행한다. 만약외부블록이없으면해당프로그램은종료된다. 프로그램을종료한다. 예외처리루틴의형식 BEGIN... EXCEPTION WHEN A THEN 실행문 WHEN B THEN 실행문 WHEN C THEN 실행문... END; 2012 Tibero Co., Ltd. All Rights Reserved. 222

223 에러처리 (7/10) CHAPTER 8 장. tbpsm 을알아보자. 예외상황의전파 선언부에서예외상황이발생한경우 DECLARE tmp_number NUMBER(10) := 'STRING'; BEGIN... EXCEPTION /* VALUE_ERROR 나 OTHERS 를포함하고있으나에러가선언부에서발생했으므로예외처리루틴은실행되지않는다. */ WHEN VALUE_ERROR THEN... WHEN OTHERS THEN... /* 외부블록이없으므로블록은예외상황을처리하지못한다. 프로그램이비정상적으로종료된다. */ END; 2012 Tibero Co., Ltd. All Rights Reserved. 223

224 에러처리 (8/10) CHAPTER 8 장. tbpsm 을알아보자. 예외상황의전파 OTHERS 문을이용한예외상황처리 BEGIN DECLARE tmp_number VARCHAR2(10) := 'STRING'; BEGIN... EXCEPTION WHEN VALUE_ERROR THEN... WHEN OTEHRS THEN... END; EXCEPTION /* 내부블록에서전파된예외상황이 OTHERS 문에의해처리된다. */ WHEN OTHERS THEN... /* 프로그램은정상적으로종료된다. */ END; 2012 Tibero Co., Ltd. All Rights Reserved. 224

225 에러처리 (9/10) CHAPTER 8 장. tbpsm 을알아보자. 예외상황의전파 RAISE 문을이용한예외상황처리 DECLARE a EXCEPTION; b EXCEPTION; BEGIN RAISE a; EXCEPTION WHEN a THEN /* 예외상황 A 를처리하는중에예외상황 B 가발생되었으므로예외상황 B 가다시외부블록으로전파된다. */ RAISE b; WHEN b THEN... /* 외부블록이없으므로, 예외상황을처리하지못한채로프로그램이비정상적으로종료된다. */ END; 2012 Tibero Co., Ltd. All Rights Reserved. 225

226 에러처리 (10/10) CHAPTER 8 장. tbpsm 을알아보자. 에러정보 SQLCODE 함수 에러코드반환 SQLERRM 함수 에러메시지반환 예외상황 SQLCODE SQLERRM 에러가발생하지않은경우 0 normal, successful completion 사용자정의에러 1 user-defined exception NO_DATA_FOUND 100 no data found 기타예외상황해당에러코드해당에러메시지 BEGIN copy_dept_info( , 'Tibero'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE); /* 에러코드를반환한다. */ DBMS_OUTPUT.PUT_LINE(SQLERRM(SQLCODE)); /* 에러코드에대한메시지를반환한다. */ END; 2012 Tibero Co., Ltd. All Rights Reserved. 226

227 2012 Tibero Co., Ltd. All Rights Reserved. 227 Chapter 9 장 tbcli 를활용하자.

228 OverView CHAPTER 9 장. tbcli 를활용하자. tbcli 란? tbcli 는 Tibero RDBMS 가제공하는 Call Level Interface(CLI) 이다. 특징 일반적인프로그램언어와 SQL 문장의장점을융합한인터페이스 모듈효율적관리및가독성향상 애플리케이션패키지를바인딩할필요없음 접근할데이터베이스의통계사용가능 쓰레드의안정성보장 클라이언트 / 서버환경에유용 2012 Tibero Co., Ltd. All Rights Reserved. 228

229 구성요소 CHAPTER 9 장. tbcli 를활용하자. tbcli 핸들 주요데이터구조에대한포인터 (pointer) tbcli 함수 tbcli 프로그램에서데이터베이스작업을수행하기위해서사용 SQLExecDirect 함수프로토타입예시 SQLRETURN SQLExecDirect(SQLHSTMT StatementHandle, SQLCHAR *SQLString,SQLINTEGER SQLStringSize); tbcli Error Message 진단레코드를생성하여다양한정보제공 2012 Tibero Co., Ltd. All Rights Reserved. 229

230 Programe 구조 (1/4) CHAPTER 9 장. tbcli 를활용하자. SQLAllocEnv() SQLAllocConnect() SQLConnect() Starting setting (handle allocation, initialization) SQLAllocStmt() SQL query execution and error handling SQLFreeStmt() SQLDisconnect() SQLFreeConnect() Ending setting (handle free) SQLFreeEnv() 2012 Tibero Co., Ltd. All Rights Reserved. 230

231 Programe 구조 (2/4) CHAPTER 9 장. tbcli 를활용하자. 시작설정부분 (Starting setting) 환경핸들할당 연결핸들할당 데이터소스와연결수행 예시 SQLHENV h_env; SQLHDBC h_dbc; SQLRETURN rc = SQL_SUCCESS;... rc = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &h_env); 1 if (rc!= SQL_SUCCESS)... rc = SQLAllocHandle(SQL_HANDLE_DBC, h_env, &h_dbc); 2 if (rc!= SQL_SUCCESS)... rc = SQLConnect(h_dbc, (SQLCHAR *)ds_name, SQL_NTS, (SQLCHAR *)user,sql_nts, (SQLCHAR *)passwd, SQL_NTS); if (rc!= SQL_SUCCESS && rc!= SQL_SUCCESS_WITH_INFO)... 3 SQLHSTMT h_stmt;... rc = SQLAllocHandle(SQL_HANDLE_STMT, h_dbc, &h_stmt); if (rc!= SQL_SUCCESS) Tibero Co., Ltd. All Rights Reserved. 231

232 Programe 구조 (3/4) CHAPTER 9 장. tbcli 를활용하자. SQL 문장실행및에러처리부분 직접실행 준비된실행 예시 SQLCHAR *update = "UPDATE EMPLOYEE SET SALARY = SALARY * 1.05 WHERE DEPTNO = 5 ; rc = SQLExecDirect(h_stmt, update, SQL_NTS); if (rc!= SQL_SUCCESS)... SQLCHAR *update = "UPDATE EMP SET SALARY = SALARY *? " "WHERE DEPTNO =? ; double ratio = 0.0; short deptno = 0;... rc = SQLPrepare(h_stmt, update, SQL_NTS); if (rc!= SQL_SUCCESS)... rc = SQLBindParameter(h_stmt, 1, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 5, 2, &ratio, 0, NULL); if (rc!= SQL_SUCCESS)... rc = SQLBindParameter(h_stmt, 2, SQL_PARAM_INPUT, SQL_C_SHORT, SQL_SMALLINT, 0, 0, &deptno, 0, NULL); if (rc!= SQL_SUCCESS)... ratio = 1.05; deptno = 5; SQLExecute(h_stmt); 2 if (rc!= SQL_SUCCESS)... 1 b a 2012 Tibero Co., Ltd. All Rights Reserved. 232

233 Programe 구조 (4/4) CHAPTER 9 장. tbcli 를활용하자. 종료설정부분 (Ending setting) 예시 시작설정부분에서수행한작업과반대작업수행 rc = SQLDisconnect(h_dbc); 1 if (rc!= SQL_SUCCESS)... SQLFreeHandle(SQL_HANDLE_DBC, h_dbc); SQLFreeHandle(SQL_HANDLE_ENV, h_env); Tibero Co., Ltd. All Rights Reserved. 233

234 Data Type (1/3) CHAPTER 9 장. tbcli 를활용하자. SQL 문장에값을입력하고, 질의결과를얻기위해사용 Tibero RDBMS Data Type Database 에저장된데이터에접근할때사용 tbcli Data Type Application Program 에서데이터조작할때사용 2012 Tibero Co., Ltd. All Rights Reserved. 234

235 Data Type (2/3) CHAPTER 9 장. tbcli 를활용하자. Tibero RDBMS Data Type 구분 Data Type 설명 문자형 CHAR, VARCHAR, RAW 문자열을표현하는데이터타입이다. 숫자형날짜형대용량객체형내재형 NUMBER, INTEGER, FLOAT DATE, TIME, TIMESTAMP BLOB, CLOB ROWID 정수나실수의숫자를저장하는데이터타입이다. 시간이나날짜를저장하는데이터타입이다. LOB 타입을의미한다. 다른데이터타입이지원하는최대길이 (8KB 이하 ) 보다훨씬큰길이를가질수있는객체이다. 4GB 까지가능하다. 사용자가명시적으로선언하지않아도 Tibero RDBMS 가자동으로삽입되는로우마다포함하는컬럼의타입이다 Tibero Co., Ltd. All Rights Reserved. 235

236 Data Type (3/3) CHAPTER 9 장. tbcli 를활용하자. tbcli Data Type SQLCHAR SQLSCHAR SQLSMALLINT C 의 typedef 이름 unsigned char signed char short int C 의데이터타입 SQLUSMALLINT SQLINTEGER SQLUINTEGER SQLREAL SQLDOUBLE, SQLFLOAT unsigned short int long int unsigned long int float double DATE_STRUCT, SQL_DATE_STRUCT TIME_STRUCT, SQL_TIME_STRUCT TIME_STAMP_STRUCT, SQL_TIMESTAMP_STRUCT 2012 Tibero Co., Ltd. All Rights Reserved. 236

237 함수 CHAPTER 9 장. tbcli 를활용하자. SQL-99 표준 API SQLAllocHandle, SQLBindParameter 등 Tibero RDBMS API SQLAllocHandle2, SQLLobClose 등 2012 Tibero Co., Ltd. All Rights Reserved. 237

238 tbcli Message CHAPTER 9 장. tbcli 를활용하자. 반환코드 모든 tbcli 함수는실행후반환코드를반환한다. 반환코드는 SQLRETURN 타입이며미리정해진값중의하나이다. 반환코드 SQL_SUCCESS SQL_SUCCESS_WITH_INFO SQL_NO_DATA SQL_INVALID_HANDLE SQL_NEED_DATA SQL_STILL_EXECUTING SQL_ERROR 설명 함수가성공적으로완료된상태 함수가성공적으로완료되었으나, 경고메시지가있는상태 함수가성공적으로완료되었으나, 관련된데이터를찾을수없는상태 입력파라미터에주어진핸들이유효하지않은상태 SQL 문장을실행하기위해데이터가더필요한상태 이전에실행한 SQL 문장이완료되지않은상태 치명적인에러가발생한상태 2012 Tibero Co., Ltd. All Rights Reserved. 238

239 tbcli 와 ODBC (1/3) CHAPTER 9 장. tbcli 를활용하자. ODBC(Open Database Connectivity) 란? Call-Level Interface(CLI) 명세와표준을따르는데이터베이스의 API. The Open Group CAE Specification "Data Management: SQL Call-Level Interface (CLI) ISO/IEC :1995 (E) Call-Level Interface (SQL/CLI) What Useful? 동일한 Application Program 으로다양한벤더의 DBMS 에접근가능. 단, 벤더별모듈이나드라이버필요 2012 Tibero Co., Ltd. All Rights Reserved. 239

240 tbcli 와 ODBC (2/3) CHAPTER 9 장. tbcli 를활용하자. tbcli 와 ODBC 연동 Windows 계열 UNIX 계열 (LINUX 포함 ) Tibero RDBMS 에서는 ODBC 와의연동을위해운영체제별로 ODBC 드라이버를제공한다 Tibero Co., Ltd. All Rights Reserved. 240

241 tbcli 와 ODBC (3/3) CHAPTER 9 장. tbcli 를활용하자. Tbnet_alias.tbr 과 ODBC 데이터원본관리자 데이터베이스접속정보갖고오는방법 1. Tbnet_alias.tbr DFLT = ( IP=localhost PORT=8629 DB_NAME=DFLTDB ) 2. ODBC 데이터원본관리자의 DSN 2012 Tibero Co., Ltd. All Rights Reserved. 241

242 tbcli 와 ODBC 연동 (1/10) CHAPTER 9 장. tbcli 를활용하자. Windows 계열에서의설치 Tibero ODBC Driver 설치 1. $TB_HOME/client/lib 디렉터리에있는 libtbcli.dll 파일을설치하려는폴더에복사한다. 2. 명령프롬프트 (cmd.exe) 창을실행한후, 다음과같은명령을실행한다. $TB_HOME/client/bin/odbc_driver_install.exe -i [ 설치경로 ] 설치경로를입력하지않으면디폴트로설정된 %SystemRoot%\System32 폴더에 설치된다 Tibero Co., Ltd. All Rights Reserved. 242

243 tbcli 와 ODBC 연동 (2/10) CHAPTER 9 장. tbcli 를활용하자. Windows 계열에서의설치 설치확인 1. ODBC 데이터원본관리자실행 제어판 > 관리도구 > 데이터원본 (ODBC) 메뉴선택 2. Tibero ODBC Driver 확인 2012 Tibero Co., Ltd. All Rights Reserved. 243

244 tbcli 와 ODBC 연동 (3/10) CHAPTER 9 장. tbcli 를활용하자. Windows 계열에서의설치 DSN 등록 DSN(Data Source Name) 를등록하여데이터베이스접속정보를저장한다 Tibero Co., Ltd. All Rights Reserved. 244

245 tbcli 와 ODBC 연동 (4/10) CHAPTER 9 장. tbcli 를활용하자. Windows 계열에서의설치 DSN 등록 Tibero Co., Ltd. All Rights Reserved. 245

246 tbcli 와 ODBC 연동 (5/10) CHAPTER 9 장. tbcli 를활용하자. UNIX 계열에서의설치 ODBC 드라이버관리자다운로드 Libiodbc tar.gz 형태의파일다운로드 기본환경설정 1. $TB_HOME/client/lib ( 또는 $TB_HOME/client/lib32) 디렉터리에 libtbodbc.so 파일이존재하는지확인한다. 2. LD_LIBRARY_PATH 환경변수에 libtbodbc.so 파일이존재하는경로를추가한다 Tibero Co., Ltd. All Rights Reserved. 246

247 tbcli 와 ODBC 연동 (6/10) CHAPTER 9 장. tbcli 를활용하자. UNIX 계열에서의설치 iodbc 설치 bit export CC=cc./configure [--prefix=/usr/local] --sysconfdir=/etc --disable-gui make make install bit export CFLAGS=+DD64 export CC=cc./configure [--prefix=/usr/local] --sysconfdir=/etc --disable-gui make make install export CFLAGS=-q64 export CC=cc./configure [--prefix=/usr/local] --sysconfdir=/etc --disable-gui make make install HP AIX 2012 Tibero Co., Ltd. All Rights Reserved. 247

248 tbcli 와 ODBC 연동 (7/10) CHAPTER 9 장. tbcli 를활용하자. UNIX 계열에서의설치 iodbc 설치확인 $ file libtbodbc.so libtbodbc.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped $ file libiodbcinst.so libiodbcinst.so : ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped 2012 Tibero Co., Ltd. All Rights Reserved. 248

249 tbcli 와 ODBC 연동 (8/10) CHAPTER 9 장. tbcli 를활용하자. UNIX 계열에서의설치 Tibero RDBMS 를위한 iodbc 환경설정 1. ODBC 드라이버를설정한다. ( 아래의예를참고하여 /etc 디렉터리에 odbc.ini 파일을 생성한다.) [ODBC Data Source] Tibero4 = Tibero4 ODBC Driver [ODBC] Trace = 1 TraceFile = /tmp/odbc.trace [Tibero4] Driver = /home/tibero4/client/lib/libtbodbc.so Description = Tibero4 ODBC Datasource SID = tibero User = tibero Password = tmax 2012 Tibero Co., Ltd. All Rights Reserved. 249

250 tbcli 와 ODBC 연동 (9/10) CHAPTER 9 장. tbcli 를활용하자. UNIX 계열에서의설치 Tibero RDBMS 를위한 iodbc 환경설정 2. ODBC 데이터소스를설정한다. ( 아래의예를참고하여 /etc 디렉터리에 odbcinst.ini 파일을생성한다.) [Tibero4 ODBC Driver] Description = ODBC Driver for Tibero4 Driver = /home/tibero4/client/lib/libtbodbc.so UsageCount = , 2 번과정을통해생성된 ODBC 드라이버와 ODBC 데이터소스를 iodbc 관리자에 등록한다. iodbc-config --odbcini --odbcinstini 2012 Tibero Co., Ltd. All Rights Reserved. 250

251 tbcli 와 ODBC 연동 (10/10) CHAPTER 9 장. tbcli 를활용하자. UNIX 계열에서의설치 데이터베이스접속확인 iodbctest "DSN={dsn};UID={user};PWD={pwd} $ iodbctest "DSN=Tibero4;UID=tibero;PWD=tmax" iodbc Demonstration program This program shows an interactive SQL processor Driver Manager: Driver: (libtbodbc.so) SQL>select * from dual; DUMMY X result set 1 returned 1 rows. SQL> 2012 Tibero Co., Ltd. All Rights Reserved. 251

252 2012 Tibero Co., Ltd. All Rights Reserved. 252 Chapter 10 장 XA 활용법

253 분산트랜잭션 (1/4) CHAPTER 10 장. XA 활용법 여러개의노드또는다른종류의데이터베이스가참여하는하나의 트랜잭션을분산트랜잭션 (distributed transaction) 이라한다. 1. AP 가 TM 에분산트랜잭션의시작을알린다. AP DB TM DB 2 2. TM 은분산트랜잭션에참여하는각 DB 노드에분산트랜잭션의시작을알린다. TM 은트랜잭션 ID( 이하 XID) 를만들어서함께전달하고, 각 DB 노드는이 XID 와관련된분산트랜잭션을시작하며, 앞으로 AP 로부터들어오는요청은해당분산트랜잭션에대한작업으로인식한다. 3. AP 는각데이터베이스에 SQL 문장을전달함으로써필요한작업을진행하며, 각 DB 는전달받은요청을해당 XID 와관련된작업이라고인지하고 SQL 문장을실행한다. 4. 모든작업이완료되면 AP 는 TM 에분산트랜잭션의종료를알리고, TM 은해당 XID 로분산트랜잭션에참여했던각데이터베이스노드에커밋과롤백을동시에하도록지시한다. (Two-phase commit mechanism 수행 ) 2012 Tibero Co., Ltd. All Rights Reserved. 253

254 분산트랜잭션 (2/4) CHAPTER 10 장. XA 활용법 Two-phase commit 분산컴퓨팅환경에서트랜잭션에참여하는모든데이터베이스가정상적으로수정되었음을보장하는두단계커밋프로토콜이다. 분산트랜잭션에참여한모든데이터베이스가모두함께커밋되거나롤백되는것을보장한다. Two-phase commit mechanism 은다음과같이두단계로작업이이루어진다 First Phase ( 또는 prepare phase) Second Phase ( 또는 commit phase) 2012 Tibero Co., Ltd. All Rights Reserved. 254

255 분산트랜잭션 (3/4) CHAPTER 10 장. XA 활용법 Two-phase commit 구분내용비고 send prepare 각노드는코디네이터노드로부터 commit 을준비하라는메시지를받는다. First Phase reply prepared 각노드는메시지를받은후복구를위해로그등에서 commit 이가능한지를검사한다. 또는필요에따라자체적으로롤백을한다. 만약 commit 이가능하다면최종으로 commit 한로그를제외한모든작업을수행한후, commit 이준비되었다는메시지를코디네이터노드로전달한다. commit 을준비하는단계 Second Phase send commit 코디네이터노드는모든노드에서 commit 이되었다는메시지를전달받는다. 이를확인한후실제로 commit 을실행하라는메시지를각노드에보낸다. reply committed 각노드는 commit 을기록한후 commit 이완료되었다는메시지를코디네이터노드로전달한다. 실제로 commit 한기록을저장하는단계 2012 Tibero Co., Ltd. All Rights Reserved. 255

256 분산트랜잭션 (4/4) CHAPTER 10 장. XA 활용법 In-doubt 트랜잭션 prepare 까지마친상태에서네트워크의이상으로다음메시지 ( 커밋혹은롤백 ) 를 TM 으로부터받지못하는경우가발생할수있다. 데이터베이스는다음메시지가올때까지 prepare 된리소스에잠금처리를한채로기다리게되는데, 이러한경우를 In-doubt 트랜잭션이라한다 Tibero Co., Ltd. All Rights Reserved. 256

257 XA 함수 CHAPTER 10 장. XA 활용법 다음함수는 C 프로그래밍언어용으로만제공되는함수목록이다. 함수 설명 xa_open 리소스매니저 (Resource Manager) 에접속한다. xa_close 리소스매니저에서데이터베이스접속을해제한다. xa_start xa_end XID 에새로운트랜잭션을시작하거나, 이미존재하는트랜잭션에현재프로세스를연결한다. XID 에서현재프로세스를분리한다 xa_rollback XID 의트랜잭션을롤백한다. xa_prepare xa commit XID 에커밋을준비한다. Two-phase commit 의 First Phase 이다. XID 에커밋을완료한다. Two-phase commit 의 Second Phase 이다. xa_recover prepare 상태인트랜잭션의목록을검사하여커밋이나롤백을수행한다. xa_forget XID 의트랜잭션이이미처리된경우로그기록을삭제한다 Tibero Co., Ltd. All Rights Reserved. 257

258 XA 함수 CHAPTER 10 장. XA 활용법 xa_open 함수의속성 이름필수여부작성예설명 user O user=tibero 접속할사용자의이름이다. pwd O pwd=1234 접속할사용자의패스워드이다. sestm O sestm=10 db LogDir Loose_ Coupli ng X X O seswt X seswt=30 LogDir=/home/db/t ibero/log Loose_coupling=fal se 시스템에의해중단 (abort) 되기전까지의트랜잭션의 inactive time limit 이다. 클라이언트로부터한요청에대한답변을전달한후그다음요청이오기전까지대기하는시간이다. 그이상의시간이지나면클라이언트측에서문제가있다고판단하고해당 xtb 를롤백한다. 접속할데이터베이스의이름이다. XA API 가에러, 트레이스메시지를저장할디렉터리의이름이다. loosely coupling flag. true/false 설정. 다른브랜치이지만동일한글로벌트랜잭션끼리같은리소스를사용하는지여부.loose coupling 이면 (1,0) 과 (1,2) 는서로다른내부리소스를사용한다. 예를들어 TX 가해당된다. 이와는반대로 tight coupling 이면두 xtb 는하나의 TX 를서로잠금처리를설정해가며공유하여사용한다. XA_RETRY 가반환되기전까지데이터베이스서버가트랜잭션을기다리는대기시간이다. flag 내에 TMNOWAIT 이설정되어있지않을경우에는클라이언트의요청을데이터베이스가곧바로처리해줄수없을때해당리소스를사용할수있을때까지기다린후에클라이언트에답변을주게된다. 이때데이터베이스가 sesswt 로설정한시간까지답변을줄수없는경우 XARETRY 를반환한다 Tibero Co., Ltd. All Rights Reserved. 258

259 XA Application 프로그래밍 (1/5) CHAPTER 10 장. XA 활용법 #define XA_CONN_STR_TIGHT "TIBERO_XA:user=tibero, pwd=tmax," \ "db= @test, sestm=60" /* 동일한글로벌트랜잭션에서다른브랜치로 xa_start 했을경우 * Tight-Coupling */ void test_xa_2branch_2pc_tight() { int rc; XID xid1; XID xid2; struct xa_switch_t *tbxa = &XA_SWITCH_NAME; char *conn_str = XA_CONN_STR_TIGHT; /* tightly coupled */ long gtrid = _GTRID_BASE; long bqual = 1; EXEC SQL BEGIN DECLARE SECTION; int cnt; EXEC SQL END DECLARE SECTION; /* xa_open */ tbxa->xa_open_entry (conn_str, 0, TMNOFLAGS); xid1.formatid = 1; xid1.gtrid_length = sizeof(gtrid); xid1.bqual_length = sizeof(bqual); memcpy(&xid1.data[0], &gtrid, sizeof(gtrid)); memcpy(&xid1.data[sizeof(gtrid)], &bqual, sizeof(bqual)); 2012 Tibero Co., Ltd. All Rights Reserved. 259

260 XA Application 프로그래밍 (2/5) CHAPTER 10 장. XA 활용법 bqual = 2; xid2.formatid = 1; xid2.gtrid_length = sizeof(gtrid); xid2.bqual_length = sizeof(bqual); memcpy(&xid2.data[0], &gtrid, sizeof(gtrid)); memcpy(&xid2.data[sizeof(gtrid)], &bqual, sizeof(bqual)); EXEC SQL DELETE FROM PERSON; EXEC SQL COMMIT WORK; /* (1, 1) 시작 */ /* xa_start -- sql statements starts */ tbxa->xa_start_entry (&xid1, 0, TMNOFLAGS); EXEC SQL INSERT INTO PERSON VALUES ('1', 'LEE'); EXEC SQL INSERT INTO PERSON VALUES ('2', 'KIM'); /* xa_end -- */ tbxa->xa_end_entry (&xid1, 0, TMSUCCESS); /* (1, 2) 시작 */ /* xa_start -- sql statements starts */ tbxa->xa_start_entry (&xid2, 0, TMNOFLAGS); EXEC SQL INSERT INTO PERSON VALUES ('2', 'PARK'); EXEC SQL INSERT INTO PERSON VALUES ('3', 'JAKE'); EXEC SQL INSERT INTO PERSON VALUES ('4', 'KID'); EXEC SQL INSERT INTO PERSON VALUES ('5', 'CHANHO'); /* xa_end -- */ tbxa->xa_end_entry (&xid2, 0, TMSUCCESS); /* xa_prepare */ tbxa->xa_prepare_entry (&xid1, 0, TMNOFLAGS); 2012 Tibero Co., Ltd. All Rights Reserved. 260

261 XA Application 프로그래밍 (3/5) CHAPTER 10 장. XA 활용법 /* Tightly-Coupled 가정 */ /* xa_prepare */ tbxa->xa_prepare_entry (&xid2, 0, TMNOFLAGS); /* xa_commit */ tbxa->xa_commit_entry (&xid1, 0, TMNOFLAGS); /* xa_commit */ tbxa->xa_commit_entry (&xid2, 0, TMNOFLAGS); EXEC SQL SELECT COUNT(*) into :cnt FROM PERSON; CuAssertIntEq(tc, cnt, 6); /* xa_close */ tbxa->xa_close_entry ("", 0, TMNOFLAGS); return; } /* 같은 Global Trasaction의다른 Branch로 xa_start했을경우 * Loose-Coupling */ void test_xa_2branch_2pc_loose(cutest *tc) { int rc; XID xid1; XID xid2; struct xa_switch_t *tbxa = &XA_SWITCH_NAME; char *conn_str = XA_CONN_STR_LOOSE; long gtrid = _GTRID_BASE; long bqual = 1; EXEC SQL BEGIN DECLARE SECTION; int cnt; EXEC SQL END DECLARE SECTION; 2012 Tibero Co., Ltd. All Rights Reserved. 261

262 XA Application 프로그래밍 (4/5) CHAPTER 10 장. XA 활용법 /* xa_open */ tbxa->xa_open_entry (conn_str, 0, TMNOFLAGS); xid1.formatid = 1; xid1.gtrid_length = sizeof(gtrid); xid1.bqual_length = sizeof(bqual); memcpy(&xid1.data[0], &gtrid, sizeof(gtrid)); memcpy(&xid1.data[sizeof(gtrid)], &bqual, sizeof(bqual)); bqual = 2; xid2.formatid = 1; xid2.gtrid_length = sizeof(gtrid); xid2.bqual_length = sizeof(bqual); memcpy(&xid2.data[0], &gtrid, sizeof(gtrid)); memcpy(&xid2.data[sizeof(gtrid)], &bqual, sizeof(bqual)); EXEC SQL DELETE FROM PERSON; EXEC SQL COMMIT WORK; /* (1, 1) 시작 */ /* xa_start -- sql statements starts */ tbxa->xa_start_entry (&xid1, 0, TMNOFLAGS); EXEC SQL INSERT INTO PERSON VALUES ('1', 'LEE'); EXEC SQL INSERT INTO PERSON VALUES ('2', 'KIM'); /* xa_end -- */ tbxa->xa_end_entry (&xid1, 0, TMSUCCESS); 2012 Tibero Co., Ltd. All Rights Reserved. 262

263 XA Application 프로그래밍 (5/5) CHAPTER 10 장. XA 활용법 } /* (1, 2) 시작 */ /* xa_start -- sql statements starts */ tbxa->xa_start_entry (&xid2, 0, TMNOFLAGS); EXEC SQL INSERT INTO PERSON VALUES ('2', 'PARK'); EXEC SQL INSERT INTO PERSON VALUES ('3', 'JAKE'); EXEC SQL INSERT INTO PERSON VALUES ('4', 'KID'); EXEC SQL INSERT INTO PERSON VALUES ('5', 'CHANHO'); /* xa_end -- */ tbxa->xa_end_entry (&xid2, 0, TMSUCCESS); /* xa_prepare */ tbxa->xa_prepare_entry (&xid1, 0, TMNOFLAGS); /* Loosely-Coupled 가정 */ /* xa_prepare */ tbxa->xa_prepare_entry (&xid2, 0, TMNOFLAGS); /* xa_commit */ tbxa->xa_commit_entry (&xid1, 0, TMNOFLAGS); /* xa_commit */ tbxa->xa_commit_entry (&xid2, 0, TMNOFLAGS); EXEC SQL SELECT COUNT(*) into :cnt FROM PERSON; CuAssertIntEq(tc, cnt, 6); /* xa_close */ tbxa->xa_close_entry ("", 0, TMNOFLAGS); return; 2012 Tibero Co., Ltd. All Rights Reserved. 263

264 JDBC 에서 XA Interface CHAPTER 10 장. XA 활용법 JDBC 의 XA Interface XA Datasource Interface XA Connection Interface XA Exception Interface XA XID Interface Tibero RDBMS 의 XA Interface 표준 XA Interface (JDK 1.3) javax.sql.xadatasource javax.sql.xaconnection javax.transaction.xa.xaexception javax.transaction.xa.xid Tibero RDBMS 의 XA 인터페이스 com.tmax.tibero.jdbc.ext.tbxadatasource com.tmax.tibero.jdbc.ext.tbxaconnection com.tmax.tibero.jdbc.ext.tbxaexception com.tmax.tibero.jdbc.ext.tbxid 2012 Tibero Co., Ltd. All Rights Reserved. 264

265 XA Interface 프로그래밍 (1/7) CHAPTER 10 장. XA 활용법 package test.com.tmax.tibero.cases; import com.tmax.tibero.jdbc.ext.*; import test.com.tmax.tibero.abstractbase; import javax.sql.xaconnection; import javax.transaction.xa.xaresource; import java.sql.*; public class TestXATwoBranch extends AbstractBase{ int formatid = 1; int row_count = 0; int pre1, pre2 = 0; byte[] gtid1 = new byte[1]; byte[] bq1 = new byte[1]; byte[] gtid2 = new byte[1]; byte[] bq2 = new byte[1]; public TestXATwoBranch (String name) { super(name); } /* Tightly Coupled 일때 */ public void test_xa_2branch_2pc_tight () throws Exception { debug("test_xa_2branch_2pc_tight " + this._getclassname()); create_table_for_xa(); gtid1[0] = (byte)1; bq1[0] = (byte)1; gtid2[0] = (byte)1; bq2[0] = (byte)2; 2012 Tibero Co., Ltd. All Rights Reserved. 265

266 XA Interface 프로그래밍 (2/7) CHAPTER 10 장. XA 활용법 TbXADataSource xads1 = new TbXADataSource(); xads1.seturl(getxaurl()); xads1.setuser(getxauser()); xads1.setpassword(getxapasswd()); TbXADataSource xads2 = new TbXADataSource(); xads2.seturl(getxaurl()); xads2.setuser(getxauser()); xads2.setpassword(getxapasswd()); XAConnection xacon1 = xads1.getxaconnection(); XAConnection xacon2 = xads2.getxaconnection(); Connection conn1 = xacon1.getconnection(); Connection conn2 = xacon2.getconnection(); XAResource xars1 = xacon1.getxaresource(); XAResource xars2 = xacon2.getxaresource(); /* XID (1.1) 생성 */ TbXid xid1 = new TbXid(formatID, gtid1,bq1 ); /* XID (1.2) 생성 */ TbXid xid2 = new TbXid(formatID, gtid2, bq2); try { /* (1.1) 시작 */ xars1.start(xid1, XAResource.TMNOFLAGS); PreparedStatement pstmt1; pstmt1 = conn1.preparestatement( "insert into author values (?,?)"); 2012 Tibero Co., Ltd. All Rights Reserved. 266

267 XA Interface 프로그래밍 (3/7) CHAPTER 10 장. XA 활용법 pstmt1.setint(1, 1); pstmt1.setstring(2, "FOSCHIA"); pstmt1.executeupdate(); pstmt1.setint(1,2); pstmt1.setstring(2, "AGNOS"); pstmt1.executeupdate(); /* (1.1) 종료 */ xars1.end(xid1, XAResource.TMSUCCESS); /* (1.2) 시작 */ xars2.start(xid2, XAResource.TMNOFLAGS); PreparedStatement pstmt2; pstmt2 = conn2.preparestatement( "insert into author values (?,?)"); pstmt2.setint(1, 3); pstmt2.setstring(2, "JELLA"); pstmt2.executeupdate(); pstmt2.setint(1,4); pstmt2.setstring(2, "THIPHILO"); pstmt2.executeupdate(); /* (1.2) 종료 */ xars2.end(xid2, XAResource.TMSUCCESS); /* (1,1) prepare */ pre1= xars1.prepare(xid1); assertequals(pre1, XAResource.XA_RDONLY); /* (1,2) prepare */ pre2 = xars2.prepare(xid2); assertequals(pre2, XAResource.XA_OK); 2012 Tibero Co., Ltd. All Rights Reserved. 267

268 XA Interface 프로그래밍 (4/7) CHAPTER 10 장. XA 활용법 } /* (1.1) commit */ try { xars1.commit(xid1, false); } catch(tbxaexception e) {} /* (1.2) commit */ try { xars2.commit(xid2, false); } catch(tbxaexception e) {} Statement stmt1 = conn1.createstatement(); ResultSet rs1 = stmt1.executequery("select * from author"); while (rs1.next()) row_count ++; assertequals(4, row_count); rs1.close(); rs1 = null; stmt1.close(); stmt1 = null; pstmt1.close(); conn1.close(); xacon1.close(); pstmt2.close(); conn2.close(); xacon2.close(); pstmt1= null; conn1= null; xacon1=null; pstmt2= null; conn2= null; xacon2=null; } catch (TbXAException e) {} 2012 Tibero Co., Ltd. All Rights Reserved. 268

269 XA Interface 프로그래밍 (5/7) CHAPTER 10 장. XA 활용법 /* Loosely Coupled 일때 */ public void test_xa_2branch_2pc_loose () throws Exception { debug("test_xa_2branch_2pc_loose " + this._getclassname()); create_table_for_xa(); gtid1[0] = (byte)1; bq1[0] = (byte)1; gtid2[0] = (byte)1; bq2[0] = (byte)2; TbXADataSource xads1 = new TbXADataSource(); xads1.seturl(getxaurl()); xads1.setuser(getxauser()); xads1.setpassword(getxapasswd()); TbXADataSource xads2 = new TbXADataSource(); xads2.seturl(getxaurl()); xads2.setuser(getxauser()); xads2.setpassword(getxapasswd()); XAConnection xacon1 = xads1.getxaconnection(); XAConnection xacon2 = xads2.getxaconnection(); Connection conn1 = xacon1.getconnection(); Connection conn2 = xacon2.getconnection(); XAResource xars1 = xacon1.getxaresource(); XAResource xars2 = xacon2.getxaresource(); TbXid xid1 = new TbXid(formatID, gtid1,bq1 ); TbXid xid2 = new TbXid(formatID, gtid2, bq2); try { xars1.start(xid1, TbXAResource.TBRTRANSLOOSE); PreparedStatement pstmt1; pstmt1 = conn1.preparestatement("insert into author values (?,?)"); 2012 Tibero Co., Ltd. All Rights Reserved. 269

270 XA Interface 프로그래밍 (6/7) CHAPTER 10 장. XA 활용법 pstmt1.setint(1, 1); pstmt1.setstring(2, "FOSCHIA"); pstmt1.executeupdate(); pstmt1.setint(1,2); pstmt1.setstring(2, "AGNOS"); pstmt1.executeupdate(); xars1.end(xid1, XAResource.TMSUCCESS); xars2.start(xid2, TbXAResource.TBRTRANSLOOSE); PreparedStatement pstmt2; pstmt2 = conn2.preparestatement( "insert into author values (?,?)"); pstmt2.setint(1, 3); pstmt2.setstring(2, "JELLA"); pstmt2.executeupdate(); pstmt2.setint(1,4); pstmt2.setstring(2, "THIPHILO"); pstmt2.executeupdate(); xars2.end(xid2, XAResource.TMSUCCESS); pre1= xars1.prepare(xid1); assertequals(pre1, XAResource.XA_OK); pre2 = xars2.prepare(xid2); assertequals(pre2, XAResource.XA_OK); xars1.commit(xid1, false); xars2.commit(xid2, false); Statement stmt1 = conn1.createstatement(); ResultSet rs1 = stmt1.executequery("select * from author"); 2012 Tibero Co., Ltd. All Rights Reserved. 270

271 XA Interface 프로그래밍 (7/7) CHAPTER 10 장. XA 활용법 } } while (rs1.next()) row_count ++; assertequals(4, row_count); rs1.close(); rs1 = null; stmt1.close(); stmt1 = null; pstmt1.close(); conn1.close(); xacon1.close(); pstmt2.close(); conn2.close(); xacon2.close(); pstmt1= null; conn1= null; xacon1=null; pstmt2= null; conn2= null; xacon2=null; } catch (TbXAException e) {} 2012 Tibero Co., Ltd. All Rights Reserved. 271

272 2012 Tibero Co., Ltd. All Rights Reserved. 272 Chapter 11 장 tbsql 사용하기

273 OverView CHAPTER 11 장. tbsql 사용하기 tbsql 은 Tibero 에서제공하는 SQL 문장을처리하는대화형유틸리티 이다. 기능 일반적인 SQL 문장및 tbpsm 프로그램의입력, 편집, 저장, 실행 트랜잭션의설정및종료 스크립트를통한일괄작업의실행 DBA에의한데이터베이스관리 데이터베이스의기동및종료 외부유틸리티및프로그램의실행 tbsql 유틸리티의환경설정 2012 Tibero Co., Ltd. All Rights Reserved. 273

274 실행 (1/2) CHAPTER 11 장. tbsql 사용하기 문법 tbsql [[options] [userpass] [start]] options 옵션 설명 -h, -help 도움말화면을출력한다. -v, --version 버전을출력한다. -s, --silent 화면에시작메시지와프롬프트를출력하지않는다. -i, --ignore 로그온스크립트 (tbsql.logon) 를실행하지않는다 Tibero Co., Ltd. All Rights Reserved. 274

275 실행 (2/2) CHAPTER 11 장. tbsql 사용하기 userpass start 옵션 username 설명 사용자명으로, 대소문자를구분하지않는다. 단, 큰따옴표 ( ) 에사용자명을입력하는경우는예외이다. password 패스워드로, 대소문자를구분하여입력한다. 옵션 filename 파일명이다. ext 데이터베이스에대한접속정보를가진 DSN(Data Source Name) 이다. 설명 파일의확장자로, 지정하지않을경우 FILEEXT 시스템변수에지정된확장자가디폴트값이다 Tibero Co., Ltd. All Rights Reserved. 275

276 데이터베이스접속 CHAPTER 11 장. tbsql 사용하기 사용자명 대소문자구분하지않는다. 단큰따옴표 ( ) 에사용시예외 패스워드 대소문자구분 $ tbsql sys/tibero tbsql 4 TmaxSoft, Co. Copyright(C) All rights reserved. Connected. SQL> 2012 Tibero Co., Ltd. All Rights Reserved. 276

277 인터페이스 CHAPTER 11 장. tbsql 사용하기 tbsql 유틸리티가정상적으로실행되면 SQL 프롬프트가출력된다. SQL 프롬프트에서 SQL 문장, tbpsm 프로그램, tbsql 유틸리티의명령어를입력할수있다. 여러라인에걸쳐입력할수있다. SQL 문장과 tbpsm 프로그램은입력과실행을분리할수있다. 하지만, tbsql 유틸리티의명령어는입력과동시에실행된다. 대소문자를구분하지않는다. SQL 문장내의문자열데이터처럼특별한경우를제외하고는대소문자를구분하지않는다 Tibero Co., Ltd. All Rights Reserved. 277

278 환경설정 CHAPTER 11 장. tbsql 사용하기 문법 SET { 시스템변수 } { 시스템변수의설정값 } 예제 SQL> SET AUTOCOMMIT ON 2012 Tibero Co., Ltd. All Rights Reserved. 278

279 종료 CHAPTER 11 장. tbsql 사용하기 tbsql 유틸리티를종료하려면 SQL 프롬프트상에서 EXIT 또는 QUIT 명령어를입력해야한다. 예제 SQL> EXIT 2012 Tibero Co., Ltd. All Rights Reserved. 279

280 시스템변수 (1/3) CHAPTER 11 장. tbsql 사용하기 tbsql 유틸리티의시스템변수에설정할값은 SET 명령어로설정하고, SHOW 명령어로출력한다. 시스템변수 Default Value 설명 AUTOCOMMIT OFF 자동커밋여부를설정하는시스템변수이다. AUTOTRACE COMMENT OFF ON 수행중인질의의 Plan 이나통계정보를출력할지를설정하는시스템변수이다. BLOCKTERMINATOR 마침표 (.) tbpsm 문장에서입력의마지막을나타내는문자를설정하는시스템변수이다. DDLSTATS DEFINE EDITFILE OFF OFF.tbedit.sql DDL 문장의 Plan 이나통계정보를보여줄지를설정하는시스템변수이다. & 문자를치환변수로인식할지를설정하는시스템변수이다. EDIT 명령어에서사용하는파일이름의디폴트값을설정하는시스템변수이다. ESCAPE 역슬래시 (\) 이스케이프문자를설정하는시스템변수이다. FEEDBACK FILEEXT ON sql SQL 문장의수행결과를화면에출력할지를설정하는시스템변수이다. 파일확장자의디폴트값을설정하는시스템변수이다. FILEPATH 현재디렉토리파일경로의디폴트값을설정하는시스템변수이다 Tibero Co., Ltd. All Rights Reserved. 280

281 시스템변수 (2/3) CHAPTER 11 장. tbsql 사용하기 시스템변수 Default Value 설명 HISTORY 50 명령어히스토리의크기를설정하는시스템변수이다. LINESIZE 80 LONG 80 NOESCAPE OFF NUMWIDTH 10 OUTPUTSIZE 1024 PAGESIZE 24 PRINTSTMT PROFILE OFF OFF 한라인에출력할문자수를설정하는시스템변수이다. CLOB 타입의데이터를표시하기위해사용할문자수를설정하는시스템변수이다. 숫자형데이터의기본출력길이를설정하는시스템변수이다. DBMS_OUTPUT 패키지에서출력하는결과의크기를설정하는시스템변수이다. 한화면에출력할라인수를설정하는시스템변수이다. 현재수행중인 SQL 또는 tbpsm 문장의출력여부를설정하는시스템변수이다. SQL 문장을수행할때걸린시간과사용중인메모리의출력여부를설정하는시스템변수이다. PROMPT SQL> 화면상의프롬프트문자를설정하는시스템변수이다. SERVEROUTPUT OFF SQLTERMINATOR 세미콜론 (;) DBMS_OUTPUT 패키지의결과를화면에출력할것인지를설정하는시스템변수이다. SQL 문장을종료하는문자를설정하는시스템변수이다 Tibero Co., Ltd. All Rights Reserved. 281

282 시스템변수 (3/3) CHAPTER 11 장. tbsql 사용하기 TERMOUT TIME TIMING TRIMOUT TRIMSPOOL WRAP 시스템변수 Default Value 설명 ON OFF OFF ON OFF ON 현재시간을화면에출력할것인지를설정하는시스템변수이다. 현재시간을화면에출력할것인지를설정하는시스템변수이다. SQL, tbsql 문장의결과를출력할때마다수행시간을출력할것인지를설정하는시스템변수이다. Determines if trailing spaces are trimmed from lines di splayed on the screen. Determines if trailing spaces are trimmed from lines sp ooled to a file. 출력할라인이긴경우, 나머지를다음라인에출력할것인지를설정하는시스템변수이다 Tibero Co., Ltd. All Rights Reserved. 282

283 기본기능 (1/3) CHAPTER 11 장. tbsql 사용하기 명령어의입력 SQL 문장의입력 일반적인입력 줄바꿈 주석 (comment) 의삽입 이전에저장된문장을이용하여입력 tbpsm 프로그램의입력 일반적인입력 이전에저장된문장을이용하여입력 주석의삽입 tbsql 유틸리티의명령어입력 2012 Tibero Co., Ltd. All Rights Reserved. 283

284 기본기능 (2/3) CHAPTER 11 장. tbsql 사용하기 명령어의실행 SQL 버퍼에저장된 SQL 문장이나 tbpsm 프로그램의실행 RUN 또는 / 명령어 SQL 문장의실행 전체문장을입력하고세미콜론 (;) 으로종료하면 SQL 문장이바로실행된다. SQL 버퍼에저장과동시에실행 2012 Tibero Co., Ltd. All Rights Reserved. 284

285 기본기능 (3/3) CHAPTER 11 장. tbsql 사용하기 기타기능 주석의삽입 /* */ 를이용 두개의마이너스부호 (--) 를이용 자동커밋 SET AUTOCOMMIT 명령어사용설정 / SHOW AUTOCOMMIT 명령어사용확인 운영체제명령어의실행 HOST 명령어또는! 명령어사용 출력내용의저장 SPOOL 명령어를사용 / 종료는 SPOOL OFF 명령어사용 2012 Tibero Co., Ltd. All Rights Reserved. 285

286 고급기능 (1/4) CHAPTER 11 장. tbsql 사용하기 스크립트기능 스크립트란? 한번의명령으로일괄적으로작업을실행하기위한 SQL 문장과 tbpsm 프로그램, tbsql 유틸리티의명령어의모임이다 Tibero Co., Ltd. All Rights Reserved. 286

287 고급기능 (2/4) CHAPTER 11 장. tbsql 사용하기 스크립트의생성 $ export TB_EDITOR=vi SQL> EDIT run -- SQL 문장 SELECT ENAME, SALARY, ADDR FROM EMP WHERE DEPTNO = 5; UPDATE EMP SET SALARY = SALARY * 1.05 WHERE DEPTNO = 5; -- tbpsm 프로그램 DECLARE deptno NUMBER(2); BEGIN deptno := 20; UPDATE EMP SET SALARY = SALARY * 1.05 WHERE DEPTNO = deptno; END; RUN -- tbpsm 프로그램실행 /* 최종으로갱신된내용을반영한다. */ COMMIT; 2012 Tibero Co., Ltd. All Rights Reserved. 287

288 고급기능 (3/4) CHAPTER 11 장. tbsql 사용하기 스크립트의실행 SQL> START run $ tbsql 2012 Tibero Co., Ltd. All Rights Reserved. 288

289 고급기능 (4/4) CHAPTER 11 장. tbsql 사용하기 DBA 를위한기능 접속방법 $ tbsql sys/tibero SQL> CONNECT sys/tibero 2012 Tibero Co., Ltd. All Rights Reserved. 289

290 명령어 (1/4) CHAPTER 11 장. tbsql 사용하기 문법 COM[MAND] param {choice1 choice2} [option] [arg]* 항목 설명 대괄호 ([]) 중괄호 ({}) 대괄호 ([ ]) 에포함된내용은입력하지않아도명령어를실행할수있다. 위의예에서 COMMAND 명령어의뒷부분 (MAND) 과 option, arg 는명령프롬프트에포함되지않을수있다. 중괄호 ({ }) 에포함된내용은반드시입력해야명령어를실행할수있다. 위의예에서 choice1 과 choice2 는중괄호 ({ }) 내에있고버티컬바 ( ) 로분리되어있으므로둘중하나는명령프롬프트에포함되어야한다. 버티컬바 ( ) 버티컬바 ( ) 로분리된내용은그중하나를선택한다. 별표 (*) 별표 (*) 로표시된내용은포함되지않을수도있고, 여러번포함될수도있다. 위의예에서 arg 는대괄호 ([ ]) 바로뒤에별표 (*) 가있으므로포함되지않을수도있고, 한번이상여러번포함될수도있다. 이탤릭체이탤릭체로표시된내용은명령어에따라적절한문자열로대체되어야한다. 대소문자명령어는대소문자를구분하지않는다 Tibero Co., Ltd. All Rights Reserved. 290

291 명령어 (2/4) CHAPTER 11 장. tbsql / 명령어 설명 운영체제의명령어를실행하는명령어이다. HOST 명령어와동일하다. 스크립트를실행하는명령어이다. START 명령어와동일하다. 현재 SQL 버퍼내의 SQL 문장또는 tbpsm 프로그램을실행하는명령어이다. RUN 명령어와동일하다. ACCEPT 사용자의입력을받아치환변수의속성을설정하는명령어이다. CHANGE SQL 버퍼의현재라인에서패턴문자를찾아주어진문자로변환하는명령어이다. CLEAR 설정된옵션을초기화하거나지우는명령어이다. COLUMN 컬럼의출력속성을설정하는명령어이다. CONNECT 특정사용자 ID 로데이터베이스에접속하는명령어이다. DEL SQL 버퍼에저장된라인을지우는명령어이다. DESCRIBE 지정된객체의컬럼정보를출력하는명령어이다. DISCONNECT 현재데이터베이스로부터접속을해제하는명령어이다. EDIT 특정파일또는 SQL 버퍼의내용을외부편집기를이용하여편집하는명령어이다 Tibero Co., Ltd. All Rights Reserved. 291

292 명령어 (3/4) CHAPTER 11 장. tbsql 사용하기 명령어 설명 EXECUTE 단일 tbpsm 문장을수행하는명령어이다. EXIT tbsql 유틸리티를종료하는명령어이다. QUIT 명령어와동일하다. HELP 도움말을출력하는명령어이다. HISTORY 실행한명령어의히스토리를출력하는명령어이다. HOST 운영체제명령어를실행하는명령어이다.! 명령어와동일하다. INPUT SQL 버퍼의현재라인뒤에새로운라인을추가하는명령어이다. LIST SQL 버퍼내의특정내용을출력하는명령어이다. LOADFILE Tibero RDBMS 의테이블을 Oracle 의 SQL*Loader 툴이인식할수있는형식으로저장하는명령어이다. LS 현재사용자가생성한데이터베이스객체를출력하는명령어이다. PAUSE 사용자가 <Enter> 키를누를때까지실행을멈추는명령어이다. PRINT 사용자가정의한바인드변수의값을출력하는명령어이다. PROMPT 사용자가정의한 SQL 문장이나빈라인을그대로화면에출력하는명령어이다 Tibero Co., Ltd. All Rights Reserved. 292

293 명령어 (4/4) CHAPTER 11 장. tbsql 사용하기 QUIT RUN 명령어 설명 tbsql 유틸리티를종료하는명령어이다. EXIT 명령어와동일하다. 현재 SQL 버퍼내의 SQL 문장이나 tbpsm 프로그램을실행하는명령어이다. / 명령어와동일하다. SET tbsql 유틸리티의시스템변수를설정하는명령어이다. SHOW tbsql 유틸리티의시스템변수를출력하는명령어이다. SPOOL START 화면에출력되는내용을모두외부파일에저장하는과정을시작하거나종료하는명령어이다. 명령어와동일하다. TBDOWN Tibero RDBMS 를종료하는명령어이다. UNDEFINE 하나이상의치환변수를삭제하는명령어이다. VARIABLE 사용자가정의한바인드변수를선언하는명령어이다 Tibero Co., Ltd. All Rights Reserved. 293

294 컬럼포맷 (1/4) CHAPTER 11 장. tbsql 사용하기 문자형 문법 예제 COL[UMN] {name} FORMAT A{n} SQL> SELECT 'Tibero is the best choice' test FROM DUAL; TEST Tibero is the best choice 1 row selected. SQL> COL test FORMAT a10 SQL> SELECT 'Tibero is the best choice' test FROM DUAL; TEST Tibero is the best c hoice 1 row selected. SQL> 2012 Tibero Co., Ltd. All Rights Reserved. 294

295 컬럼포맷 (2/4) CHAPTER 11 장. tbsql 사용하기 숫자형 문법 예제 COL[UMN] {col_name} FOR[MAT] {fmt_str} SQL> COLUMN x FORMAT 999,999 SQL> SELECT x FROM DUAL; X ,456 1 row selected Tibero Co., Ltd. All Rights Reserved. 295

296 컬럼포맷 (3/4) CHAPTER 11 장. tbsql 사용하기 Format 예시설명 쉼표 (,) 9,999 주어진위치에쉽표 (,) 를출력한다. 점 (.) 정수부분과소수부분을분리하는위치에점 (.) 을출력한다. $ $9999 $ 를맨앞에출력한다 , 을맨앞이나뒤에출력한다 주어진자릿수만큼숫자를출력한다. B B9999 정수부분이 0 일경우공백으로치환한다. C C9999 주어진위치에 ISO currency symbol 을출력한다. D 9D999 실수의정수와소수를분리하기위해 decimal 문자를출력한다. EEEE 9.99EEEE 과학적기수법에의해출력한다. G 9G999 정수부분의주어진위치에그룹분리자를출력한다. L L9999 주어진위치에 local currency symbol 을출력한다. MI PR 9999MI 9999PR 음수뒤에마이너스기호를출력하고, 양수뒤에공백을출력한다. 음수인경우에 < 와 > 로감싸서출력하고, 양수인경우에양쪽에공백을출력한다 Tibero Co., Ltd. All Rights Reserved. 296

297 컬럼포맷 (4/4) CHAPTER 11 장. tbsql 사용하기 Format 예시설명 RN RN 대문자로출력한다. rn rn 소문자로출력한다. S S9999, 9999S 양수 / 음수기호를맨앞이나뒤에출력한다. TM TM 가능한작은수를출력한다. U U9999 주어진위치에 dual currency symbol 을출력한다. V 99V999 10n 만큼곱한값을출력한다. 여기서 n 은 V 뒤에오는 9 의개수이다. X XXXX, xxxx 16 진수형태로출력한다 Tibero Co., Ltd. All Rights Reserved. 297

298 2012 Tibero Co., Ltd. All Rights Reserved. 298 Chapter 12 장 tbadmin 사용하기

299 OverView (1/2) CHAPTER 12 장. tbadmin 사용하기 tbadmin 은티베로에서제공하는 Graphic User Interface( 이하 GUI) 기반 SQL/PSM 처리응용프로그램이다. 기능 일반적인 SQL 문장및 tbpsm 프로그램을입력, 편집, 저장, 실행 트랜잭션설정및종료 다이얼로그를통한 Schema Oject 관리 DBA에의한데이터베이스관리 외부유틸리티및프로그램의실행 (tbexpimp 실행 ) tbadmin 환경설정 2012 Tibero Co., Ltd. All Rights Reserved. 299

300 OverView (2/2) CHAPTER 12 장. tbadmin 사용하기 2012 Tibero Co., Ltd. All Rights Reserved. 300

301 설치및실행 CHAPTER 12 장. tbadmin 사용하기 설치및실행 JRE 1.5(Java Runtime Envionment) 가설치되어있는머신이라면 tbadmin.zip 파일의압축을해제하는것으로설치완료. 설정 상위메뉴중 Window > Preferences 선택 실행 윈도우 tbadmin.exe 리눅스 tbadmin.sh 2012 Tibero Co., Ltd. All Rights Reserved. 301

302 기능 (1/15) CHAPTER 12 장. tbadmin 사용하기 Login & Connection 2012 Tibero Co., Ltd. All Rights Reserved. 302

303 기능 (2/15) CHAPTER 12 장. tbadmin 사용하기 SQL Editor 2012 Tibero Co., Ltd. All Rights Reserved. 303

304 기능 (3/15) CHAPTER 12 장. tbadmin 사용하기 SQL Editor 2012 Tibero Co., Ltd. All Rights Reserved. 304

305 기능 (4/15) CHAPTER 12 장. tbadmin 사용하기 Schema Browser 2012 Tibero Co., Ltd. All Rights Reserved. 305

306 기능 (5/15) CHAPTER 12 장. tbadmin 사용하기 Schema Tree Browser 2012 Tibero Co., Ltd. All Rights Reserved. 306

307 기능 (6/15) CHAPTER 12 장. tbadmin 사용하기 Network Manager 2012 Tibero Co., Ltd. All Rights Reserved. 307

308 기능 (7/15) CHAPTER 12 장. tbadmin 사용하기 Session Manager 2012 Tibero Co., Ltd. All Rights Reserved. 308

309 기능 (8/15) CHAPTER 12 장. tbadmin 사용하기 SQL Monitor 2012 Tibero Co., Ltd. All Rights Reserved. 309

310 기능 (9/15) CHAPTER 12 장. tbadmin 사용하기 Parameter Manager 2012 Tibero Co., Ltd. All Rights Reserved. 310

311 기능 (10/15) CHAPTER 12 장. tbadmin 사용하기 Extents Viewer 2012 Tibero Co., Ltd. All Rights Reserved. 311

312 기능 (11/15) CHAPTER 12 장. tbadmin 사용하기 Database Information 2012 Tibero Co., Ltd. All Rights Reserved. 312

313 기능 (12/15) CHAPTER 12 장. tbadmin 사용하기 Tablespace Manager 2012 Tibero Co., Ltd. All Rights Reserved. 313

314 기능 (13/15) CHAPTER 12 장. tbadmin 사용하기 Instance Monitor 2012 Tibero Co., Ltd. All Rights Reserved. 314

315 기능 (14/15) CHAPTER 12 장. tbadmin 사용하기 Compile Invalid Objects 2012 Tibero Co., Ltd. All Rights Reserved. 315

316 기능 (15/15) CHAPTER 12 장. tbadmin 사용하기 Security Manager 2012 Tibero Co., Ltd. All Rights Reserved. 316

317 Export / Import 기능 (1/3) CHAPTER 12 장. tbadmin 사용하기 Export 2012 Tibero Co., Ltd. All Rights Reserved. 317

318 Export / Import 기능 (2/3) CHAPTER 12 장. tbadmin 사용하기 Import 2012 Tibero Co., Ltd. All Rights Reserved. 318

319 Export / Import 기능 (3/3) CHAPTER 12 장. tbadmin 사용하기 ExpImp 2012 Tibero Co., Ltd. All Rights Reserved. 319

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE ALTIBASE HDB 6.3.1.10.1 Patch Notes 목차 BUG-45710 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG-45730 ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG-45760 ROLLUP/CUBE 절을포함하는질의는 SUBQUERY REMOVAL 변환을수행하지않도록수정합니다....

More information

DBMS & SQL Server Installation Database Laboratory

DBMS & SQL Server Installation Database Laboratory DBMS & 조교 _ 최윤영 } 데이터베이스연구실 (1314 호 ) } 문의사항은 cyy@hallym.ac.kr } 과제제출은 dbcyy1@gmail.com } 수업공지사항및자료는모두홈페이지에서확인 } dblab.hallym.ac.kr } 홈페이지 ID: 학번 } 홈페이지 PW:s123 2 차례 } } 설치전점검사항 } 설치단계별설명 3 Hallym Univ.

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins Project 1-3: Implementing DML Due: 2015/11/11 (Wed), 11:59 PM 이번프로젝트의목표는프로젝트 1-1 및프로젝트 1-2에서구현한프로그램에기능을추가하여간단한 DML을처리할수있도록하는것이다. 구현한프로그램은 3개의 DML 구문 (insert, delete, select) 을처리할수있어야한다. 테이블데이터는파일에저장되어프로그램이종료되어도사라지지않아야한다.

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

10.ppt

10.ppt : SQL. SQL Plus. JDBC. SQL >> SQL create table : CREATE TABLE ( ( ), ( ),.. ) SQL >> SQL create table : id username dept birth email id username dept birth email CREATE TABLE member ( id NUMBER NOT NULL

More information

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET 135-080 679-4 13 02-3430-1200 1 2 11 2 12 2 2 8 21 Connection 8 22 UniSQLConnection 8 23 8 24 / / 9 3 UniSQL 11 31 OID 11 311 11 312 14 313 16 314 17 32 SET 19 321 20 322 23 323 24 33 GLO 26 331 GLO 26

More information

MySQL-.. 1

MySQL-.. 1 MySQL- 기초 1 Jinseog Kim Dongguk University jinseog.kim@gmail.com 2017-08-25 Jinseog Kim Dongguk University jinseog.kim@gmail.com MySQL-기초 1 2017-08-25 1 / 18 SQL의 기초 SQL은 아래의 용도로 구성됨 데이터정의 언어(Data definition

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate ALTIBASE HDB 6.1.1.5.6 Patch Notes 목차 BUG-39240 offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG-41443 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate 한뒤, hash partition

More information

<C1A62038B0AD20B0ADC0C7B3EBC6AE2E687770>

<C1A62038B0AD20B0ADC0C7B3EBC6AE2E687770> 제 8강 SQL: 관계데이터베이스언어 강의목표 관계데이타베이스언어로서상용 DBMS에서가장널리사용되는 SQL의동작원리에관하여학습하고, 이를이용하여다양한질의문을작성하는방법을습득한다 기대효과 SQL의데이터정의기능을이해한다 SQL의데이터조작기능중질의기능을이해한다 SQL의데이터조작기능중데이터갱신기능을이해한다 SQL의데이터조작기능중뷰및인덱스관련기능을이해한다 SQL 의개요

More information

개발및운영 Tibero SQL 가이드

개발및운영 Tibero SQL 가이드 Tibero SQL 가이드 2014. 05. 30. 목차 1. SQL... 4 1.1. SQL 개요... 4 1.2. SQL 문장분류... 4 1.3. SQL 작성시요구사항... 4 2. SQL 문장의구성요소... 5 2.1. 데이터타입... 5 2.1.1. 문자형... 6 2.1.2. 숫자형... 6 2.1.3. 날짜형... 6 2.1.4. 간격형... 6

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

Microsoft PowerPoint - 10Àå.ppt

Microsoft PowerPoint - 10Àå.ppt 10 장. DB 서버구축및운영 DBMS 의개념과용어를익힌다. 간단한 SQL 문법을학습한다. MySQL 서버를설치 / 운영한다. 관련용어 데이터 : 자료 테이블 : 데이터를표형식으로표현 레코드 : 테이블의행 필드또는컬럼 : 테이블의열 필드명 : 각필드의이름 데이터타입 : 각필드에입력할값의형식 학번이름주소연락처 관련용어 DB : 테이블의집합 DBMS : DB 들을관리하는소프트웨어

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

개발문서 Oracle - Clob

개발문서 Oracle - Clob 개발문서 ORACLE CLOB 2008.6.9 ( 주 ) 아이캔매니지먼트 개발팀황순규 0. clob개요 1. lob과 long의비교와 clob와 blob 2. 테이블생성쿼리 ( 차이점-추가사항 ) 3. select 쿼리 4. insert 쿼리및 jdbc프로그래밍 5. update 쿼리및 jdbc프로그래밍 (4, 5). putclobdata() 클래스 6. select

More information

Microsoft Word - SQL튜닝_실습교재_.doc

Microsoft Word - SQL튜닝_실습교재_.doc * 실습환경 * 1. 오라클데이터베이스의튜닝실습을하기위해서는기본적인테이블과데이터가필요합니다. 다음과같은절차에의해환경설정을하십시오. 1) 강사가제공하는 Export 된파일 (scott.dmp) 을자신의 ORACLE 경로에저장하십시오. [C: ] cd C: ORACLE ORA92 BIN [C: ] dir scott.dmp scott.dmp 2) SYSTEM 사용자로접속하여

More information

ALTIBASE HDB Patch Notes

ALTIBASE HDB Patch Notes ALTIBASE HDB 6.5.1.5.6 Patch Notes 목차 BUG-45643 암호화컬럼의경우, 이중화환경에서 DDL 수행시 Replication HandShake 가실패하는문제가있어수정하였습니다... 4 BUG-45652 이중화에서 Active Server 와 Standby Server 의 List Partition 테이블의범위조건이다른경우에 Handshake

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 다양한예제로쉽게배우는 오라클 SQL 과 PL/SQL 서진수저 9 장인덱스를배웁니다 1 1. 인덱스란무엇인가? 2 - ROWID ( 주소 ) 조회하기 SCOTT>SELECT ROWID, empno, ename 2 FROM emp 3 WHERE empno=7902 ; ROWID EMPNO ENAME --------------------------------- ----------

More information

6장. SQL

6장. SQL 학습목표 SQL이 무엇인지 개념을 설명 테이블을 생성, 변경, 제거할 할 수 있다. 수 있다. 데이터를 검색, 갱신, 삽입, 삭 제할 수 있다. 뷰, 시스템 카탈로그, 저장 프 로시저, 트리거에 대한 개념 을 설명할 수 있다. 2 목차 SECTION 01 SQL의 개요 11 SQL의 역사 12 SQL의 유형별 종류 SECTION 0 21 스키마 22 테이블

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역 WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역시쉽게해결할수있다. 이번화이트페이퍼에서는 Window Function 중순위 RANK, ROW_NUMBER,

More information

Tablespace On-Offline 테이블스페이스 온라인/오프라인

Tablespace On-Offline 테이블스페이스 온라인/오프라인 2018/11/10 12:06 1/2 Tablespace On-Offline 테이블스페이스온라인 / 오프라인 목차 Tablespace On-Offline 테이블스페이스온라인 / 오프라인... 1 일반테이블스페이스 (TABLESPACE)... 1 일반테이블스페이스생성하기... 1 테이블스페이스조회하기... 1 테이블스페이스에데이터파일 (DATA FILE) 추가

More information

untitled

untitled (shared) (integrated) (stored) (operational) (data) : (DBMS) :, (database) :DBMS File & Database - : - : ( : ) - : - : - :, - DB - - -DBMScatalog meta-data -DBMS -DBMS - -DBMS concurrency control E-R,

More information

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 다양한예제로쉽게배우는 오라클 SQL 과 PL/SQL 서진수저 4 장 JOIN 을배웁니다 1 2 1. Cartesian Product ( 카티션곱, CROSS Join) - Oracle Join 문법 SQL> SELECT e.ename, d.dname 2 FROM emp e, dept d ; - ANSI Join 문법 SQL> SELECT e.ename, d.dname

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

JDBC 소개및설치 Database Laboratory

JDBC 소개및설치 Database Laboratory JDBC 소개및설치 JDBC } What is the JDBC? } JAVA Database Connectivity 의약어 } 자바프로그램안에서 SQL 을실행하기위해데이터베이스를연결해주는응용프로그램인터페이스 } 연결된데이터베이스의종류와상관없이동일한방법으로자바가데이터베이스내에서발생하는트랜잭션을제어할수있도록하는환경을제공 2 JDBC Driver Manager }

More information

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp 1 0 1.7 6 5 'A ' '/ u 4 4 2 2 ' " JS P 프로그래밍 " A ', 'b ', ' 한 ', 9, \ u d 6 5 4 ' c h a r a = 'A '; 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 < % @ p a g e c o n te n

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

PowerPoint Presentation

PowerPoint Presentation 6 장 SQL (section 4-6) 목차 SECTION 01 SQL 의개요 1-1 SQL의역사 1-2 SQL의유형별종류 SECTION 02 데이터정의어 (DDL) 2-1 스키마 2-2 테이블생성 (CREATE TABLE) 2-3 테이블변경 (ALTER TABLE) 2-4 테이블제거 (DROP TABLE) 2-5 제약조건 SECTION 03 데이터조작어 (DML)

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

슬라이드 제목 없음

슬라이드 제목 없음 뷰와시스템카탈로그 관계데이터베이스시스템의뷰 (view) 는다른릴레이션으로부터유도된릴레이션 (derived relation) 으로서 ANSI/SPARC 3단계아키텍처의외부뷰와다름 뷰는관계데이터베이스시스템에서데이터베이스의보안메카니즘으로서, 복잡한질의를간단하게표현하는수단으로서, 데이터독립성을높이기위해서사용됨 시스템카탈로그는시스템내의객체 ( 기본릴레이션, 뷰, 인덱스,

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드] 02 C 프로그래밍기초 충남대학교이형주 1 C 프로그램구조 콘솔응용프로그램 2 프로그램실행순서 C 프로그램은여러함수의조합으로구성 함수란정해진규칙에의하여일련의작업을수행하는프로그램의단위 실행순서 main 함수는프로그램이실행되면가장먼저시작되는부분 모든함수내부에서는위에서아래로, 좌에서우로, 문장이위치한순서대로실행 3 전처리기 전처리기 (preprocessor) 미리처리하는프로그램으로,

More information

PowerPoint Presentation

PowerPoint Presentation FORENSICINSIGHT SEMINAR SQLite Recovery zurum herosdfrc@google.co.kr Contents 1. SQLite! 2. SQLite 구조 3. 레코드의삭제 4. 삭제된영역추적 5. 레코드복원기법 forensicinsight.org Page 2 / 22 SQLite! - What is.. - and why? forensicinsight.org

More information

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O Orange for ORACLE V4.0 Installation Guide ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE...1 1....2 1.1...2 1.2...2 1.2.1...2 1.2.2 (Online Upgrade)...11 1.3 ORANGE CONFIGURATION ADMIN...12 1.3.1 Orange Configuration

More information

TITLE

TITLE CSED421 Database Systems Lab MySQL Basic Syntax SQL DML & DDL Data Manipulation Language SELECT UPDATE DELETE INSERT INTO Data Definition Language CREATE DATABASE ALTER DATABASE CREATE TABLE ALTER TABLE

More information

단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL 결과에대해서 Oracle, SQL Server 순서로적으시오 TAB1 COL1 CHAR(10) COL2 CHAR(10) INSERT INTO TAB1 VALUES ('1',''); INSERT INT

단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL 결과에대해서 Oracle, SQL Server 순서로적으시오 TAB1 COL1 CHAR(10) COL2 CHAR(10) INSERT INTO TAB1 VALUES ('1',''); INSERT INT Study Room Doc.03 : SQLD 예상문제 ( 단답형 ) 네이버 Cafe : 데이터베이스전문가포럼 Study Room http://cafe.naver.com/sqlpd SQLD 26,25,24,21 회기출문제를바탕으로작성 작성자 : 월야루 도움 : 빙수민외카페댓글 2017-11-30 단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

歯JavaExceptionHandling.PDF

歯JavaExceptionHandling.PDF (2001 3 ) from Yongwoo s Park Java Exception Handling Programming from Yongwoo s Park 1 Java Exception Handling Programming from Yongwoo s Park 2 1 4 11 4 4 try/catch 5 try/catch/finally 9 11 12 13 13

More information

ALTIBASE HDB Patch Notes

ALTIBASE HDB Patch Notes ALTIBASE HDB 6.3.1.10.6 Patch Notes 목차 BUG-45060 offline replication start 와 replication drop 을동시에수행하는경우, replication start 가완료되지않았으면 replication drop 을수행하지못하도록수정하였습니다... 4 BUG-46193 메모리테이블의이중화병렬 sync

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

목 차

목      차 Oracle 9i Admim 1. Oracle RDBMS 1.1 (System Global Area:SGA) 1.1.1 (Shared Pool) 1.1.2 (Database Buffer Cache) 1.1.3 (Redo Log Buffer) 1.1.4 Java Pool Large Pool 1.2 Program Global Area (PGA) 1.3 Oracle

More information

Tibero RDBMS

Tibero RDBMS Tibero RDBMS 애플리케이션개발자안내서 Tibero RDBMS 4 SP1 Copyright 2013 TIBERO Co., Ltd. All Rights Reserved. Copyright Notice Copyright 2013 TIBERO Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 272-6 우 ) 463-824

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드] GUI 설계 6 주차 DB 연동김문정 tops@yd.ac.kr 강의순서강의전환경 JDK 설치및환경설정톰캣설치및환경설정이클립스 (JEE) 설치및환경설정 MySQL( 드라이버 ) 설치및커넥터드라이브연결 DB 생성 - 계정생성이클립스에서 DB에연결서버생성 - 프로젝트생성 DB연결테이블생성및등록 2 MySQL 설치확인 mysql - u root -p MySQL 에데이터베이스추가

More information

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터 Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터를사용자에게전송하게되며 Parsing 단계에서실행계획이생성된다. Bind 변수를사용하는 SQL

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lecture 02 프로그램구조및문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018 자바프로그램기본구조 Hello 프로그램구조 sec01/hello.java 2/40 자바프로그램기본구조 Hello 프로그램구조

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자 SQL Developer Connect to TimesTen 유니원아이앤씨 DB 팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 2010-07-28 작성자 김학준 최종수정일 2010-07-28 문서번호 20100728_01_khj 재개정이력 일자내용수정인버전

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

FileMaker 15 ODBC 및 JDBC 설명서

FileMaker 15 ODBC 및 JDBC 설명서 FileMaker 15 ODBC JDBC 2004-2016 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker, Inc... FileMaker.

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

슬라이드 1

슬라이드 1 Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치

More information

단계

단계 본문서에서는 Tibero RDBMS 에서제공하는 Oracle DB Link 를위한 gateway 설치및설정방법과 Oracle DB Link 사용법을소개한다. Contents 1. TIBERO TO ORACLE DB LINK 개요... 3 1.1. GATEWAY 란... 3 1.2. ORACLE GATEWAY... 3 1.3. GATEWAY 디렉터리구조...

More information

FileMaker ODBC 및 JDBC 가이드

FileMaker ODBC 및 JDBC 가이드 FileMaker ODBC JDBC 2004-2019 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker, FileMaker Cloud, FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker,

More information

슬라이드 제목 없음

슬라이드 제목 없음 4.2 SQL 개요 SQL 개요 SQL은현재 DBMS 시장에서관계 DBMS가압도적인우위를차지하는데중요한요인의하나 SQL은 IBM 연구소에서 1974년에 System R이라는관계 DBMS 시제품을연구할때관계대수와관계해석을기반으로, 집단함수, 그룹화, 갱신연산등을추가하여개발된언어 1986년에 ANSI( 미국표준기구 ) 에서 SQL 표준을채택함으로써 SQL이널리사용되는데기여

More information

SQL Tuning Business Development DB

SQL Tuning Business Development DB SQL Tuning Business Development DB Oracle Optimizer 4.1 Optimizer SQL SQL.. SQL Optimizer :.. Rule-Based Optimization (RBO), Cost-Based Optimization (CBO) SQL Optimizer SQL Query Parser Dictionary Rule-Based

More information

J2EE Concepts

J2EE Concepts ! Introduction to J2EE (1) - J2EE Servlet/JSP/JDBC iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

,, - - - : DELETE : ROW (ROWID) row ROWID : I/O Full Table Scan scan I/O scan Index Scan ROWID scan I/O Fast Full Index Scan scan scan I/O Unique, nonunique. (Concatenated Index) B* Tree Bitmap Reverse

More information

ORACLE-SQL

ORACLE-SQL ORACLE-SQL SELECT 문 2014-04-12 Blog.ksh123jjang.me 내용 SELECT문이란?... 2 SLELECT문사용하기... 3 모든열선택... 4 특정열검색... 5 SQL문작성방법... 6 열머리글기본값... 7 산술식... 8 NULL... 9 열 alias... 10 연결연산자... 11 대체인용연산자 (q)... 12 중복행제거...

More information

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 다양한예제로쉽게배우는 오라클 SQL 과 PL/SQL 서진수저 3 장 SQL 복수행함수 ( 그룹함수 ) 를배웁니다 1 함수이름 의 미 사용예 COUNT 입력되는데이터들의건수를출력 COUNT(sal) SUM 입력되는데이터들의합계값을출력 SUM(sal) AVG 입력되는데이터들의평균값을출력 AVG(sal) MAX 입력되는데이터들중최고값을출력 MAX(sal) MIN

More information

PowerPoint Presentation

PowerPoint Presentation 6 장 SQL 목차 SECTION 01 SQL 의개요 1-1 SQL의역사 1-2 SQL의유형별종류 SECTION 02 데이터정의어 (DDL) 2-1 스키마 2-2 테이블생성 (CREATE TABLE) 2-3 테이블변경 (ALTER TABLE) 2-4 테이블제거 (DROP TABLE) SECTION 03 데이터조작어 (DML) 3-1 데이터검색 (SELECT)

More information

Microsoft PowerPoint - 3장-MS SQL Server.ppt [호환 모드]

Microsoft PowerPoint - 3장-MS SQL Server.ppt [호환 모드] MS SQL Server 마이크로소프트사가윈도우운영체제를기반으로개발한관계 DBMS 모바일장치에서엔터프라이즈데이터시스템에이르는다양한플랫폼에서운영되는통합데이터관리및분석솔루션 2 MS SQL Server 개요 3.1 MS SQL Server 개요 클라이언트-서버모델을기반으로하는관계 DBMS로서윈도우계열의운영체제에서만동작함 오라클관계 DBMS보다가격이매우저렴한편이고,

More information

Microsoft PowerPoint - Oracle Data Access Pattern.ppt

Microsoft PowerPoint - Oracle Data Access Pattern.ppt Special Key Note Oracle Data Access Pattern ( 주 ) 오픈메이드컨설팅 오동규수석컨설턴트 1 What is Data Access Pattern? > 데이터를 I/O 하는방식 Index Scan Full Table Scan Rowid 2 Why is The Pattern Important? >SQL 의성능을좌지우지함. >SQL

More information

문서 템플릿

문서 템플릿 HDSI 툴분석 [sql injection 기술명세서 ] Sql injection 기술명세서 Ver. 0.01 이문서는 sql injection 기술명세가범위입니다. Copyrights Copyright 2009 by CanvasTeam@SpeeDroot( 장경칩 ) All Rights Reserved. 장경칩의사전승인없이본내용의전부또는일부에대한복사, 전재,

More information

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600 균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at

More information

Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER

Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUERY 을실행하게된다면 BLOCK I/O 가많이발생하게된다. 이런이유로 QUERY 의성능은좋지못할것이다.

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

Microsoft PowerPoint - QVIZMVUMWURI.pptx

Microsoft PowerPoint - QVIZMVUMWURI.pptx 데이타베이스시스템 2011.03 충북대학교경영정보학과조완섭 (wscho@chungbuk.ac.kr) Chap. 4 SQL 질의어 C4 2 목차 - SQL2에서데이터정의, 제약조건및스키마변경 - SQL에서의기본질의 - 더복잡한 SQL 질의들 - SQL에서삽입, 삭제, 갱신구문 - SQL 뷰 - 주장으로추가적인제약조건명시 - SQL의부가적인기능들 Ch4 3 SQL

More information

´ÙÁß Row °á°ú¸¦ ´ÜÀÏÇàÀ¸·Î Äĸ¶·Î ºÐ¸®ÇØ Ãâ·ÂÇÏ´Â ¹æ¹ý

´ÙÁß Row °á°ú¸¦ ´ÜÀÏÇàÀ¸·Î Äĸ¶·Î ºÐ¸®ÇØ Ãâ·ÂÇÏ´Â ¹æ¹ý 5 중 1 2007-06-12 오후 5:52 Home Login Register SQL Query SQL Tuning Oracle Administration Tools References Boards SoQooL? 쏘쿨 SoQooL) 이란? Q&A Tips Lectures Function Lectures Oracle Spatial Tips Scripts SQL

More information

Tibero

Tibero Tibero 애플리케이션개발자안내서 Tibero 5 Copyright 2013 TIBERO Co., Ltd. All Rights Reserved. Copyright Notice Copyright 2013 TIBERO Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 272-6 우 ) 463-824 Restricted Rights

More information

Jerry Held

Jerry Held ,, - - - : DELETE : ROW (ROWID) row ROWID : I/O Full Table Scan I/O Index Scan ROWID I/O Fast Full Index Scan scan scan scan I/O scan scan Unique, nonunique. (Concatenated Index) B* Tree Bitmap Reverse

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

슬라이드 1

슬라이드 1 Tadpole for DB 1. 도구개요 2. 설치및실행 4. 활용예제 1. 도구개요 도구명 소개 Tadpole for DB Tools (sites.google.com/site/tadpolefordb/) 웹기반의데이터베이스를관리하는도구 Database 스키마및데이터관리 라이선스 LGPL (Lesser General Public License) 특징 주요기능

More information

빅데이터분산컴퓨팅-5-수정

빅데이터분산컴퓨팅-5-수정 Apache Hive 빅데이터분산컴퓨팅 박영택 Apache Hive 개요 Apache Hive 는 MapReduce 기반의 High-level abstraction HiveQL은 SQL-like 언어를사용 Hadoop 클러스터에서 MapReduce 잡을생성함 Facebook 에서데이터웨어하우스를위해개발되었음 현재는오픈소스인 Apache 프로젝트 Hive 유저를위한

More information

[ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL T-SQL 문법 5.3 JAVA 프로그래밍 2

[ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL T-SQL 문법 5.3 JAVA 프로그래밍 2 5 장 SQL 응용 데이터베이스실험실 1 [ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL 5.2.1 T-SQL 문법 5.3 JAVA 프로그래밍 2 5.1 데이터베이스프로그래밍개념 프로그래밍 이라고하면프로그램소스를설계하고, 작성하고, 디버깅하는과정을말한다. 프로그램 혹은소프트웨어는컴퓨터에서주어진작업을하는명령어나열을말한다. 데이터베이스프로그래밍은명확한정의는없지만데이터베이스에데이터를정의하고,

More information

슬라이드 1

슬라이드 1 UNIT 6 배열 로봇 SW 교육원 3 기 학습목표 2 배열을사용핛수있다. 배열 3 배열 (Array) 이란? 같은타입 ( 자료형 ) 의여러변수를하나의묶음으로다루는것을배열이라고함 같은타입의많은양의데이터를다룰때효과적임 // 학생 30 명의점수를저장하기위해.. int student_score1; int student_score2; int student_score3;...

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) 8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 ) - DDL(Data Definition Language) : show, create, drop

More information

5장 SQL 언어 Part II

5장 SQL 언어 Part II 5 장 SQL 언어 Part II 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 5 장 SQL 언어 Part II 1 / 26 데이터조작문 데이터검색 : SELECT 문데이터추가 : INSERT 문데이터수정 : UPDATE 문데이터삭제 : DELETE 문 박창이 ( 서울시립대학교통계학과 ) 5 장 SQL 언어 Part II 2 / 26 SELECT

More information

슬라이드 제목 없음

슬라이드 제목 없음 MS SQL Server 마이크로소프트사가윈도우운영체제를기반으로개발한관계 DBMS 모바일장치에서엔터프라이즈데이터시스템에이르는다양한플랫폼에서운영되는통합데이터관리및분석솔루션 2 MS SQL Server 개요 3.1 MS SQL Server 개요 클라이언트-서버모델을기반으로하는관계 DBMS 로서윈도우계열의운영체제에서만동작함 오라클관계 DBMS 보다가격이매우저렴한편이고,

More information