SlideShare a Scribd company logo
Fast track to SYBASE IQFast track to SYBASE IQFast track to SYBASE IQ
ํ•œ๊ตญ์‚ฌ์ด๋ฒ ์ด์Šค
Pre-Sales BI Part
ver 2.9
2003/10/09
์†Œ๋ณ‘๊ฐ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ Overview
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Sybase RDBMS
Sybase๊ฐ€ ์ œ๊ณตํ•˜๋Š” RDBMS๋Š” ๊ฐ ์—…๋ฌด์˜ ๊ทœ๋ชจ์™€ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ํฌ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด 3๊ฐœ๋กœ ๊ตฌ
๋ถ„๋˜์–ด์ง‘๋‹ˆ๋‹ค.
Adaptive Server Anywhere (ASA): ๊ฐœ์ธ์—…๋ฌด์šฉ ์ตœ์†Œํ˜• RDBMS์ด๊ณ  ANSI
ํ‘œ์ค€ SQL๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๊ฒ€์ฆ๋œ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. SYBASE IQ์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ 
์žˆ์œผ๋ฉฐ SYBASE IQ์—์„œ๋Š” Catalog, Query parser, Connectivity๋ฅผ ๋‹ด๋‹นํ•˜๊ณ 
์žˆ์Šต๋‹ˆ๋‹ค
Adaptive Server Enterprise (ASE) : ๋ฒ”์šฉ RDBMS์ด๋ฉฐ ํŠนํžˆ OLTP ์—…๋ฌด์—
ํƒ์›”ํ•œ ํšจ๊ณผ๋ฅผ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค. DW ์†”๋ฃจ์…˜์—์„œ OLAP์˜ Repository ์˜์—ญ์œผ๋กœ๋„
์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ : DW/DSS/Data Mart ์—…๋ฌด๋ฅผ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์–ด์ง„ ์ „์šฉ RDBMS ์ด๋ฉฐ
ASA๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ ์—ฌ๊ธฐ์— ํฌํ•จ๋œ ASA ์˜์—ญ์€ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์˜์—ญ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ ๋Š”โ€ฆโ€ฆ
๊ธฐ์กด RDBMS๋Š” OLTP์™€ DSS๊ฐ€ ํ˜ผ์žฌ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์ธ๋ฐ ๋ฐ˜ํ•ด SYBASE IQ ๋ฐ์ดํ„ฐ
์›จ์–ดํ•˜์šฐ์Šค ์ „์šฉ RDBMS๋กœ ์ธ๋ฑ์‹ฑ์ด๋‚˜ ์•ก์„ธ์Šค ๋ฐฉ์‹์—์„œ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์— ๋งž๋Š” ์ƒˆ๋กœ
์šด ๊ธฐ๋ฒ•์œผ๋กœ ๊ตฌํ˜„๋œ RDBMS๋กœ ์„ฑ๋Šฅ, ์œ ์—ฐ์„ฑ, ๊ฒฝ์ œ์„ฑ ์ธก๋ฉด์—์„œ ๊ฐ€์žฅ ํƒ์›”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
์ž…๋‹ˆ๋‹ค
๊ธฐ์กด RDBMS๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์งˆ์˜ ํŠนํžˆ ์กฐ์ธ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ
๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋น„์ •๊ทœํ™” ์ฆ‰ Star-Schema ๋˜๋Š” Snowflake-Schema๋กœ ๋””์ž์ธ ํ•˜๊ธฐ๋ฅผ
๊ถŒ์žฅ ํ•˜๊ธฐ๋„ ํ•˜๊ณ  ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฒ•์˜ ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ๋””์ž์ธ์— ์˜ํ•ด ER ๋ชจ๋ธ์„ ๊ถŒ์žฅํ•˜๊ธฐ๋„ ํ•˜์ง€
๋งŒ SYBASE IQ์˜ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์ œ์•ฝ๋„ ๋‘์ง€ ์•Š์Šต๋‹ˆ
๋‹ค
RDBMS๊ฐ€ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋‹จ์ผ ์งˆ์˜ ์ž‘์—…์„ MPP์™€ ๊ฐ™์€ ๋ณ‘๋ ฌ ๋…ธ๋“œ์— ๋ถ„๋‹ด์‹œํ‚ค
๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜๋Š”๋ฐ ์ด๋Š” ๋น„์šฉ์— ๋น„ํ•ด ์„ฑ๋Šฅ์— ๋ฌธ์ œ
๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ ํŠน์ง•-column-wise data ๊ตฌ์กฐ
๊ธฐ์กด RDBMS๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐฉ์‹์ด ๋ ˆ์ฝ”๋“œ ๋ ˆ๋ฒจ๋กœ ๋˜์–ด ์žˆ๊ณ  DW๋Š” ์ผ์ • ์ฃผ๊ธฐ๋กœ ๋ฐ์ด
ํ„ฐ๊ฐ€ ๋กœ๋“œ ๋˜๋ฉฐ ๋กœ๋“œ๋œ ํ›„์— ์•ก์„ธ์Šค ๋˜๋Š” ํ˜•ํƒœ๋กœ ์ด์šฉ๋˜์–ด ์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ DW์— ์‚ฌ์šฉ๋˜๋Š”
์งˆ์˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ํ•„์š”ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน์ • ๋ช‡ ๊ฐœ์˜ ์ปฌ๋Ÿผ๋งŒ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ
๋ผ์„œ ๋ ˆ์ฝ”๋“œ ๋ ˆ๋ฒจ์˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐฉ์‹์€ ๋ถˆํ•„์š”ํ•œ I/O๋ฅผ ์œ ๋ฐœ ์‹œํ‚ค๋ฏ€๋กœ DW๋ฅผ ํšจ๊ณผ์ ์œผ
๋กœ ์ง€์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ์ด์™€ ๊ฐ™์€ I/O์˜ ์ฆ๊ฐ€๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด MPP์™€ ๊ฐ™์€ ๋ณ‘๋ ฌ ์‹œ์Šคํ…œ์„ ์ด
์šฉ ํ•˜๋Š”๋ฐ ์ด๋Š” ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์— I/O๋ฅผ ๋ถ„์‚ฐ์‹œ์ผœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฒƒ์ธ๋ฐ ๊ฒฐ๊ตญ I/O์˜
์ด๋Ÿ‰์€ ๋ณ€ํ™”๊ฐ€ ์—†์œผ๋ฉฐ ๋น„์šฉ ๋Œ€๋น„ ์„ฑ๋Šฅ์ด ํƒ์›”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. SYBASE IQ
๋Š” I/O ์ž์ฒด๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ๋ฒ•์„ ์ œ๊ณต ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ์•ก์„ธ
์Šค ํ•˜์—ฌ ํ•œ๋ฒˆ I/O์— ๋Œ€๋‹จํžˆ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ ํŠน์ง•-bit-wise index ๊ตฌ์กฐ
์นผ๋Ÿผ์˜ ์นด๋””๋‚ ๋ฆฌํ‹ฐ์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๋ฅผ bit mask ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์ด๋ ‡๊ฒŒ ํ‘œํ˜„๋œ ๊ฐ bit๋Š” ๊ฐœ
๋ณ„์ ์œผ๋กœ ๋”ฐ๋กœ ์ €์žฅ๋˜์–ด ์ธ๋ฑ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค
์ด๋ ‡๊ฒŒ bit ๋‹จ์œ„๋กœ ์ €์žฅ๋œ ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์••์ถ•์ €์žฅ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋˜ํ•œ ์„œ
๋กœ ๋‹ค๋ฅธ ์••์ถ•๋ฅ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์••์ถ•๋ฅ ์€ ๋ฐ์ดํ„ฐ์˜ ์„ฑ๊ฒฉ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ž์ธ ํŽ˜์ด์ง€ ํฌ๊ธฐ์— ๋”ฐ
๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ๋ฅผ ์ด๋Ÿฐ ์šฉ๋„๋กœ๋Š”โ€ฆโ€ฆ
SYBASE IQ์˜ Lock, ํŠธ๋žœ์žญ์…˜ ๋ฉ”์นด๋‹ˆ์ฆ˜๋“ฑ ๋ชจ๋“  ๊ตฌ์กฐ๊ฐ€ DW ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•˜๋„๋ก ๋””์ž์ธ
์ด ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—…๋ฌด๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์•„๋ž˜์— ์–ธ๊ธ‰๋˜๊ณ  ์žˆ๋Š”
์—…๋ฌด์˜ ํŠน์„ฑ๋“ค์€ ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๊ฑด ํ•œ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ฃผ๋กœ ํ•˜๋Š” ์—…๋ฌด
์ž…๋‹ˆ๋‹ค.
OLTP
Real time update
์œ„์™€ ๊ฐ™์€ ํ•„์š”์„ฑ์ด ์žˆ๋Š” ์—…๋ฌด๋Š” ๊ฐ™์ด ์ œ๊ณต๋˜๋Š” ASE๋ผ๋Š” RDBMS๋กœ ์ด๋™ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ
๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ Client ์„ค์ •ํ•˜๊ธฐ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ Client
ODBC๋ฅผ ์ง€์›ํ•˜๋Š” Client : SYBASE IQ์— ์ตœ์ ํ™” ๋œ API ๋ฐฉ๋ฒ•์ด๋ฉฐ ๊ฐ๊ฐ UNIX์šฉ๊ณผ
Window์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
DBISQLC(Interactive SQL Classic) : SYBASE IQ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” SQL
Editor
๊ทธ ์™ธ 3rd party ์ œํ’ˆ
OCDK๋ฅผ ์ง€์›ํ•˜๋Š” Client : SYBASE IQ๋Š” Native Driver์ธ OCDK๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ODBC
๋ฐฉ๋ฒ•๊ณผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์„ค์ • ๊ฐ’์ด ๋‹ฌ๋ผ ์›ํ•˜์ง€ ์•Š๋Š” ๋ถ€์ž‘์šฉ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋ถ„ํžˆ ์ˆ™
์ง€ ํ›„์— ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
isql : ASE์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ช…๋ น์–ด ๋Œ€ํ™”๋ฐฉ์‹์˜ SQL Editor
SQL Advantage : ASE์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” GUI ๋Œ€ํ™”๋ฐฉ์‹์˜ SQL Editor
๊ทธ ์™ธ 3rd party ์ œํ’ˆ
JDBC๋ฅผ ์ง€์›ํ•˜๋Š” Client : Sybase์˜ JDBC์ธ Jconnect๋ฅผ ์ง€์›ํ•˜๋Š” API ์ž…๋‹ˆ๋‹ค.
DBISQL(Interactive SQL JAVA) : SYBASE IQ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” SQL Editor
์ด๋ฉฐ ์ง€์› API์— ๋”ฐ๋ผ OCDK (Jconnect)์™€ ODBC (JDBC-ODBC Bridge)๋ฅผ ์„ ํƒํ• 
์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
3rd party ์ œํ’ˆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ODBC ์„ค์ • โ€“ win client
ODBC Administrator๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ODBC ์„ค์ • โ€“ win client
Add ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ƒˆ๋กœ์šด data source๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
๋‹จ, SYBASE IQ Server๋Š” Unix Server์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ODBC ์„ค์ • โ€“ win client
Adaptive Server IQ 12 ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ ํƒํ•˜๊ณ  Finish ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค
ODBC ํƒญ์„ ์„ ํƒํ•˜๊ณ  Data source name ํ•„๋“œ์— ์ ์ ˆํ•œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ODBC ์„ค์ • โ€“ win client
Login ํƒญ์„ ์„ ํƒํ•˜๊ณ  User ID์™€ Password์˜ ํ•„๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค
Database ํƒญ์„ ์„ ํƒํ•˜๊ณ  Server name๊ณผ Database name ํ•„๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ODBC ์„ค์ • โ€“ win client
Network ํƒญ์„ ์„ ํƒํ•˜๊ณ  TCP/IP ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํด๋ฆญํ•˜๊ณ  SYBASE IQ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ์™€ port
๋ฒˆํ˜ธ๋ฅผ ์ฝœ๋ก (์ฃผ์˜:์„ธ๋ฏธ์ฝœ๋ก  ์•„๋‹˜)์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
ODBC ํƒญ์„ ์„ ํƒํ•˜๊ณ  Test connection ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.(๋‹จ, ์ด ๊ธฐ๋Šฅ์€ Win98๊ณผ ๊ฐ™์€
ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ๋˜์ง€ ์•Š๊ณ  WinNT์™€ ๊ฐ™์€ ์„œ๋ฒ„ ๊ณ„์—ด์—์„œ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.)
์ฝœ๋ก 
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ODBC ์„ค์ • โ€“ unix client
dbdsn ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ด์šฉ
% $SYBASE/ASIQ-12_5/bin/dbdsn โ€“c โ€œENG=asiqdemo;DBN=asiqdemo;UID=dba;
PWD=SQL;CommLinks=tcpip{host=157.133.75.36;port=2345}โ€ โ€“w asiqdemo
์œ„ ๋ช…๋ น์–ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๋ฉด $SYBASE/.odbc.ini ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋“ค
์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ODBCINI๋ผ๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ํŠน๋ณ„ํžˆ ๋”ฐ๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๋ฉด ์„ค์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ
์˜ .odbc.ini ๋ผ๋Š” ํŒŒ์ผ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ .odbc.ini ๋ผ๋Š” ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ
๋‹ค.
์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘
๋งŒ์•ฝ ODBCINI ๋ผ๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด $ODBCINI/.odbc.ini ํŒŒ์ผ์„, ์„ค์ •๋˜์–ด
์žˆ์ง€ ์•Š๋‹ค๋ฉด $SYBASE/.odbc.ini ํŒŒ์ผ์„ vi ์™€ ๊ฐ™์€ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ์ง‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
[asiqdemo] // data source name
Userid=dba // user id
Password=SQL // password
DatabaseName=asiqdemo // IQ database name
ServerName=asiqdemo // IQ engine name
CommLinks=tcpip{host=157.133.75.36;port=2345} // protocol, IP, port
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
JDBC/OCDK ์„ค์ • โ€“ win client
DSEDIT๋ผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  OK ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, SYBASE IQ 12.5 ์ด์ƒ์—
์„œ๋Š” OCDK ๋ชจ๋“ˆ์ด ์„ค์น˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
start programs sybase Dsedit Utility
Server๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
Server Object Addโ€ฆโ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
JDBC/OCDK ์„ค์ • โ€“ win client
๋“ฑ๋ก๋œ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ์™€ port ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค
Server Object Modify Attribute
OK ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค
์ฝค๋งˆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
JDBC/OCDK ์„ค์ • โ€“ win client
SYBASE IQ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
Server Object Ping Server
์•„๋ž˜์™€ ๊ฐ™์€ ์—ฐ๊ฒฐ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด๋ฉด ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
JDBC/OCDK ์„ค์ • โ€“ unix client
dscp ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉ
% $SYBASE/OCS-12_5/bin/dscp
>> open
OK
FailOver to Interface Driver
Session 1 InterfacesDriver>> add asiqdemo // IQ engine name
Service : [SQL Server] // enter
Transport Type : [tcp] tli tcp // sun์„ ์ œ์™ธํ•˜๋ฉด tcp
Transport Address : 157.133.75.36 2345 // IP, port
Transport Type : [tcp] // enter
Transport Address : // enter
Security Mechanism [ ] : // enter
HA Failoverserver : [ HA Failover Server ] // enter
Error in adding asiqdemo
Session 1 InterfacesDriver>> exit
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
JDBC/OCDK ์„ค์ • โ€“ unix client
dscp ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉ(๊ณ„์†)
์œ„ ๋ช…๋ น์–ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๋ฉด $SYBASE/interfaces ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด
๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘
$SYBASE/interfaces ํŒŒ์ผ์„ vi ์™€ ๊ฐ™์€ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํŽธ์ง‘ํ•˜
์‹ญ์‹œ์˜ค. ๋‹จ, ํŽธ์ง‘ํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์€ master, query ์•ž์˜ ๋ฌธ์ž๋Š” ๋ฐ˜๋“œ์‹œ ํƒญ์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ
๋‹ˆ๋‹ค.
asiqdemo // for Solaris
master tli tcp /dev/tcp x000209299e4d32730000000000000000
query tli tcp /dev/tcp x000209299e4d32730000000000000000
asiqdemo // for HP, IBMโ€ฆ.
master tcp ether 157.133.75.36 2345
query tcp ether 157.133.75.36 2345
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
DBISQL
SYBASE IQ์˜ ๊ธฐ๋ณธ์ ์ธ ์งˆ์˜ ํŽธ์ง‘ ํˆด
Embedded SQL/C ๊ณ„์—ด
UNIX : dbisqlc
Window : interactive SQL Classic
JAVA ๊ณ„์—ด
UNIX : dbisql
Window : interactive SQL JAVA
์ฐธ๊ณ  : ์›๋ž˜ dbisql์€ ASA(Adaptive Server Anywhere)์˜ ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL Classic
Window ๊ณ„์—ด์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ ODBC๋ฅผ ํ‘œ์ค€ API๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ Interactive SQL Classic์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL Classic
Login ํƒญ์˜ ODBC data source name ์ฝค๋ณด ๋ฐ•์Šค์—์„œ ODBC ์„ค์ •์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€
์ ‘์†์„ ์›ํ•˜๋Š” data source name์„ ์„ ํƒํ•œ ํ›„ OK ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL Classic
Data, Statistics, Command ์„ธ ๊ฐœ์˜ ์„œ๋ธŒ ์ฐฝ์„ ๊ฐ€์ง€ Interactive SQL Classic ๋ฉ”์ธ ํ™”๋ฉด
์ด ๋‚˜์˜ค๊ณ  Statistics ์ฐฝ์— Connected to database ๋ผ๋Š” ์ ‘์† ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๊ฐ€ ๋ชจ์ด๋ฉด ์ •์ƒ
์ ‘์† ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ SQL๋ฌธ์„ ํŽธ์ง‘ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
Command
window
Statistics
window
Data
window
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL Classic
File menu : Command ์ฐฝ์—์„œ ํŽธ์ง‘ํ•œ SQL๋ฌธ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” Save as, ์ €์žฅ๋œ SQL๋ฌธ
์„ Command ์ฐฝ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” Open์„ ๋น„๋กฏํ•˜์—ฌ New, Exit ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
Edit menu : Command ์ฐฝ์—์„œ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” Cut, Copy, Paste, Delete์™€ ์ ‘์†ํ•œ ์„œ๋ฒ„
์˜ ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Insert Table ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.๋˜ํ•œ ๊ฐ๊ฐ์˜ ๋ฉ”๋‰ด์—๋Š” ๋‹จ
์ถ• ํ‚ค์™€ ๊ธฐ๋Šฅ ํ‚ค๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค
Command menu : Command ์ฐฝ์—์„œ ํŽธ์ง‘ํ•œ SQL๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Execute,
Command ์ฐฝ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•œ ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ดํ•˜๋Š” Recall,
Previous Command, Next Command, ์ƒˆ๋กœ์šด ์ ‘์†์„ ์œ„ํ•œ Connect, ์ ‘์†์„ ๋Š๊ธฐ ์œ„ํ•œ
Disconnect, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” Options ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
Window menu : ์„œ๋ธŒ ์ฐฝ์˜ ๋ฐฐ์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” Tile, Always Tile, ์„ธ ๊ฐœ์˜ ์„œ๋ธŒ ์ฐฝ์„ ๊ฐ๊ฐ ํ™œ
์„ฑํ™” ์‹œํ‚ค๋Š” Data, Statistics, Command ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ์™ธ์— Help ๋ฉ”๋‰ด ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL Classic
์˜ต์…˜ ์„ค๋ช… : Command ๋ฉ”๋‰ด์— Options ์„œ๋ธŒ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐฝ์ด ์ƒˆ๋กœ ๋งŒ
๋“ค์–ด ์ง€๋ฉฐ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ์˜ต์…˜์€ SYBASE IQ์— ์ ‘์†์‹œ ์„œ
๋ฒ„์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ํ•ด๋‹น๋˜๋Š” ๊ฐ๊ฐ์˜ ์˜ต์…˜ ๊ฐ’์„ ์ฝ์–ด ๋“ค์—ฌ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL Classic
After Every Command : ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ๋‹จ์œ„ ๋ช…๋ น์–ด ๋’ค์— ์ž๋™์œผ๋กœ commit ๋ช…๋ น์–ด ์‹คํ–‰
์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Auto_Commit ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ Off ์ž…๋‹ˆ
๋‹ค.
When Exiting SQL : dbisqlc์˜ ์ ‘์†์„ ๋Š๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•  ๋•Œ์— commit ๋ช…๋ น์–ด ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ
์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Commit_on_Exit ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ On ์ž…๋‹ˆ๋‹ค.
Automatic Window Refresh : Insert, Update, Delete์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์งˆ์˜ ๊ฒฐ
๊ณผ์— ๋ฐ˜์˜ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Auto_Refetch ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’
์€ On ์ž…๋‹ˆ๋‹ค.
Show Column Headings : ๊ฐ ์ปฌ๋Ÿผ์˜ ํ—ค๋”ฉ์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„
์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Headings ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ On ์ž…๋‹ˆ๋‹ค.
Beep on Errors : ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ฒฝ๊ณ ์Œ์„ ๋ฐœ์ƒํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ
์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Bell ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ On ์ž…๋‹ˆ๋‹ค.
Command Delimiter : ํ•œ ๋ฌธ์žฅ์˜ ์ข…๋ฃŒ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜
๋Š” ์˜ต์…˜ ๋ช…์€ Command_Delimiter ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ ;(์„ธ๋ฏธ์ฝœ๋ก ) ์ž…๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL Classic
Show Null Value As : ๊ฐ ํ…Œ์ด๋ธ”์— ์ž…๋ ฅ๋œ ๊ฐ’ ์ค‘์— NULL ๊ฐ’์˜ ํ‘œํ˜„์„ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ์ œ์–ด
ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Nulls ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ ๋ฌธ์ž์—ด NULL ์ž…๋‹ˆ๋‹ค.
Log ISQL Commands to File : Command ์ฐฝ์—์„œ ํŽธ์ง‘๋œ SQL์ด ๊ธฐ๋ก๋˜๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„
์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Isql_Log ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ ๊ณต๋ฐฑ ๋ฌธ์ž ์ž…๋‹ˆ๋‹ค.
์ฆ‰ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๊ธฐ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Echo During Execution : SQL ๋ฌธ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— Echo ๋ ์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„
์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Echo ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ On ์ž…๋‹ˆ๋‹ค.
When an Error Occurs : ์—ฌ๋Ÿฌ ๊ฐœ์˜ SQL๋ฌธ์„ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜๋กœ ์‹คํ–‰ ์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด
์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ On_Error ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€
prompt ์ž…๋‹ˆ๋‹ค.
Input Format, Output Format, Limit Output columns to : ํ˜„์žฌ ์ง€์›๋˜์ง€ ์•Š๋Š” ์˜ต์…˜์ž…๋‹ˆ
๋‹ค.
Limit Display Columns To : ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋Š” ๊ฐ ์ปฌ๋Ÿผ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—
์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Truncation_Length ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ 30 ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL Classic
OK button : ํ˜„์žฌ ์„ธ์…˜์—์„œ๋งŒ ๋ณ€๊ฒฝ๋œ ์˜ต์…˜์˜ ํšจ๋ ฅ์ด ๋ฐœ์ƒํ•˜๋ฉฐ set temporary option ๊ณผ
๊ฐ™์Šต๋‹ˆ๋‹ค.
Permanent button : ํ•ด๋‹น๋˜๋Š” ์‚ฌ์šฉ์ž์˜ ๋ณ€๊ฒฝ๋œ ์˜ต์…˜์˜ ํšจ๋ ฅ์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋ฉฐ set
option๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ฐธ๊ณ 
dbisqlc ํ”„๋กœ๊ทธ๋žจ์€ ์งˆ์˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•  ๋•Œ ESQL/C์˜ ์ปค์„œ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ 
์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ปค์„œ๋ฅผ ์˜คํ”ˆํ•œ ํ›„์— ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ชจ๋‘ ์ „์†ก๋˜์ง€ ์•Š๊ณ  ํด
๋ผ์ด์–ธํŠธ ๋ฒ„ํผ ํฌ๊ธฐ ๋งŒํผ์˜ ์–‘๋งŒ ์ „์†ก๋˜๊ณ  ๋” ๋งŽ์€ ์–‘์„ ์กฐํšŒํ•  ๋•Œ ๊ทธ ๋•Œ ๋‹ค์‹œ ์ „์†ก๋˜๊ณ  ํ•ฉ
๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์ปค์„œ๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡
๊ฒŒ ์ปค์„œ๊ฐ€ ์—ด๋ ค์žˆ๋Š” ์ƒํƒœ์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด๋‚˜ Stored Procedure๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ DDL ๋ช…
๋ น์„ ์•„๋ž˜ ๋ฉ”์‹œ์ง€์ฒ˜๋Ÿผ ๋ธ”๋กํ‚นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํƒœ๋ฅผ ๋ฒ—์–ด๋‚˜๋ ค๋ฉด ๋˜ ๋‹ค๋ฅธ SQL ๋ฌธ์„
์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ resume ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋ฉด ์ปค์„œ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
UNIX : dbisqlc
Syntax : dbisqlc [-c โ€œkeyword=valueโ€ฆโ€ฆโ€ | -d โ€œdelimiterโ€ | -q | -x]
์—ฌ๊ธฐ์„œ โ€“q ๋Š” quite mode, -x๋Š” syntax check only ์˜ต์…˜์ด๋ฉฐ keyword์— ํ•ด๋‹น๋˜๋Š” ์ž์„ธ
ํ•œ ๋ชฉ๋ก์€ ๋ฉ”๋‰ด์–ผ์„ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค
GUI Mode : ๊ทธ๋ž˜ํ”ฝ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜์–ด ๋งˆ์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ
์„ ์ œ์™ธํ•˜๋ฉด Window ์šฉ๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด๋Š” dbisqlc ์ด๋ฉฐ ๋’ค์—
์ ‘์†์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ถ™์—ฌ์ค˜์•ผ ํ•˜๋Š”๋ฐ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐ€์ง€ ํ˜•
ํƒœ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ ๊ธฐํ˜ธ์— ๋”ฐ๋ผ ์„ ํƒํ•˜์—ฌ ํ˜น์€ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. dbisqlc ์‹คํ–‰ํŒŒ์ผ์˜
์œ„์น˜๋Š” $ASDIR/bin์— ์žˆ์Šต๋‹ˆ๋‹ค.
Command Line์— ์ง์ ‘ ์ž…๋ ฅ : dbisqlc๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์ ‘์†์— ํ•„์š”ํ•œ ์˜ต์…˜์„ ๋ช…๋ น์–ด์™€
๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, dbisqlc์˜ ์‹คํ–‰์„ ์œ„ํ•œ path๊ฐ€ ์ ์ ˆํžˆ ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค
% dbisqlc โ€“c โ€œuid=DBA;pwd=SQL;eng=asiqdemo;dbn=asiqdemoโ€
SQLCONNECT ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด์šฉ : ์ ‘์†์— ํ•„์š”ํ•œ ์˜ต์…˜์„ SQLCONNECT๋ผ๋Š” ํ™˜๊ฒฝ
๋ณ€์ˆ˜์— ์„ค์ •ํ•˜๊ณ  ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ๋ช…๋ น์–ด๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
% dbisqlc
.odbc.ini ์ด์šฉ : ์ ‘์†์— ํ•„์š”ํ•œ ์˜ต์…˜์„ .odbc.ini๋ผ๋Š” ํŒŒ์ผ์— data source name
์ด๋ผ๋Š” ๋Œ€ํ‘œ์ด๋ฆ„์„ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ์ ‘์†ํ•  ๋•Œ ์ด ์ด๋ฆ„์„ ์˜ต์…˜์œผ๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
% dbisqlc โ€“c dsn=asiqdemo
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
UNIX : dbisqlc
Quite Mode : UNIX ํ™˜๊ฒฝ์˜ GUI ๋ชจ๋“œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ถˆํŽธํ•œ ์ ์ด ๋งŽ์€ ๊ด€๊ณ„๋กœ ์ž˜ ์‚ฌ์šฉ
ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐฐ์น˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ SQL ๋ช…๋ น์–ด๋“ค์„ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์—ฌ ๋†“๊ณ  ์ด ํŒŒ์ผ์„ ์ž…๋ ฅ ํŒŒ
์ผ๋กœ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด ๋ฐ 3 ๊ฐ€์ง€์˜ ์‚ฌ
์šฉ ํ˜•ํƒœ๋Š” ๋ชจ๋‘ GUI ๋ชจ๋“œ์™€ ๊ฐ™๊ณ  ๊ฐ๊ฐ์˜ ๋’ค์— โ€œโ€“q filenameโ€ ์˜ต์…˜์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
Command Line์— ์ง์ ‘ ์ž…๋ ฅ
% dbisqlc โ€“c โ€œuid=DBA;pwd=SQL;eng=asiqdemo;dbn=asiqdemoโ€ โ€“q query.sql
SQLCONNECT ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด์šฉ
% dbisqlc โ€“q query.sql
.odbc.ini ์ด์šฉ
% dbisqlc โ€“c dsn=asiqdemo โ€“q query.sql
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL JAVA
Window ๊ณ„์—ด์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ JDBC๋ฅผ ํ‘œ์ค€ API๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ JDBC-ODBC API๋ฅผ
์˜ต์…˜์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ Interactive SQL JAVA๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL JAVA
Identification ํƒญ์˜ ODBC data source name ์ฝค๋ณด ๋ฐ•์Šค์—์„œ ODBC ์„ค์ •์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค
์–ด ๋†“์€ ์ ‘์†์„ ์›ํ•˜๋Š” data source name์„ ์ž…๋ ฅ์ž…๋ ฅํ•œ ํ›„ OK ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ
Advanced ํƒญ์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ์˜ต์…˜๊ณผ API๋กœ JDBC๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ JDBC-
ODBC bridge๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL JAVA
SQL Statements, Messages, Results ์„ธ ๊ฐœ์˜ ์„œ๋ธŒ ์ฐฝ์„ ๊ฐ€์ง€ Interactive SQL JAVA ๋ฉ”
์ธ ํ™”๋ฉด์ด ๋‚˜์˜ค๊ณ  ์ด ์ƒํƒœ์—์„œ SQL Statements ์ฐฝ์„ ํ†ตํ•ด SQL๋ฌธ์„ ํŽธ์ง‘ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐ
ํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
Results
window
Messages
window
SQL Statements
window
(Not connected)
์•„๋‹ˆ๋ฉด OK
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL JAVA
File menu : SQL Statements ์ฐฝ์—์„œ ํŽธ์ง‘ํ•œ SQL๋ฌธ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” Save as, ์ €์žฅ๋œ
SQL๋ฌธ์„ SQL Statements ์ฐฝ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” Open์„ ๋น„๋กฏํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ฐฝ์„ ํ†ตํ•ด ์ ‘
์†์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” New window, ์—ด๋ ค์žˆ๋Š” ํŠน์ • ์ฐฝ์„ ๋‹ซ๋Š” Close, SQL ๋ฌธ์„ ๋ฐ”๋กœ ์ฝ
์–ด ๋“ค์–ด ์‹คํ–‰ํ•˜๋Š” Run Script, Exit๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
Edit menu : SQL Statements ์ฐฝ์—์„œ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” Redo, Undo, Cut, Copy, Paste,
Delete์™€ ์ ‘์†ํ•œ ์„œ๋ฒ„์˜ ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Insert Table ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.๋˜
ํ•œ ๊ฐ๊ฐ์˜ ๋ฉ”๋‰ด์—๋Š” ๋‹จ์ถ• ํ‚ค์™€ ๊ธฐ๋Šฅ ํ‚ค๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค
SQL menu : SQL Statements ์ฐฝ์—์„œ ํŽธ์ง‘ํ•œ SQL๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Execute,
Execute Selection, ์‹คํ–‰์„ ์ทจ์†Œํ•˜๋Š” Stop, SQL Statements ์ฐฝ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•œ ๋ช…๋ น
์–ด๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ดํ•˜๋Š” History, Previous SQL, Next SQL, ์ƒˆ๋กœ์šด ์ ‘์†์„
์œ„ํ•œ Connect, ์ ‘์†์„ ๋Š๊ธฐ ์œ„ํ•œ Disconnect, SQL๋ฌธ์˜ ๊ธฐ๋ก์„ ์‹œ์ž‘, ์ข…๋ฃŒํ•˜๋Š” Start
Logging, Stop Logging ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
Data menu : ํ˜„์žฌ ํˆด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ DB๋กœ ํ˜น์€ DB์—์„œ
๋ฐ์ดํ„ฐ๋ฅผ Import, Export ํ•ด ์ค๋‹ˆ๋‹ค. Import ์‹œ ์ฃผ์˜ํ•  ์ ์€ ๋ฐ์ดํ„ฐ๊ฐ€ insert into values
ํ˜•ํƒœ๋กœ ํ•œ๊ฑด ํ•œ๊ฑด ๋“ค์–ด ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ž‘์šฉ์„ ์ถฉ๋ถ„ํžˆ ์ˆ™์ง€ํ•œ ํ›„์— ์‚ฌ์šฉ ๋ฐ”๋ž๋‹ˆ๋‹ค.
Window menu : ์„œ๋ธŒ ์ฐฝ ๋ชจ๋‘๋ฅผ ์ข…๋ฃŒํ•˜๋Š” Close all, ์„œ๋ธŒ ์ฐฝ์˜ ๋ฐฐ์น˜๋ฅผ ์ œ์–ดํ•˜๋Š”Cascade,
Tile Horizontally, Tile Vertically, ์—ด๋ ค ์žˆ๋Š” ์„œ๋ธŒ ์ฐฝ์„ ๊ฐ๊ฐ ํ™œ์„ฑํ™” ์‹œํ‚ค๋Š” ๋ฉ”๋‰ด๋“ฑ์ด ์žˆ
์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์— Help ๋ฉ”๋‰ด ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Win : Interactive SQL JAVA
Tools menu : DB์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ์กฐํšŒ, ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Lookup Table Name,
Stored Procedure๋ฅผ ์กฐํšŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Lookup Procedure Name, ์„ค์ •์˜ ๋ณ€๊ฒฝ์„ ๊ฐ€
๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” Options๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ต์…˜ ์„ค๋ช… : ์˜ต์…˜์€ SYBASE IQ์— ์ ‘์†์‹œ ์„œ๋ฒ„์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ํ•ด๋‹น๋˜๋Š” ๊ฐ๊ฐ์˜ ์˜ต์…˜ ๊ฐ’
์„ ์ฝ์–ด ๋“ค์—ฌ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์˜ต์…˜์€ Interactive SQL Classic์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
UNIX : dbisql
์‹คํ–‰ ํŒŒ์ผ์€ $SYBASE/ASIQ-12_5/bin/dbisql ์ด๋ฉฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•์€ dbisqlc์™€ ์œ ์‚ฌํ•˜๊ณ  ์‹ค
ํ–‰ ํ›„์˜ ๋‚ด์šฉ์€ Interactive SQL JAVA์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
dbisql command
clear : data window ํ˜น์€ results window์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง€์›๋‹ˆ๋‹ค.
configure : dbisql ํˆด์˜ ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” option window๋ฅผ ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค.
connect : ๊ธฐ์ˆ ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์—ฐ๊ฒฐ์ค‘์ด์—ˆ๋˜ ์ฑ„๋„์€ ์ข…๋ฃŒ๋˜์ง€ ์•Š
๊ณ  ๋น„ํ™œ์„ฑํ™” ๋˜๋ฉฐ ์ƒˆ๋กœ์šด ์ฑ„๋„์ด ํ™œ์„ฑํ™” ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜์˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜
์ฑ„๋„์„ ์—ด์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
connect [ to engine-name ] [ database database-name]
[ as connection-name ] [ user ] userid [ identified by password ]
connect using connect-string
disconnect : ํ˜„์žฌ ํ™œ์„ฑ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์—ด๋ ค ์žˆ๋Š” ๋ชจ๋“  ์ฑ„๋„
๊ณผ์˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋ ค๋ฉด all ์˜ต์…˜์„ ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Commit_On_Exit ์˜ต์…˜์˜ ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ
๋‹ค.
disconnect [ { connection-name | current | all } ]
exit, quit, bye : dbisql์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. Commit_On_Exit ์˜ต์…˜์˜ ์„ค์ • ๊ฐ’์— ๋”ฐ๋ผ ์ข…๋ฃŒ๋˜์ง€
์•Š์€ ํŠธ๋žœ์žญ์…˜์˜ COMMIT ํ˜น์€ ROLLBACK์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
help : ASA์—์„œ๋งŒ ์˜จ๋ผ์ธ ๋„์›€๋ง ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
dbisql command
parameters : quite๋ชจ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” command file์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
ํ•ฉ๋‹ˆ๋‹ค. ์„ ์–ธ๋œ ์ดํ›„์— ์ฐธ์กฐ๋  ๋•Œ๋Š” { }๋กœ ์–‘์ชฝ์ด ๊ฐ์‹ธ์ ธ์•ผ ํ•˜๋ฉฐ ๋‚˜์ค‘์— read๋ช…๋ น์–ด๋ฅผ ํ†ต
ํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
parameters param1 [,param2,โ€ฆโ€ฆ]
read : command file์— ์„ ์–ธ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.
์˜ˆ) parameter & read
% dbisqlc โ€“c dsn=asiqdemo โ€“q read query.sql 50000
% vi query.sql
set connection : connect ๋ช…๋ น์–ด์— ์˜ํ•ด ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฑ„๋„ ์ค‘์— ํ™œ์„ฑ ์ฑ„๋„์„ ์„ ํƒ
ํ•ฉ๋‹ˆ๋‹ค.
parameters param_salary;
SELECT emp_lname
FROM employee
WHERE salary > {param_salary};
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
dbisql command
set : ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ค์ •๋œ ์˜ต์…˜ ๊ฐ’๋“ค์„ ๋ณ„๋„์˜ ์ฐฝ์— ์ถœ๋ ฅํ•ด ์ค๋‹ˆ๋‹ค.
๊ทธ ์™ธ์— start engine, stop engine, start database, stop database๋“ฑ์ด ์žˆ๋Š”๋ฐ ์ด๋Š”
ASA ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋“ค ์ž…๋‹ˆ๋‹ค. SYBASE IQ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž˜๋ชป ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์œผ
๋‹ˆ ์ฃผ์˜ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ฐธ์กฐ : Sybase Central
SYBASE IQ์™€ ์—ฐ๊ฒฐํ•˜์—ฌ Admin ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋””ํดํŠธ ํˆด์ด๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜
ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ, ๋””๋ฐ”์ด์Šค ์ƒ์„ฑ ๋ฐ ์ œ๊ฑฐ
ํ…Œ์ด๋ธ”, ๋ทฐ, ์ธ๋ฑ์Šค, Stored Procedure ์ƒ์„ฑ
์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน์˜ ๊ถŒํ•œ๊ด€๋ฆฌ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
isql
ASE์˜ ๊ธฐ๋ณธ SQL ํŽธ์ง‘ํˆด์ด๋ฉฐ UNIX์™€ Win ๋ชจ๋‘ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์—ฐ๊ฒฐ์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‹คํ–‰ ๋ช…๋ น์–ด์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค
isql โ€“Udba โ€“Psql โ€“Sasiqdemo
1> sp_iqstatus
2> go
.
.
.
1> exit
์ฐธ๊ณ 
isql ๋ฐ Win ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” SQL Advantage์™€ ๊ฐ™์€ SYBASE Native Driver์ธ
OCDK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํˆด๋“ค์€ SYBASE IQ์™€ ์ ‘์†ํ•  ๋•Œ ODBC ์—ฐ๊ฒฐ๊ณผ๋Š” ๊ธฐ๋ณธ ์„ค์ • ์˜ต์…˜๋“ฑ ์—ฌ
๋Ÿฌ ๊ฐ€์ง€๋ฉด์—์„œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ฌ์šฉ์„ ์ž์ œํ•˜์‹œ๊ณ  ๊ผญ ์‚ฌ์šฉํ•˜์‹ค ๋•Œ์—๋„ ์ด ์ 
์ถฉ๋ถ„ํžˆ ์ˆ™์ง€ํ•˜์‹œ๊ณ  ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Using WatcomSQL
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
WatcomSQL
WatcomSQL์€ ASA์—์„œ ์‚ฌ์šฉํ•˜๋Š” SQL์–ธ์–ด์ด๋ฉฐ ANSI ํ‘œ์ค€์— ์ถ”๊ฐ€์ ์œผ๋กœ Sybase์˜ ํ–ฅ
์ƒ๋˜์–ด์ง„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์งˆ์˜๋ฅผ ์œ„ํ•œ ๊ตฌ์กฐ์ ์ธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ์งˆ์˜๋ฅผ ์œ„ํ•œ SQL
๋ฌธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ œ์–ด๋ฌธ๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ๋„ ํฌํ•จํ•˜๋Š” ์ ˆ์ฐจ์  ์–ธ์–ด์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
T-SQL์€ Transact-SQL์˜ ์ค„์ž„๋ง๋กœ ASE์—์„œ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” SQL ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
SYBASE IQ์—์„œ๋Š” WatcomSQL ๋Œ€๋ถ€๋ถ„์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ASE์™€ ํ˜ธํ™˜์„ฑ์„
์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด T-SQL๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์„ ๊ณ ๋ คํ•˜์—ฌ SYBASE IQ์—์„œ๋Š”
WatcomSQL ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
์ฐธ๊ณ  : SYBASE IQ์—์„œ WatcomSQL ๋ชจ๋‘๋ฅผ ์ง€์›ํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ ์ด ๊ต์žฌ์—์„œ ์–ธ๊ธ‰ํ•˜๋Š”
WatcomSQL์€ ASA๊ฐ€ ์•„๋‹Œ SYBASE IQ๋ฅผ ์œ„ํ•œ SQL ์ž„์„ ๊ธฐ๋ณธ ์ „์žฌ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํƒœ
์ƒ์ ์ธ ์ธ์—ฐ์œผ๋กœ ์ธํ•˜์—ฌ MS SQL Server์˜ Transact-SQL์€ SYBASE๊ฐ€ ๊ฐœ๋ฐœํ•˜๊ณ  ์ถ”ํ›„
MS๊ฐ€ ์ˆ˜์ •์„ ํ•œ SQL ์–ธ์–ด์ž„์„ ์ฐธ๊ณ ๋กœ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
WatcomSQL ์žฅ์ 
๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ด€๋ จ๋œ ๋ฌธ์žฅ๋“ค์„ ํ•˜๋‚˜์˜ ๋ธ”๋กํ˜•ํƒœ๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์„ ๋ชจ๋“ˆ
ํ™”ํ•ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜ ๋“ฑ์˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
IF, LOOP, WHILE ๋“ฑ๊ณผ ๊ฐ™์€ ์ œ์–ด๋ฌธ ๋“ฑ์„ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ์ฐจ์ ์ธ ์–ธ์–ด ๊ตฌ์กฐ๋กœ ๋œ ํ”„๋กœ
๊ทธ๋žจ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์˜ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต
๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ SQL ๋ฌธ์žฅ์„ ๋ธ”๋ก์œผ๋กœ ๋ฌถ์–ด ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Stored Procedure์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์„œ๋ฒ„์ชฝ์— ๋‘๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด
์ˆ˜์— ๋Œ€ํ•œ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ†ต์‹ ๋Ÿ‰์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
compound statement ๊ตฌ์กฐ
[ label;] // ์ด๋ฆ„
BEGIN [ ATOMIC ] // ์‹œ์ž‘
[ local-declaration ] // ์ง€์—ญ์„ ์–ธ๋ถ€
statement-list; // ์‹คํ–‰๋ถ€
[ exception ] // ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ถ€
END [ label ] // ์ข…๋ฃŒ
BEGIN, END ๋ผ๋Š” keyword๋กœ SQL๋ฌธ์˜ ๋ธ”๋ก์„ ์ƒ์„ฑํ•˜๋ฉฐ ๊ทธ ์•ˆ์— ์ง€์—ญ์„ ์–ธ๋ถ€, ์‹คํ–‰๋ถ€, ์˜ˆ
์™ธ์ฒ˜๋ฆฌ๋ถ€์™€ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ง€์—ญ์„ ์–ธ๋ถ€์™€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ถ€๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ธ”๋ก์€ ์˜ต์…˜์œผ๋กœ ์ด๋ฆ„(LABEL)์„ ์ค„ ์ˆ˜๋„ ์žˆ๊ณ  ๋˜ํ•œ ํ•˜๋‚˜์˜ ๋ธ”๋ก
์„ ๋‹จ์ผ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ BEGIN ๋’ค์— ATOMIC ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด
๋Ÿฌํ•œ BEGIN~END๋กœ ๋ฌถ์—ฌ์ง„ ๋ธ”๋ก๊ตฌ์กฐ๋ฅผ compound statement ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ง€์—ญ์„ ์–ธ๋ถ€์—์„œ๋Š” ์ง€์—ญ๋ณ€์ˆ˜, ์ปค์„œ, EXCEPTION, ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ ‡๊ฒŒ
๋งŒ๋“ค์–ด์ง„ Object๋“ค์€ ๊ทธ compound statement ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ƒ
๋žต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ถ€์—์„œ๋Š” ์ง€์—ญ์„ ์–ธ๋ถ€์—์„œ ์„ ์–ธ๋˜์–ด์ง„ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฃจํ‹ด์ด ํฌํ•จ๋˜์ง€๋งŒ ๊ฒฝ์šฐ
์— ๋”ฐ๋ผ ์ƒ๋žต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฐ ๊ตฌ์กฐ๋Š” ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๊ณ  ํ”„๋กœ์‹œ์ ธ, ํ•จ์ˆ˜๋“ฑ์˜ ๋ชธ์ฒด๋กœ ์‚ฌ์šฉ๋˜์–ด ์ง€๋ฉฐ ๋ธ”๋ก๋‚ด์˜ ๋ชจ๋“  ๊ฐœ
๋ณ„ SQL๋ฌธ์€ ;๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
Compound Statement
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
compound statement ๊ตฌ์กฐ
์ฐธ๊ณ  : compound statement ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด
declare variable
declare exception, exception handler
case statement ( not case expression )
cursor for
cursor ( declare cursor, open, fetch, close )
execute immediate (Dynamic SQL)
signal
โ€ฆโ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋ฐฐ์น˜ ๊ตฌ์กฐ
ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ SQL ๋ฌธ์žฅ ๋‹จ์œ„๋ฅผ ๋ฐฐ์น˜๋ผ๊ณ  ๋งํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜์—์„œ๋Š” ๊ฑฐ
์˜ ๋ชจ๋“  WatcomSQL๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ๋ฒ•์— ๋”ฐ๋ผ ์–ด๋–ค ๋ฌธ์žฅ์š”์†Œ๋Š” ํ•œ๋ฌธ์žฅ์ด
๋ฐ”๋กœ ๋ฐฐ์น˜๊ฐ€ ๋˜์–ด์•ผ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜๋ฅผ ์ด๋ฃจ๋Š” ๊ฒฝ์šฐ๋„
์žˆ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜์—์„œ syntax ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ทธ ๋ฐฐ์น˜ ์ „์ฒด๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ,
ํ•ด๋‹น object๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” syntax ์˜ค๋ฅ˜๋กœ ๋ณด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
INSERT, UPDATE, DELETE, SELECT, COMMIT์™€ ๊ฐ™์€ ์งˆ์˜๋ฅผ ์œ„ํ•œ SQL ๊ธฐ๋ณธ ๋ฌธ์žฅ๋“ค
์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ SQL๋ฌธ์„ ํ•˜๋‚˜๋กœ ๋ฐฐ์น˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งˆ์ง€๋ง‰ SQL ๋ฌธ์žฅ ๋’ค์— ์„ธ๋ฏธ์ฝœ๋ก 
์œผ๋กœ ๋ฌธ์žฅ์„ ๋ถ„๋ฆฌํ•˜๋ฉด ๋˜์ง€๋งŒ ๊ทธ ์™ธ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ์š”์†Œ๋“ค์€ ๋ฐ˜๋“œ์‹œ ํ•œ ๋ฌธ์žฅ์ด ํ•˜๋‚˜
์˜ ๋ฐฐ์น˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
INSERT INTO department ( dept_id, dept_name ) VALUES ( 220, 'Eastern Sales' )
UPDATE employee SET dept_id = 220 WHERE dept_id = 200 AND state = 'MA'
COMMIT; // 3 statement per 1 batch
INSERT INTO department ( dept_id, dept_name ) VALUES ( 220, 'Eastern Sales' );
UPDATE employee SET dept_id = 220 WHERE dept_id = 200 AND state = 'MAโ€˜;
COMMIT; // 1 statement per 1 batch
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
local variable
BEGIN ๋ฐ”๋กœ ๋‹ค์Œ์— DECLARE๋ฌธ์— ์˜ํ•ด compound statement ๋‚ด๋ถ€์—์„œ๋งŒ ์„ ์–ธ๋˜๋ฉฐ ๊ทธ
๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ BEGIN ~ END ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
์ฝค๋งˆ์— ์˜ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ™์ด ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋งŒ์•ฝ ํ•„์š” ํ•˜๋‹ค๋ฉด ๋งค๋ฒˆ
DECLARE๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๋””ํดํŠธ๋กœ ํŠน์ •ํ•œ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์‹œ์ž‘์€ ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด v_์™€ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋ฌธ์ž ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ
์žฅํ•˜๋ฉฐ ์ด ๋ฌธ์žฅ์˜ ๋์€ ๋ฐ˜๋“œ์‹œ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋‹ซ์•„์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์„ ์–ธ์ด ๋จผ์ € ๋˜์–ด์•ผ ํ•˜๊ณ  ์„ ์–ธ๋  ๋•Œ data type์— ๊ด€๊ณ„์—†์ด NULL
๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค
syntax
DECLARE variable-name date-type;
์˜ˆ)
BEGIN
DECLARE v_max_sales INTEGER;
DECLARE v_half_max NUMERIC(10,0);
โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ..
END;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
connection level variable
CREATE VARIABLE๋ฌธ์— ์˜ํ•ด compound statement ๋‚ด, ์™ธ๋ถ€์—์„œ ์„ ์–ธ๋˜๋ฉฐ ํ•ด๋‹น ์„ธ์…˜
์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ DROP VARIABLE๋ฅผ ํ†ตํ•ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค
์ฝค๋งˆ์— ์˜ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ™์ด ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋งŒ์•ฝ ํ•„์š” ํ•˜๋‹ค๋ฉด ๋งค๋ฒˆ
CREATE VARIABLE๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๋””ํดํŠธ๋กœ ํŠน์ •ํ•œ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜๋Š”
์—†์Šต๋‹ˆ๋‹ค.
๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์‹œ์ž‘์€ ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด v_์™€ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋ฌธ์ž ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ
์žฅํ•˜๋ฉฐ ์ด ๋ฌธ์žฅ์˜ ๋์€ ๋ฐ˜๋“œ์‹œ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋‹ซ์•„์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์„ ์–ธ์ด ๋จผ์ € ๋˜์–ด์•ผ ํ•˜๊ณ  ์„ ์–ธ๋  ๋•Œ data type์— ๊ด€๊ณ„์—†์ด NULL
๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค
syntax
CREATE VARIABLE variable-name date-type;
์˜ˆ)
CREATE VARIABLE v_max_sales INTEGER;
CREATE VARIABLE v_half_max NUMERIC(10,0);
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
variable-data type
8
19
20
-9,223,372,036,854,775,808 ~
9,223,372,036,854,775,807
0 ~ 18,446,744,073,709,551,615
BIGINT
UNSIGNED BIGINT
25-32,768 ~ 32,767SMALLINT
130 ~ 255TINYINT
4
10
11
-2,147,483,648 ~ 2,147,483,647
0 ~ 42,942,967,294
INTEGER
UNSIGNED INT
256 + (n - 255)256 <= n <= 32K
VARCHAR (n)
CHARACTER VARYING (n)
n1 <= n <= 255
VARCHAR (n)
CHARACTER VARYING (n)
n1 <= n <= 255
CHAR (n)
CHARACTER (n)
Storage
(byte)
Max
Prec.
RangeData Type
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
variable-data type
10, 1, NULLBIT
64K โ€“1LONG BINARY
32K โ€“ 11 <= n <= (32k โ€“ 1)VARBINARY (n)
2561 <= n <= 255BINARY (n)
2 to 69126-10^38 ~ 10^38 โ€“ 1
DECIMAL (p,s)
NUMERIC (p,s)
8152.22 (^308) ~ 1.79 (^308)DOUBLE
47Flatform-dependentREAL
4 or 816Flatform-dependentFLOAT (n)
Storage
(byte)
Max
Prec.
RangeData Type
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
variable-data type
800:00:00.000000 ~ 23:59.59.999999TIME
8
0001/01/01 00:00:00.000000 ~
9999/12/31 23:59:59.999999
DATETIME
SMALLDATETIME
TIMESTAMP
40001/01/01 ~ 9999/12/31DATE
Storage
(byte)
Max
Prec.
RangeData Type
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋ณ€์ˆ˜์— ๊ฐ’ ํ• ๋‹นํ•˜๊ธฐ
SET๋ฌธ์„ ํ†ตํ•ด์„œ
CREATE PROCEDURE greater_proc ( IN v_a INT, IN v_b INT, OUT v_c INT )
BEGIN
IF v_a > v_b THEN
SET v_c = v_a;
ELSE
SET v_c = v_b;
END IF;
END
single row SELECT๋ฌธ์„ ํ†ตํ•ด์„œ
BEGIN
DECLARE v_customer_id INT;
DECLARE v_orders INT;
SELECT COUNT(b.id) INTO v_orders
FROM customer a, sales_order b
WHERE a.id = b.id
AND a.id = v_customer_id;
END
// ๋งŒ์•ฝ select ํ•œ ๊ฒฐ๊ณผ๊ฐ€ 2๊ฑด ์ด์ƒ์ด๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
temporary table
ํ”„๋กœ๊ทธ๋žจ๋ฐ ์–ธ์–ด์—์„œ ์ž„์‹œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์™”๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ SQL ์ด๋ž€
์–ธ์–ด๋Š” ์ทจ๊ธ‰ํ•˜๋Š” ๋Œ€์ƒ์ด ํ•œ๊ฑด ํ•œ๊ฑด์˜ ๋ฐ์ดํ„ฐ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ง‘ํ•ฉ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ ์ด๊ธฐ ๋•Œ๋ฌธ
์— ์ด๋Ÿฐ ์ง‘ํ•ฉ ๋‹จ์œ„์˜ ์ž„์‹œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•œ๋ฐ ์ด๋ฅผ ์ถฉ์กฑํ•  ๋งŒํ•œ ๊ฒƒ์ด
์ž„์‹œ ํ…Œ์ด๋ธ” (in-line view ํฌํ•จ) ์ž…๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์ด ์งˆ์˜๋ฅผ ์ปดํŒŒ์ผ ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•  ๋•Œ GROUP BY, ORDER BY,
JOIN ๊ณผ ๊ฐ™์€ ์ž‘์—… ์—ญ์‹œ๋„ ํ•œ ๋ฒˆ์˜ ์ž‘์—…์œผ๋กœ ๊ทธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€์ ์œผ
๋กœ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ž„์˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์—”์ง„์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ์ž„์‹œ ์ €์žฅ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ์ž„์‹œ ํ…Œ
์ด๋ธ”์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž„์˜์˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด์„œ ์–ป๋Š” ์ด์ ์€
๊ทธ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ์ž„์‹œ ์ €์žฅ๋Ÿ‰์ด ๋งŽ์„ ๊ฒฝ์šฐ ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
์ž„์‹œ ํ…Œ์ด๋ธ”์„ ๋ˆ„๊ฐ€ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋˜์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์—…๋˜๋Š” ์˜์—ญ์€ IQ TEMPORARY
STORE ์ž…๋‹ˆ๋‹ค.
์ฐธ๊ณ  : In-line view vs. Temp table
์ผ๋ฐ˜์ ์œผ๋กœ FROM ์ ˆ์— ์ž„์‹œ ๊ณ„์‚ฐ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” In-line view ํ˜•ํƒœ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ฐ™
์€ ์šฉ๋„๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ์ •๋„๋กœ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์ด ์‚ฐ์ถœ๋˜๋Š” ๊ฒฐ๊ณผ๋ผ๋ฉด ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค
์–ด ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๊ณผ์ •์ƒ ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
local temporary table
compound statement ๋‚ด/์™ธ๋ถ€์—์„œ ๋งŒ๋“ค์–ด์ง€๋ฉฐ ๋งŒ๋“ค์–ด์ง„ ์˜์—ญ์„ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์„ธ์…˜์„ ๋งˆ์น˜
๊ฑฐ๋‚˜ DROP TABLE๋ฌธ์„ ๋งŒ๋‚˜๋ฉด ์‚ญ์ œ๋˜๋‚˜ DROP TABLE ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
DECLARE LOCAL TEMPORARY TABLE ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ์„ธ์…˜
๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ์ด ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ
๋ณธ์ ์œผ๋กœ COMMIT ์‹œ์— ์‚ญ์ œ๋˜์ง€๋งŒ ์˜ต์…˜์œผ๋กœ ์ €์žฅ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž„์‹œ ํ…Œ์ด๋ธ”์ด๋ผ๋„ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ์— ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋Š” ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ํ”„๋กœ์‹œ์ ธ ๋‚ด๋ถ€์—์„œ ๋งŒ๋“ ๋‹ค๋ฉด ์ž„์‹œ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์€ ๊ทธ ํ”„๋กœ์‹œ์ ธ์˜ ์ด๋ฆ„๊ณผ ์—ฐ๊ด€์ด ์žˆ
๋„๋ก ๋ช…๋ช…ํ•˜๋Š” ํŽธ์ด ๋””๋ฒ„๊น…์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค
syntax
DECLARE LOCAL TEMPORARY TABLE table-name
( { column-definition [ column-constraintโ€ฆ.] | table-constraint }, โ€ฆ)
ON COMMIT { DELETE | PRESERVE } ROWS ];
์˜ˆ)
DECLARE LOCAL TEMPORARY TABLE customer_temp
( cust_id INT, cust_name char(20), cust_address char(255) )
ON COMMIT PRESERVE ROWS;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
global temporary table
compound statement ๋‚ด/์™ธ๋ถ€์—์„œ ๋งŒ๋“ค์–ด์ง€๋ฉฐ DROP TABLE๋ฌธ์„ ๋งŒ๋‚˜๋ฉด ์‚ญ์ œ๋˜๋ฉฐ ์—ฐ
๊ฒฐ์ƒํƒœ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ํ…Œ์ด๋ธ” ์ •์˜๋Š” ๋ณด๊ด€๋ฉ๋‹ˆ๋‹ค.
CREATE GLOBAL TEMPORARY TABLE ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ์„ธ์…˜
๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ์ด ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž„์‹œ ํ…Œ
์ด๋ธ”์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ COMMIT ์‹œ์— ์‚ญ์ œ๋˜์ง€๋งŒ ์˜ต์…˜์œผ๋กœ ์ €์žฅ์ƒํƒœ๋ฅผ ์œ 
์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž„์‹œ ํ…Œ์ด๋ธ”์ด๋ผ๋„ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ์— ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋Š” ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ ๋งŒ์•ฝ ํ”„๋กœ์‹œ์ ธ ๋‚ด๋ถ€์—
์„œ ๋งŒ๋“ ๋‹ค๋ฉด ์ž„์‹œ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์€ ๊ทธ ํ”„๋กœ์‹œ์ ธ์˜ ์ด๋ฆ„๊ณผ ์—ฐ๊ด€์ด ์žˆ๋„๋ก ๋ช…๋ช…ํ•˜๋Š” ํŽธ์ด ๋””
๋ฒ„๊น…์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค
syntax
CREATE GLOBAL TEMPORARY TABLE table-name
( { column-definition [ column-constraintโ€ฆ.] | table-constraint }, โ€ฆ)
ON COMMIT { DELETE | PRESERVE } ROWS ];
์˜ˆ)
CREATE GLOBAL TEMPORARY TABLE customer_temp
( cust_id INT, cust_name char(20), cust_address char(255) )
ON COMMIT PRESERVE ROWS;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ฐธ๊ณ 
DECLARE LOCAL TEMPORARY TABLE employee
(
emp_id INT NOT NULL,
lname CHAR(30) NOT NULL,
fname CHAR(30) NOT NULL,
salary UNSIGNED INT NOT NULL,
dept_id INT NOT NULL
) IN SYSTEM
์œ„์˜ ํ…Œ์ด๋ธ”์€ SYBASE IQ Temporary Store ์˜์—ญ์— ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  ASA์˜ ์ž„์‹œ๊ณต๊ฐ„์ธ
/tmp/.SQLAnywhere/์— ํœ˜๋ฐœ์„ฑ ํŒŒ์ผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ 2GB์˜ ํŒŒ์ผํฌ๊ธฐ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ
๋‹ค. ์ด ํ•œ๊ณ„ ๊ฐ’์— ๋„๋‹ฌํ•˜๋ฉด IQ Server๊ฐ€down๋˜๊ฑฐ๋‚˜ hang ์ƒํƒœ๊ฐ€ ๋˜๋Š”๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ถ€์ž‘
์šฉ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.IQ์—์„œ ASA๋Š” ๋‹จ์ˆœํžˆ Catalog๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋“ค์˜ ์‚ฌ์šฉ์„ ๊ธˆ
ํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค.
local temporary table vs. global temporary table
ETL ์ž‘์—…์—์„œ CDC ๋ฐ์ดํ„ฐ๋ฅผ ๋ณธ ํ…Œ์ด๋ธ”์— ๋ฐ˜์˜ํ•˜๊ธฐ ์ „์— ๋กœ๋”ฉํ•˜๊ธฐ ์œ„ํ•œ ์ž„์‹œ ํ…Œ์ด๋ธ” ํ˜•ํƒœ
์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋นˆ๋„๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ๋Š” global temporary table์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ์„œ๋ฒ„์—๊ฒŒ ํ…Œ์ด
๋ธ”์„ ๋งค๋ฒˆ ๋งŒ๋“œ๋Š” ๋ถ€๋‹ด์„ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
if
๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์กฐ๊ฑด์ด TRUE ์ด๋ฉด THEN ~ ELSE ์‚ฌ์ด์˜ ๋ฌธ์žฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  FALSE, NULL ์ด๋ฉด
ELSE ~ END IF ์‚ฌ์ด์˜ ๋ฌธ์žฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋…ผ๋ฆฌ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด IF ~ ELSE๋ฌธ์„ ์ค‘์ฒฉํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” IF ~
ELSEIF ~ ELSE๋‚˜ CASE ๋ฌธ์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์žฅ ๊ตฌํ˜„์‹œ ELSEIF ๋ฌธ์˜ ์ŠคํŽ ๋ง๊ณผ ์ข…๋ฃŒ์‹œ์— END IF์˜ ์‚ฌ์šฉ์— ์ฃผ์˜ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์กฐ๊ฑด์ ˆ์—์„œ NULL ๊ฐ’์— ๋Œ€ํ•œ ๋น„๊ต๋Š” IS NULL ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
syntax
IF search-condition THEN
statement-list;
[ ELSEIF search-condition THEN
statement-list; ]
[ ELSE
statement-list; ]
END IF;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
case(1)
์ค‘์ฒฉ๋œ IF๋ฌธ ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๊ฐ€ CASE ์ž…
๋‹ˆ๋‹ค. ์ด๋ฅผ CASE statement๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์žฅ๊ตฌํ˜„ ์ข…๋ฃŒ์‹œ์— END CASE์˜ ์‚ฌ์šฉ์— ์ฃผ์˜ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
syntax
CASE value-expression
WHEN [ constant | NULL ] THEN statement-list;
[ WHEN [ constant | NULL ] THEN statement-list; ]
ELSE statement-list;
END CASE;
์˜ˆ)
BEGIN
DECLARE prod_name CHAR(20);
DECLARE type CHAR(10);
SELECT name INTO prod_name FROM product
WHERE id = 10;
CASE prod_name
WHEN โ€˜Tee Shirtโ€™ THEN SET type = โ€˜SHIRTโ€™
ELSE SET type = โ€˜Unknownโ€™
END CASE;
END
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
case(2)
SELECT์ ˆ์˜ ํ˜น์€ ์ปฌ๋Ÿผ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ ˆ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ปฌ๋Ÿผ์˜ ๋ถ„๊ธฐ์กฐ๊ฑด
์ด ๋‚˜ํƒ€๋‚  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ CASE expression ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ์˜ WatcomSQL์—์„œ๋Š” SELECT ์ ˆ์— IF๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ์ปค์„œ์˜ ์‚ฌ์šฉ ๋นˆ
๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด CASE ํ‘œํ˜„์‹์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋ฉฐ ์ข…๋ฃŒ์‹œ์— END์˜ ์‚ฌ์šฉ์— ์ฃผ์˜ ํ•˜์‹œ๊ธฐ
๋ฐ”๋ž๋‹ˆ๋‹ค.
syntax
CASE expression
WHEN expression THEN expression
[ ELSE expression ]
END
์˜ˆ)
SELECT id, SELECT name,
( case name ( case
when โ€˜Tee Shirtโ€™ then โ€˜Shirtโ€™ when id=โ€˜1โ€™ then โ€˜Shirtโ€™
when โ€˜Sweatshirtโ€™ then โ€˜Shirtโ€™ when id=โ€˜2โ€™ then โ€˜Shirtโ€™
when โ€˜Baseball capโ€™ then โ€˜Hatโ€™ when id=โ€˜3โ€™ then โ€˜Hatโ€™
else โ€˜Unknownโ€™ else โ€˜Unknownโ€™
end ) as Type end ) as Type
FROM product; FROM product;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
loop
๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฃจํ”„๋กœ LOOP ~ END LOOP ์‚ฌ์ด์— ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์žฅ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ํƒˆ
์ถœ์กฐ๊ฑด์„ ์ œ์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌดํ•œ๋ฃจํ”„๊ฐ€ ๋˜์–ด ์‹œ์Šคํ…œ์— ๋งŽ์€ ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ํŠน
์ •ํ•œ ์กฐ๊ฑด์„ ์ฃผ๊ณ  LEAVE ๋ฌธ์„ ํ†ตํ•ด ๋ฃจํ”„๋ฅผ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
syntax
[ statement-label : ]
LOOP
statement-list;
END LOOP [ statement-label ]
์˜ˆ)
โ€ฆโ€ฆโ€ฆ
SET i = 1;
insert_loop:
LOOP
INSERT INTO counter (number) VALUES (i);
IF i >= 10 THEN
LEAVE insert_loop;
END IF;
SET i = i + 1;
END LOOP insert_loop
// ์œ„ ์˜ˆ๋Š” ์˜ค์ง LOOP๋ฌธ์„ ์œ„ํ•œ ์˜ˆ๋กœ ์‹ค์ œ ์ด๋Ÿฐ ์ž…๋ ฅ๋ฌธ์˜ ์‚ฌ์šฉ์„ ์ž์ œ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
while loop
์กฐ๊ฑด์ด TRUE ์ธ ๋™์•ˆ๋งŒ ์ผ๋ จ์˜ ๋ฌธ์žฅ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ์กฐ๊ฑด์€ ๋ฐ˜๋ณต์ด ์‹œ์ž‘๋  ๋•Œ
์ฒดํฌํ•˜๊ฒŒ ๋˜์–ด ๋ฃจํ”„๋‚ด์˜ ๋ฌธ์žฅ์ด ํ•œ๋ฒˆ๋„ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์กฐ๊ฑด์ด FALSE ์ด๋ฉด ๋ฃจํ”„๋ฅผ ํƒˆ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
syntax
[ statement-label : ]
WHILE search-condition LOOP
statement-list;
END LOOP [ statement-label ]
์˜ˆ)
SET i = 1;
insert_loop:
WHILE i <= 10 LOOP
INSERT INTO counter (number) VALUES (i);
SET i = i + 1;
END LOOP insert_loop
// ์œ„ ์˜ˆ๋Š” ์˜ค์ง WHILE LOOP๋ฌธ์„ ์œ„ํ•œ ์˜ˆ๋กœ ์‹ค์ œ ์ด๋Ÿฐ ์ž…๋ ฅ๋ฌธ์˜ ์‚ฌ์šฉ์„ ์ž์ œ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
cursor for loop
์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” index counter๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ๊ฐ€๋ฉฐ ํŠน์ • ๋ฌธ์žฅ์„ ๋ฐ˜๋ณตํ•˜๋Š” FOR
LOOP์™€ ๋‹ค๋ฅด๋ฉฐ ์˜ค์ง ์ปค์„œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ FETCH ๋กœ์ง์„ ์ปค์„œ์˜ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๊นŒ์ง€
๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ž๋™์œผ๋กœ ์ปค์„œ๊ฐ€ close ๋˜๋Š” ๋“ฑ ํŽธ๋ฆฌํ•œ ๋ฉด์ด ์žˆ์Šต๋‹ˆ๋‹ค.
BEGIN ~ END ์‚ฌ์ด์˜ compound statement ๋‚ด ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
syntax
FOR for-loop-name AS cursor-name
CURSOR FOR statement
DO
statement-list;
END FOR
์˜ˆ)
CREATE VARIABLE v_emp_name CHAR(30);
FOR names AS curs
CURSOR FOR SELECT emp_name
FROM employee
DO
SET v_emp_name = emp_name;
CALL search_for_name_proc ( v_emp_name );
END FOR;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
cursor
SELECT ๋ฌธ์— ์˜ํ•ด ์‚ฐ์ถœ๋˜๋Š” ๋‹ค์ค‘ ํ–‰์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด
์ปค์„œ์ž…๋‹ˆ๋‹ค
์งˆ์˜์— ์˜ํ•ด ์‚ฐ์ถœ๋œ ์ฒซ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๋Š” ํ–‰์˜ ํŠธ๋ž™์„
์œ ์ง€ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠนํžˆ DW์™€ ๊ฐ™์ด ๋Œ€์šฉ๋Ÿ‰์ผ ๊ฒฝ์šฐ์—๋Š” ์ปค์„œ์˜ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ถ€๋‹ดํ•ด์•ผ ํ•˜๋Š”
๋น„์šฉ์ด ๋งค์šฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ปค์„œ ์‚ฌ์šฉ์„ ์ตœ์†Œ๋กœ ์ค„์—ฌ์ฃผ์‹ญ์‹œ์˜ค.
์ปค์„œ์˜ ํ๋ฆ„
DECLARE : ๋ช…์‹œ์ ์œผ๋กœ ์ปค์„œ๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด ์ปค์„œ๋ฅผ ์œ„ํ•œ SELECT์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
ํ•ฉ๋‹ˆ๋‹ค.
DECLARE cursor-name [ no scroll | dynamic scroll | scroll ]
CURSOR FOR select-statement;
DECLARE OPEN FETCH CLOSEmore?
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
cursor
OPEN : ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋ชจ๋“  ํ–‰์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฐ๊ณผ ์…‹์„ ์ƒ์„ฑ
ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ์ดํ›„ ์ปค์„œ๋Š” ๊ฒฐ๊ณผ ์…‹์—์„œ ์ฒซ๋ฒˆ์งธ ํ–‰์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
OPEN cursor-name;
FETCH : ๊ฒฐ๊ณผ ์…‹์—์„œ ํ•˜๋‚˜์˜ ํ–‰์„ ์ฝ๊ณ  ๊ทธ ํ›„์— ์ปค์„œ๋Š” ๊ฒฐ๊ณผ ์…‹์˜ ๋‹ค์Œ ํ–‰์œผ๋กœ ์ด๋™
๋ณดํ†ต ์—ฌ๋Ÿฌ ๋ฒˆ์˜ FETCH๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ด€๊ณ„๋กœ LOOP๋ฌธ์—์„œ ์ฃผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
FETCH cursor-name INTO variable-list;
CLOSE : ์ปค์„œ๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ํ•˜๊ณ  ๊ฒฐ๊ณผ ์…‹์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
CLOSE cursor-name;
์œ„ ์ฒ˜๋Ÿผ ์ปค์„œ๋ฅผ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  for loop์™€
๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” cursor for loop ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฃจํ”„๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ FETCH
๋˜๊ณ  ๋ชจ๋“  ํ–‰์ด ์ฒ˜๋ฆฌ๋˜๋ฉด ์ž๋™์œผ๋กœ ์ปค์„œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
cursor
์˜ˆ)
CREATE PROCEDURE cur_proc()
BEGIN
DECLARE err_not_found EXCEPTION FOR SQLSTATE โ€˜02000โ€™;
DECLARE reg CHAR(20);
DECLARE cyear CHAR(4);
DECLARE sqty DECIMAL(12);
DECLARE test_cur CURSOR FOR
SELECT cust_reg, order_year, sum(order_qty)
FROM customer a, order_detail b
WHERE a.cust_id = b.cust_id
GROUP BY cust_reg, order_year
FOR READ ONLY;
OPEN test_cur;
curloop:
LOOP
FETCH test_cur INTO reg, cyear, sqty;
IF SQLSTATE = err_not_found
LEAVE curloop;
END IF;
END LOOP curloop;
CLOSE test_cur;
END
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
resume
dbisql๊ณผ ๊ฐ™์€ ํˆด์—์„œ๋Š” SELECT ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์ƒ์— ์ถœ๋ ฅํ•  ๋•Œ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ๋ฐ
์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ๊ทธ ๊ฒฐ๊ณผ์˜ ์ผ๋ถ€๋ถ„๋งŒ์„ ๋จผ์ € ์ถœ๋ ฅํ•˜๋Š” ์ปค์„œํ˜•ํƒœ์˜ ๋ฐฉ์‹์„ ์ 
์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ปค์„œ๊ฐ€ OPEN๋œ ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น๋˜๋Š” ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์–ด๋– ํ•œ ์ข…๋ฅ˜์˜ DDL ๋ฌธ์„ ์ˆ˜
ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.์ด๋Ÿด๋•Œ ๊ทธ ์ปค์„œ๋ฅผ CLOSE ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ RESUME ์ž…๋‹ˆ
๋‹ค.
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ stored procedure๋„ ๋˜‘๊ฐ™์ด ์ ์šฉ์ด ๋˜์–ด ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”
stored procedure๋„ RESUME๋ฅผ ํ•ด์ฃผ๊ธฐ ์ „๊นŒ์ง€๋Š” DROP ์ด๋‚˜ ALTER ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ• 
์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์˜ˆ)
SELECT emp_name FROM employee
SELECT name FROM product;
dbisql๊ณผ ๊ฐ™์€ ํˆด์—์„œ ์œ„ ์ฒ˜๋Ÿผ ํ•œ ๋ฐฐ์น˜์—์„œ ๋‘ ๊ฐœ์˜ SELECT๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฒฐ
๊ณผ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์—ฌ์ง€๊ณ  RESUME ์„ ํ•ด์•ผ๋งŒ ๋‘ ๋ฒˆ์งธ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฐธ๊ณ 
SELECT๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„์— RESUME ๋งŒ ์‹คํ–‰ํ•œ ์ƒํƒœ๋Š” CURSOR๊ฐ€ ๋‹ซํ˜€์žˆ๋Š” ์ƒํƒœ์ง€๋งŒ ์•„์ง
๊นŒ์ง€๋„ SELECTํ•œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ shared lock์„ releaseํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.์ด lock๊นŒ์ง€
๋ฅผ release ํ•˜๋ ค๋ฉด RESUME ํ›„์— COMMIT์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
set option
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚ด์— ๋””ํดํŠธ๋กœ ์„ ์–ธ๋˜์–ด์ง„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ์ด ๋˜
๋Š” ์˜ต์…˜์—๋Š” IQ ์˜์—ญ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์˜ต์…˜, ASA ์˜์—ญ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์˜ต์…˜, dbisql ์˜์—ญ
์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์˜ต์…˜, ESQLC ์˜์—ญ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์˜ต์…˜ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ
๋‚ด์šฉ์€ ๋ฉ”๋‰ด์–ผ์„ ์ฐธ๊ณ  ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์—ฐ๊ฒฐ์ค‘์ธ ์„ธ์…˜์—์„œ๋งŒ ๋ฐ”๊พธ๋ ค๋ฉด TEMPORARY๋ผ๋Š” keyword๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์ƒ๋žต์‹œ๋Š”
PERMANENT ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
user-name์„ ์ƒ๋žตํ•˜๋ฉด ํ˜„์žฌ ์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉ์ค‘์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋””ํดํŠธ์ด๋ฉฐ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—
๊ฒŒ ์ ์šฉ์‹œ์—๋Š” PUBLIC์ด๋ผ๋Š” group-name์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
syntax
SET [temporary] OPTION [user-name|public.]option-name = value;
SET OPTION PUBLIC.Load_Memory_MB = 400;
SET TEMPORARY OPTION Query_Plan = โ€˜Onโ€™;
SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜/asiq/data/test.datโ€™;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์„
Double Hyphen(--)
ํ•œ ์ค„์—์„œ ์ด ๋ฌธ์ž ๋’ค์˜ ๋ฌธ์ž๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค
Double Slash(//)
ํ•œ ์ค„์—์„œ ์ด ๋ฌธ์ž ๋’ค์˜ ๋ฌธ์ž๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. -- ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค
Slash-Asterisk(/* */)
/* ์™€ */ ์‚ฌ์ด์˜ ๋ชจ๋“  ๋ฌธ์ž๋Š” ์ค„์— ๊ด€๊ณ„์—†์ด ์ฃผ์„์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค
Percent sign(%)
Percent_as_comment ์˜ต์…˜์˜ ๊ฐ’์ด ON ์ด๋ฉด โ€“ ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
dynamic SQL
SQL keyword๋‚˜ object์˜ ์ด๋ฆ„์„ ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ์‹คํ–‰์‹œ์— ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์ƒˆ๋กœ์šด SQL๋ฅผ
๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
EXECUTE IMMEDIATE ๋ฌธ์— ์‚ฌ์šฉ๋˜์–ด์ง„ ๋ณ€์ˆ˜๋“ค์€ string ํ˜•ํƒœ์—ฌ์•ผ ํ•˜๋ฉฐ 2๊ฑด ์ด์ƒ์˜ ๊ฒฐ
๊ณผ ์…‹์„ returnํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
BEGIN ~ END ์‚ฌ์ด์˜ compound statement ๋‚ด ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
syntax
EXECUTE IMMEDIATE string-expr;
์˜ˆ)
CREATE PROCEDURE CreateTable_proc( in v_tablename char(30) )
BEGIN
EXECUTE IMMEDIATE โ€˜CREATE TABLE โ€˜ || v_tablename ||
โ€˜ ( column1 int,โ€ฆโ€ฆโ€ฆโ€ฆ)โ€™;
END
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
message
๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ณณ์„ CONSOLE๊ณผ LOG๋กœ ์ง€์ •ํ•˜
๋ฉด server log ํŒŒ์ผ์ด๊ณ  CLIENT๋กœ ์ง€์ •ํ•˜๋ฉด dbisql๊ณผ ๊ฐ™์€ ์œˆ๋„์šฐ๋ฅผ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธ
ํŠธ์ž…๋‹ˆ๋‹ค. ๋‹จ, server log = $SYBASE/ASIQ-12_5/logfiles/srvname.xxx.srvlog
๋˜ํ•œ MESSAGE TYPE์„ INFO, STATUS๋ผ ํ•˜๋ฉด Message Window์—, ACTION,
WARNING์ด๋ผ ํ•˜๋ฉด Message Box์— ํ•ด๋‹น ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
syntax
MESSAGE expression
[ TYPE { INFO | ACTION | WARNING | STATUS } ]
[ TO { CONSOLE | CLIENT | LOG } ]
์˜ˆ)
MESSAGE โ€˜The current date and time: โ€™, Now() TYPE INFO TO CLIENT;
์ฐธ์กฐ : SQL์‚ฌ์šฉ ์ค‘์— UNIX ๋ช…๋ น์–ด ์‚ฌ์šฉํ•˜์—ฌ Message ์ถœ๋ ฅ
CREATE VARIABLE MsgText VARCHAR(255);
CREATE VARIABLE CurrTime VARCHAR(30);
SET CurrTime = CAST(NOW() AS VARCHAR(30));
SET MsgText = โ€˜echo the message you want to send to the file '
|| ' at ' || CurrTime || โ€˜ >> /tmp/outputfile.txt';
CALL xp_cmdshell(MsgText); // OS ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” SP
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
exception
EXCEPTION ์ด๋ž€ compound statement ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ด๋Ÿฐ
EXCEPTION์€ SYBASE IQ ์—”์ง„์— ์˜ํ•ด ์ƒ์„ฑ๋  ์ˆ˜๋„ ์žˆ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜์ ์œผ๋กœ ๋งŒ๋“ค์–ด
๋ฐœ์ƒ ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
compound statement ์ˆ˜ํ–‰์‹œ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ์‹œ์ ์—์„œ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ๊ด€๋ จ๋œ
์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ ๋ถ€๋ถ„์œผ๋กœ ์ œ์–ด๋ฅผ ์˜ฎ๊ฒจ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋งˆ์ง€๋ง‰ ์กฐ์น˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ
๋Š” ๊ตฌ์กฐ๊ฐ€ exception handler ์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ exception handler๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฏธ๋ฆฌ ์ž๋™์œผ๋กœ ์ •์˜๋œ ์˜ˆ์™ธ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ
๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜์ ์œผ๋กœ DECLARE ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ์„ ์–ธํ•˜์—ฌ์•ผ ํ•˜๋ฉฐ ๋˜ํ•œ ์„ ์–ธ๋œ
๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์„ EXCEPTION๋ฌธ์— ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ SQLCODE, SQLSTATE ๋‘ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜ ์ฝ”๋“œ ๋ฐ ์ƒ
ํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
syntax
DECLARE exception-name EXCEPTION FOR SQLSTATE sqlstate-number;
EXCEPTION [ WHEN exception-name THEN statement-list; โ€ฆโ€ฆ]
[ WHEN exception-name THEN statement-list; โ€ฆโ€ฆ]
WHEN OTHER THEN statement-list;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
exception
์˜ˆ)
BEGIN
DECLARE column_not_found
EXCEPTION FOR SQLSTATE โ€˜52003โ€™; // ์˜ˆ์™ธ์„ ์–ธ
MESSAGE โ€˜Hello !!!โ€™ TO CLIENT;
SIGNAL column_not_found; // ์˜ˆ์™ธ๋ฐœ์ƒ
MESSAGE โ€˜Line following signal !!!โ€™ TO CLIENT; // ์ˆ˜ํ–‰์•ˆ๋จ
EXCEPTION // ์˜ˆ์™ธ์ฒ˜๋ฆฌ
WHEN column_not_found THEN // 52003 ์˜ˆ์™ธ์ด๋ฉด
MESSAGE โ€˜52003 handling. (SQLSTATE = โ€™,
SQLSTATE, โ€˜)โ€™ TO CLIENT;
WHEN others THEN // ๊ทธ ์™ธ ์˜ˆ์™ธ์ด๋ฉด
MESSAGE โ€˜Others handling. (SQLSTATE = โ€™,
SQLSTATE, โ€˜)โ€™ TO CLIENT;
END
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
exception
์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜์˜ ์˜ˆ์™ธ(SQLSTATE) ๊ฒฝ์šฐ๋ฅผ ๋งŒ๋“ค์–ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๋•Œ ์ฃผ
์˜ ํ•  ์ ์€ ์„ ์–ธ ๊ฐ€๋Šฅํ•œ SQLSTATE ๋ฒˆํ˜ธ๋Š” 99000 ~ 99999 ์ด๋ผ๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ์˜
๋ฒˆํ˜ธ๋Š” ์‹œ์Šคํ…œ์ด ์˜ˆ์•ฝํ•œ ๋ฒˆํ˜ธ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
์˜ˆ)
BEGIN
DECLARE my_exception
EXCEPTION FOR SQLSTATE โ€˜99000โ€™; // ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์„ ์–ธ
MESSAGE โ€˜User-Defind Exception test !!!โ€™ TO CLIENT;
// ์—ฌ๊ธฐ์— ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“œ๋Š” ์กฐ๊ฑด์ ˆ์„ ์ž…๋ ฅ
SIGNAL my_exception; // ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋ฐœ์ƒ
MESSAGE โ€˜Line following signal !!!โ€™ TO CLIENT; // ์ˆ˜ํ–‰์•ˆ๋จ
EXCEPTION // ์˜ˆ์™ธ์ฒ˜๋ฆฌ
WHEN my_exception THEN // ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์ด๋ฉด
MESSAGE โ€˜my_exception handling. (SQLSTATE = โ€™,
SQLSTATE, โ€˜)โ€™ TO CLIENT;
WHEN others THEN // ๊ทธ ์™ธ ์˜ˆ์™ธ์ด๋ฉด
MESSAGE โ€˜Others handling. (SQLSTATE = โ€™,
SQLSTATE, โ€˜)โ€™ TO CLIENT;
END
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
signal
์‹œ์Šคํ…œ์—์„œ ์ œ๊ณต๋œ SQLSTATE ํ˜น์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  SQLSTATE๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ
๋‹ˆ๋‹ค.
์ด ๋ช…๋ น์–ด๋Š” compound statement ๋‚ด ์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋จผ์ € DECLARE๋ฌธ์— ์˜์—
sqlstate-number์— ํ•ด๋‹นํ•˜๋Š” exception-name์„ ์„ ์–ธํ•œ ํ›„์— ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” SQLSTATE ๋ฒˆํ˜ธ๋Š” 99000 ~ 99999 ์ž…
๋‹ˆ๋‹ค.
syntax
DECLARE exception-name EXCEPTION FOR SQLSTATE sqlstate-number;
SIGNAL exception-name;
์˜ˆ)
BEGIN
DECLARE column_not_found
EXCEPTION FOR SQLSTATE โ€˜52003โ€™;
SIGNAL column_not_found;
END
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
traceback
compound statement ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„
์ง€์ ํ•ด ์ค๋‹ˆ๋‹ค.๋‹จ, syntax ์˜ค๋ฅ˜๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.
syntax
TRACEBACK(*)
์˜ˆ)
BEGIN
.
.
.
SELECT prod_name FROM employee;
.
END
SELECT traceback(*);
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐํƒ€
SELECT statement
INSERT statement
UPDATE statement
DELETE statement
GRANT statement
REVOKE statement
CREATE TABLE | PROCEDURE | FUNCTION | INDEX statement
BEGIN TRANSACTION statement
COMMIT, ROLLBACK statement
SAVEPOINT statement
RELEASE SAVEPOINT statement
LOAD TABLE statement
โ€ฆโ€ฆ..
์œ„ ๋‚ด์šฉ๋“ค์€ ๊ณ„์†ํ•ด์„œ ์ง„ํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ์žฅ์—์„œ ์–ธ๊ธ‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Selecting data from a table
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
overview
syntax
SELECT select-list // select ์ ˆ
[ FROM table-expression ] // from ์ ˆ
[ ON join-condition ] // on ์ ˆ
[ WHERE search-condition ] // where ์ ˆ
[ GROUP BY column-list ] // group by ์ ˆ
[ HAVING search-condition ] // having ์ ˆ
[ ORDER BY column-list ] // order by ์ ˆ
SELECT ๋ฌธ์— ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” SQL Keyword๋Š” ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ณ„์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ
์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ฌธ์ž๋กœ ๋งŽ์ด ํ‘œํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
SELECT๋ฌธ์„ ํ˜•์„ฑํ•˜๋Š” SELECT, FROM, WHERE ์ ˆ๊ณผ ๊ฐ™์€ ๊ฐ ์ ˆ์€ ๋ผ์ธ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ
๊ธฐ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช…๊ณผ ๊ฐ™์€ Identifier๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„์„ ํ•˜์ง€ ์•Š์ง€๋งŒ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋‚˜
string๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ์‹œ์˜ ์˜ต์…˜์— ์˜ํ•ด ๊ตฌ๋ณ„ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ Object ์ฐธ์กฐ์‹œ ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด owner ๋ช…๊ณผ ๊ฐ™์€ qualifier๋ฅผ ์‚ฌ์šฉ
ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
select ์ ˆ
select-list๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌ๋œ ์•ก์„ธ์Šค๋ฅผ ์›ํ•˜๋Š” ์ปฌ๋Ÿผ, ์‚ฐ์ˆ ์‹, aggregate ํ•จ์ˆ˜,
ํ˜น์€ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์ง€์นญํ•˜๋Š” *๋กœ ๊ตฌ์„ฑ๋˜์–ด ์ง‘๋‹ˆ๋‹ค.
์งˆ์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋Š” ๊ฐ ์ปฌ๋Ÿผ์˜ ํ—ค๋”ฉ์€ select-list์— ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” expression์„ ๋””ํดํŠธ
๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ํ—ค๋”ฉ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ alias๋ฅผ ์‚ฌ์šฉ ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
SELECT column-name AS alias
SELECT column-name alias
SELECT alias = column-name
alias์— space ๋˜๋Š” keyword๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด โ€œ๋กœ ์–‘์ชฝ์„ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
SELECT dept_id AS โ€œintegerโ€
FROM โ€ฆ
select-list์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‚ฌ์น™์—ฐ์‚ฐ๊ณผ ๊ฐ™์€ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ
์‚ฐ์ˆ  ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SELECT name, ( quantity * unit_price ) โ€“ 5
FROM โ€ฆ
concatenation ์—ฐ์‚ฐ์ž || ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด๋“ค์„ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SELECT f_name || l_name โ€œ์„ฑ๋ช…โ€
FROM โ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
select ์ ˆ
select-list์— ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌํ„ฐ๋Ÿด์€ alias๋‚˜ ์ปฌ๋Ÿผ๋ช…์ด ์•„๋‹Œ select ์ ˆ์— ํฌํ•จ๋œ ๋ฌธ์ž, ํ‘œํ˜„์‹,
์ˆซ์ž์ด์ง€๋งŒ ์ปฌ๋Ÿผ๊ณผ ๊ฐ™์ด ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ๋‚ ์งœ์™€ ๋ฌธ์ž ๋ฆฌํ„ฐ๋Ÿด์€ ๋‹จ์ผ ์ธ์šฉ๋ถ€ํ˜ธ(โ€˜ โ€˜)๋กœ ์—์›Œ์‹ธ๋ฉฐ
์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์€ ๊ทธ๋ƒฅ ์ˆซ์ž๋งŒ ํ‘œํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค
SELECT l_name || l_name || โ€˜โ€˜ โ€™โ€™ || title โ€œ์ง์›โ€ // space
FROM โ€ฆ
NULL์ด๋ž€ 0์ด๋‚˜ space์™€ ๋‹ฌ๋ฆฌ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๋˜๋Š” ์ ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์˜๋ฏธํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ
NULL๊ฐ’์„ ํ‘œํ˜„ํ•œ ์‚ฐ์ˆ ์‹์˜ ๊ฒฐ๊ณผ๋Š” NULL ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ select-list์— ๋„๊ฐ’
๋Œ€์‹ ์— ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ COALESCE๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
SELECT f_name || l_name, salary * COALESCE(comm,0)/100
FROM โ€ฆ
SELECTํ•œ ๊ฒฐ๊ณผ๋กœ ๋ถ€ํ„ฐ ์ค‘๋ณต๋œ ํ–‰์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒ์ ์œผ๋กœ DISTINCT keyword ๋ฅผ
์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ NULL๊ฐ’์€ ์‹ค์ œ SELECTํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ช‡๊ฑด์ธ์ง€์— ๊ด€๊ณ„์—†์ด ํ•œ ๊ฑด์œผ๋กœ ์ทจ
๊ธ‰ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ DISTINCT๋ผ๋Š” keyword๋Š” ํ•ญ์ƒ SELECT ๋ฐ”๋กœ ๋’ค์— ๊ธฐ์ˆ ํ•˜๋ฉฐ ๊ทธ ๋’ค์— ์—ฌ
๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ธฐ์ˆ ํ–ˆ๋‹ค๋ฉด ๋‚˜ํƒ€๋‚˜๋Š” ๋กœ์šฐ๋Š” ์ปฌ๋Ÿผ์˜ ์กฐํ•ฉ๋“ค์ด ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
SELECT DISTINCT city
FROM โ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
first, top
์งˆ์˜์˜ ๊ฒฐ๊ณผ๋กœ ๋ถ€ํ„ฐ ์ฒซ๋ฒˆ์งธ ํ˜น์€ ๊ธฐ์ˆ ๋œ ์ˆ˜๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. FIRST์€ ํ•œ ๊ฑด์˜
๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ TOP์€ 1~32767 ๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ๋กœ ORDER BY ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด์•ผ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์ง€ ๋งŒ์•ฝ์— ORDER
BY์ ˆ ์—†์ด ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋งค ์งˆ์˜์‹œ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ํ•จ์ˆ˜๋Š” ์งˆ์˜์˜ ์ œ์ผ ๋ฐ”๊นฅ์ชฝ SELECT๋ฌธ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•˜๋ฏ€๋กœ derived table์ด๋‚˜
VIEW์˜ ์ƒ์„ฑ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
FIRST๋Š” ROW_COUNT๋ผ๋Š” ์˜ต์…˜์˜ ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•˜๊ณ , TOP n ์€ ROW_COUNT ์˜ต์…˜์„
n์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์งˆ์˜ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TOP n์—์„œ n์˜ ๋ฒ”์œ„๋Š” 1~32767์ด์ง€๋งŒ
ROW_COUNT์—์„œ๋Š” ๊ทธ๋Ÿฐ ์ œ์•ฝ์ด ์—†์Šต๋‹ˆ๋‹ค.
syntax
SELECT [ FIRST | TOP number-of-rows ] select-list
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
from ์ ˆ
select ์ ˆ์˜ select-list์— ์ปฌ๋Ÿผ์˜ ๊ธฐ์ˆ ์ด ์ „ํ˜€ ์—†๊ณ  ๋‹จ์ง€ ์‚ฐ์ˆ  ํ‘œํ˜„์‹๋งŒ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค๋ฉด
from ์ ˆ ์ดํ•˜๋Š” ์ƒ๋žต๋˜๊ฑฐ๋‚˜ sys.dummy ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SELECT 24 * 60 * 60
[FROM sys.dummy];
ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ทฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ SELECT ํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋ฉฐ ์ฝค๋งˆ๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ…Œ
์ด๋ธ” ํ˜น์€ derived table์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SELECT โ€ฆ
FROM employee | ( SELECT โ€ฆ โ€ฆ ) b
ํ…Œ์ด๋ธ”์ด๋ฆ„์ด๋‚˜ ๋ทฐ ์ด๋ฆ„์€ ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด owner ๋ช…๊ณผ ๊ฐ™์€ qualifier๋ฅผ ์‚ฌ์šฉํ• 
์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
SELECT โ€ฆ
FROM dba.employee
ํƒ€์ดํ•‘์˜ ์ˆ˜๊ณ ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ” ๋ช…์— ๋‹ค๋ฅธ correlation name์„ ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋’ค์— ์‚ฌ
์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋ ‡๊ฒŒ correlation name์ด ํ•œ ๋ฒˆ ์‚ฌ์šฉ๋˜์–ด์ง„ ํ›„์— ๊ทธ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š”
ํ‘œํ˜„์œผ๋กœ๋Š” ๋ฐ˜๋“œ์‹œ correlation name์ด ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
SELECT d.dept_id, d.dept_name //d ๋Œ€์‹ ์— department ์‚ฌ์šฉ๋ถˆ๊ฐ€
FROM department d
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
where ์ ˆ
where์ ˆ์—๋Š” SELECT ํ•˜๋Š” ๋กœ์šฐ๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•œ search condition์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ
qualification ํ˜น์€ predicate๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์ ˆ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค
Comparison operator : =, > , <, <=, >=, !=, !>, !<
SELECT emp_lname
FROM employee
WHERE salary > 50000
Range operator : BETWEEN, NOT BETWEEN
SELECT emp_lname
FROM employee
WHERE salary BETWEEN 40000 AND 50000
List operator : IN, NOT IN
SELECT company_name, state
FROM customer
WHERE state IN (โ€˜ONโ€™, โ€˜PQโ€™, โ€˜MBโ€™)
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
where ์ ˆ
Character match : LIKE, NOT LIKE
SELECT company_name, phone
FROM customer
WHERE phone LIKE โ€˜415%โ€™
Unknown value : IS NULL, IS NOT NULL
SELECT dept_name
FROM department
WHERE dept_head_id is NOT NULL
Combination : AND, OR, NOT
SELECT emp_fname, emp_lname
FROM employee
WHERE saraly > 50000
AND emp_fname like โ€˜A%โ€™
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Summarizing, Grouping, Sorting
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
group by ์ ˆ
ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๋ณด๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ
aggregate ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. select ์ ˆ์— ๋‚˜ํƒ€๋‚œ ์–ด๋– ํ•œ ์ปฌ๋Ÿผ์ด๋‚˜ ํ‘œํ˜„์‹๋„
aggregate ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” group by์ ˆ์— ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
group by ์ ˆ ์—†์ด aggregate ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด ์ „ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ 
๊ทธ์— ๋Œ€ํ•œ ํ•œ๊ฑด์˜ ๊ฒฐ๊ณผ๋งŒ์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ select-list์—๋Š” aggregation ํ•จ์ˆ˜๋งŒ ๊ธฐ์ˆ 
๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
aggregate ํ•จ์ˆ˜๋Š” select ์ ˆ๊ณผ having ์ ˆ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  NULL ๊ฐ’์€ COUNT(*)๋ฅผ ์ œ
์™ธํ•œ ์—ฐ์‚ฐ์—์„œ ์ œ์™ธ๋˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค
AVG(numeric-expr)
SUM(numeric-expr)
COUNT(*)
COUNT(column-name)
MAX(expr), MIN(expr)
VARIANCE (numeric-expr), STDDEV(numeric-expr)
์˜ˆ)
SELECT order_reg, order_prod, SUM(order_qty)
FROM order_detail
WHERE order_date >= โ€˜1999/01/01โ€™
GROUP BY order_reg, order_prod
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
rollup
ROLLUP์€ GROUP BY์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋’ค์— ๋‚˜์˜ค๋Š” (์ปฌ๋Ÿผ์ˆ˜ โ€“ 1) ๊ฐœ ๊นŒ์ง€์˜ ๊ทธ๋ฃน๋ณ„
์†Œ๊ณ„์™€ ์ด๊ณ„๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ๊นŒ์ง€๋Š” COUNT DISTINCT, SUM DISTINCT๋Š” ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ์œผ๋ฉฐ sub-query์—์„œ
๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
syntax
SELECT [ GROUPING (column-name)โ€ฆ] โ€ฆ
GROUP BY ROLLUP expression [,โ€ฆ..]
์˜ˆ)
SELECT year, model, sum(qty)
FROM sales
GROUP BY ROLLUP year, model
6
์„ธํƒ๊ธฐ ๋ƒ‰์žฅ๊ณ  ๊ณ„
1997
1998
1999
2000
์ด๊ณ„
16
26
36
5
15
25
35
11
31
51
71
164
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
cube
ROLLUP์€ GROUP BY์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ rollup ๊ธฐ๋Šฅ์— ํ๋ธŒ ํ˜•ํƒœ์˜ ๊ทธ๋ฃน๋ณ„ ์†Œ๊ณ„์™€ ์ด
๊ณ„๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ๊นŒ์ง€๋Š” COUNT DISTINCT, SUM DISTINCT๋Š” ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ์œผ๋ฉฐ sub-query์—์„œ
๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
syntax
SELECT [ GROUPING (column-name)โ€ฆ] โ€ฆ
GROUP BY CUBE expression [,โ€ฆ..]
์˜ˆ)
SELECT year, model, sum(qty)
FROM sales
GROUP BY CUBE year, model
6
์„ธํƒ๊ธฐ ๋ƒ‰์žฅ๊ณ  ๊ณ„
1997
1998
1999
2000
์ด๊ณ„
16
26
36
84
5
15
25
35
80
11
31
51
71
164
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
having ์ ˆ
where ์ ˆ์—์„œ SELECT ํ•˜๊ธฐ ์œ„ํ•œ ๋กœ์šฐ๋ฅผ ์ œํ•œ ํ•˜๋“ฏ์ด GROUP BY ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œํ•œํ•˜๊ณ ์ž
ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ aggregation ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ œํ•œ์€ ๋ฌธ๋ฒ•์ƒ where์ ˆ์— ๊ธฐ์ˆ ํ•  ์ˆ˜
์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ œํ•œ์€ where์ ˆ์ด ์•„๋‹Œ having์ ˆ์— ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT order_reg, order_prod, SUM(order_qty)
FROM order_detail
WHERE order_date >= โ€˜1999/01/01โ€™
GROUP BY order_reg,order_prod
HAVING SUM(order_qty) > 200
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
order by ์ ˆ
SELECTํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ค ํŠน์ • ์ปฌ๋Ÿผ์— ์˜ํ•ด ์ •๋ ฌํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ
๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์„ ํƒํ•ด์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
ASC๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ, DESC๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ
์œผ๋ฉฐ ASC ํ˜น์€ DESC๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋””ํดํŠธ๋กœ๋Š” asc ์ž…๋‹ˆ๋‹ค
ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๋•Œ order by์ ˆ์˜ ์ปฌ๋Ÿผ์€ ์ฝค๋งˆ๋กœ
๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ปฌ๋Ÿผ ๋Œ€์‹  ๋ณ„๋ช…์ด๋‚˜ select ์ ˆ์—์„œ ๊ธฐ์ˆ ๋œ ์ปฌ๋Ÿผ์˜ ์œ„์น˜์ˆœ์„œ๋ฅผ ๊ธฐ์ˆ ํ•ด๋„
๋ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ RDBMS์—์„œ๋Š” GROUP BY์˜ ๊ฒฐ๊ณผ๋กœ group by์ ˆ์— ๊ธฐ์ˆ ๋œ ์ปฌ๋Ÿผ ์ˆœ์œผ
๋กœ ์ž๋™์œผ๋กœ ์ •๋ ฌํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์ปฌ๋Ÿผ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ ์ž ํ–ˆ์„ ๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š”
order by์ ˆ์„ ์ƒ๋žตํ•˜์ง€๋งŒ SYBASE IQ์—์„œ๋Š” order by ์ ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋– ํ•œ ์ข…
๋ฅ˜์˜ ์งˆ์˜๋„ ๊ฒฐ์ฝ” ์ •๋ ฌํ•ด์„œ ๋ณผ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์˜ˆ)
SELECT id, name, quantity
FROM product
WHERE name like โ€˜%shirt%โ€™
ORDER BY name, quantity desc ํ˜น์€ ORDER BY 2, 3 desc;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋ถ„์„ํ˜• ํ•จ์ˆ˜
์ „์ฒด ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ˆœ์œ„๋ฅผ ๋‚ด์ฃผ๋Š” ์ˆœ์œ„ํ˜• ํ•จ์ˆ˜์—๋Š” DENSE_RANK, PERCENT_RANK,
RANK๊ฐ€ ์žˆ์œผ๋ฉฐ ์ˆœ์œ„์— ๋Œ€ํ•œ ๊ธฐ์ค€์ด ๋˜๋Š” OVER ( ORDER BY ) ์ ˆ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ™์€ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ DENSE_RANK์™€ RANK๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ฆ‰
RANK ํ•จ์ˆ˜๋Š” ๊ฐ™์€ ์ˆœ์œ„๊ฐ€ ์กด์žฌํ•˜๋ฉด ์กด์žฌํ•˜๋Š” ์ˆ˜๋งŒํผ์˜ ๊ณต๋ฐฑ ์ˆœ์œ„๊ฐ€ ์กด์žฌํ•˜๋‚˜
DENSE_RANK๋Š” ๊ณต๋ฐฑ์ˆœ์œ„๋ฅผ ์ธ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
PERCENT_RANK ํ•จ์ˆ˜๋Š” ์ˆœ์œ„ ๋ฐฑ๋ถ„์œจ์„ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉฐ NTILE ํ•จ์ˆ˜๋Š” ๋ถ„์œ„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด ์ค
๋‹ˆ๋‹ค. ๋˜ํ•œ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์˜ PERCENT_CONT, PERCENT_DISC๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์œ„ ํ•จ์ˆ˜๋“ค์€ sub-query์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ทธ๋ฃน๋ณ„๋กœ ๋ณ„๋„์˜ ์ˆœ์œ„๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์˜ต์…˜
์ธ PARTITION BY ๊ฐ€ ํ˜„์žฌ ๊นŒ์ง€๋Š” ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
syntax
SELECT DENSE_RANK | PERCENT_RANK | RANK
OVER ( ORDER BY expr [ ASC | DESC ] )
SELECT NTILE (expr1) OVER ( ORDER BY expr2 [ ASC | DESC ] )
SELECT PERCENT_CONT | PERCENT_DISC (expr1)
WITHIN GROUP ( ORDER BY expr2 [ ASC | DESC ] )
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋ถ„์„ํ˜• ํ•จ์ˆ˜
์ฐธ๊ณ  : PARTITION BY ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํ•˜๊ธฐ
SELECT district, grade, AVG(math_score),
rank() over (partition by district order by avg(math_score) desc) as rank_d
FROM math_report
GROUP BY district, grade
ORDER BY district;
SELECT district, grade, avg(math_score),
rank() over (order by avg(math_score) desc) as rank_d
FROM math_report WHERE district = 'essex'
GROUP BY district, grade
UNION ALL
SELECT district, grade, avg(math_score),
rank() over (order by avg(math_score) desc) as rank_d
FROM math_report WHERE district = 'middlesex'
GROUP BY district, grade
UNION ALL
SELECT district, grade, avg(math_score),
rank() over (order by avg(math_score) desc) as rank_d
FROM math_report WHERE district = 'suffolk'
GROUP BY district, grade
ORDER BY 1,2;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Retrieving data from several tables
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
overview
syntax
SELECT select-list // select ์ ˆ
[ FROM table-expression ] // from ์ ˆ
[ ON join-condition ] // on ์ ˆ
[ WHERE search-condition ] // where ์ ˆ
[ GROUP BY column-list ] // group by ์ ˆ
[ HAVING search-condition ] // having ์ ˆ
[ ORDER BY column-list ] // order by ์ ˆ
FROM table-name [ KEY | NATURAL [ INNER | FULL [ OUTER ] |
LEFT [ OUTER ] | RIGHT [ OUTER ] JOIN | CROSS JOIN table-name
ON join-condition
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
join
์กฐ์ธ์€ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜์˜ select statement์— ํฌํ•จํ•˜์—ฌ ์›
ํ•˜๋Š” ์ •๋ณด๋ฅผ ์‚ฐ์ถœํ•˜๋Š” SQL ์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ PK์™€ FK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€
๋ถ„์ด์ง€๋งŒ ๋•Œ๋กœ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐ’๋“ค์˜ ์—ฐ๊ด€์œผ๋กœ ์กฐ์ธํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ where์ ˆ์— ์กฐ์ธ ์กฐ๊ฑด์„ ๊ธฐ์ˆ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€๋งŒ WatcomSQL๊ณผ ANSI์—์„œ๋Š”
from์ ˆ์— ์กฐ์ธ์˜ ๋ฐฉ๋ฒ•์„ on์ ˆ์— ์กฐ์ธ์˜ ์กฐ๊ฑด์„ ๊ธฐ์ˆ ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์กฐ์ธํ•  ๋•Œ ๋˜‘๊ฐ™์€ ์ปฌ๋Ÿผ ์ด๋ฆ„์ด ์กด์žฌํ•˜๊ฑฐ๋‚˜ ๋ฌธ์žฅ์˜ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ์ปฌ๋Ÿผ ์ด๋ฆ„ ์•ž
์— ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด๋‚˜ ํ˜น์€ correlation name์„ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ N๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋ ค๋ฉด N-1๊ฐœ์˜ ์กฐ์ธ ์กฐ๊ฑด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ฐธ๊ณ 
์กฐ์ธ์— ํ•ด๋‹น๋˜๋Š” ์ปฌ๋Ÿผ์€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฐ ๊ธธ์ด๊ฐ€ ๊ฐ™์•„์•ผ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ
SYBASE IQ์—์„œ๋Š” ์กฐ์ธ์— ํ•ด๋‹น๋˜๋Š” ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ int ๊ณ„์—ด ํŠนํžˆ unsigned int ๊ณ„
์—ด๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
equijoin vs. non-equijoin
equijoin์€ ์กฐ์ธ ์กฐ๊ฑด์—์„œ =์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’๋“ค์ด ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ธ
์„ ๋งํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„ PK์™€ FK์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค. equijoin์€ ๋‹ค๋ฅธ ๋ง๋กœ inner-
join ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT *
FROM sales_order a JOIN customer b ON a.cust_id = b.id
JOIN sales_order_items c ON a.id = c.id
์กฐ์ธ ์กฐ๊ฑด์—์„œ ์—ฐ์‚ฐ์ž๋กœ =์ด ์•„๋‹Œ BETWEEN ~ AND ๋“ฑ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฌ์šฉ๋˜์–ด ์ง„๋‹ค
๋ฉด ์ด๋ฅผ non-equijoin ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT e.emp_id, e.emp_lname, e,salary, s.low_salary, s.high_salary
FROM salary_grade s JOIN employee e
ON e.salary BETWEEN s.low_salary AND s.high_salary;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
inner-join vs. outer-join
equijoin์€ ์กฐ์ธ ์กฐ๊ฑด์—์„œ =์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’๋“ค์ด ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ธ
์„ ๋งํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„ PK์™€ FK์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค. equijoin์€ ๋‹ค๋ฅธ ๋ง๋กœ inner-
join ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT *
FROM sales_order a JOIN customer b ON a.cust_id = b.id
JOIN sales_order_items c ON a.id = c.id
์ผ๋ฐ˜์ ์ธ inner join์—์„œ๋Š” ํ…Œ์ด๋ธ”๋“ค ์‚ฌ์ด์— ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋กœ์šฐ๋งŒ์„ ๊ฒฐ๊ณผ๋กœ ์‚ฐ์ถœ
ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋กœ์šฐ๋ผ๋„ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ์กฐ
์ธ์„ outer join์ด๋ผ๊ณ  ๋งํ•˜๋ฉฐ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ํ…Œ์ด๋ธ”์„ outer, ๊ทธ ๋ฐ˜๋Œ€์ชฝ์„ inner
๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ „๋ถ€ ์ถœ๋ ฅ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ์œ„์น˜์— ๋”ฐ๋ผ LEFT OUTER JOIN, RIGHT OUTER
JOIN, FULL OUTER JOIN์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ)
SELECT lname, order_date, city
FROM customer LEFT OUTER JOIN sales_order
ON customer.id = sales_order.cust_id
WHERE customer.state = โ€˜NYโ€™;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
key join
ํ…Œ์ด๋ธ”๋“ค๊ฐ„์˜ ์กฐ์ธ์€ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด์ง„ PK, FK์— ์˜ํ•ด ์กฐ์ธ ์กฐ๊ฑด์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ
ON์ ˆ์ด ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ์‚ฌ์ „์— ์กฐ์ธ๋˜์–ด์ง€๋Š” ํ…Œ์ด๋ธ”์— PK, FK๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์˜ˆ)
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FRO M customer a KEY JOIN order_detail b
WHERE a.cust_reg = โ€˜Seoulโ€™
AND b.order_proc = โ€˜101โ€™
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a, order_detail b
WHERE a.cust_id = b.cust_id
AND a.cust_reg = โ€˜Seoulโ€™
AND b.order_proc = โ€˜101โ€™
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
natual join
ํ…Œ์ด๋ธ”๋“ค๊ฐ„์˜ ์ด๋ฆ„์ด ๊ฐ™์€ ์ปฌ๋Ÿผ๋“ค๋กœ ์กฐ์ธ ์กฐ๊ฑด์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ON์ ˆ์ด ์ƒ๋žต๋ฉ๋‹ˆ
๋‹ค. ํ…Œ์ด๋ธ”๋“ค๊ฐ„์˜ ์ด๋ฆ„์ด ๊ฐ™์€ ์ปฌ๋Ÿผ์ด ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์ด ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ ๋งŒ์•ฝ ์ผ์น˜ํ•˜๋Š” ์ด
๋ฆ„์ด ์—†๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a NATURAL JOIN order_detail b
WHERE a.cust_reg = โ€˜Seoulโ€™
AND b.order_proc = โ€˜101โ€™
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a, order_detail b
WHERE a.cust_id = b.cust_id
AND a.cust_reg = โ€˜Seoulโ€™
AND b.order_proc = โ€˜101โ€™
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
general join
๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ํ˜•ํƒœ๋กœ ์กฐ์ธ ๊ด€๋ จ๋œ ์ปฌ๋Ÿผ ์ •๋ณด๋ฅผ on์ ˆ์— ์ง์ ‘ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค
์˜ˆ)
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a JOIN order_detail b
ON a.cust_id = b.cust_id
WHERE a.cust_reg = โ€˜Seoulโ€™
AND b.order_proc = โ€˜101โ€™
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a, order_detail b
WHERE a.cust_id = b.cust_id
AND a.cust_reg = โ€˜Seoulโ€™
AND b.order_proc = โ€˜101โ€™
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
cross join(cartesian product)
๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋Œ€๋‹จํžˆ ๋งŽ์€ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•˜๋ฉฐ ํ…Œ์ด๋ธ”๋“ค ์‚ฌ์ด์˜ ์กฐ์ธ์ ˆ์ด ๊ธฐ
์ˆ ๋˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์กฐ์ธ ์กฐ๊ฑด์„ ์ƒ๋žตํ•œ ๊ฒฝ์šฐ๋‚˜ ์กฐ์ธ ์กฐ๊ฑด์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒ๋˜๋ฉฐ ์ฒซ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰
์ด ๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰๊ณผ ์กฐ์ธ์ด ๋ฉ๋‹ˆ๋‹ค
๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๊ฑฐ์˜ ์œ ์šฉํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ Max_Cartesian_Result ๋ผ๋Š” ์˜ต์…˜์„
ํ†ตํ•ด ํ†ต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ)
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a CROSS JOIN order_detail b
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a , order_detail b
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
self join
๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ์กฐ์ธ์— ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ˜๋“œ์‹œ correlation name์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ) ๋™๋ช…์ด์ธ์„ ์ฐพ๋Š” self join
SELECT a.cust_id, a.cust_name, a.cust_addr
FROM customer a JOIN customer b
ON a.cust_name = b.cust_name
WHERE a.cust_id != a.cust_id
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
outer join
์ผ๋ฐ˜์ ์ธ inner join์—์„œ๋Š” ํ…Œ์ด๋ธ”๋“ค ์‚ฌ์ด์— ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋กœ์šฐ๋งŒ์„ ๊ฒฐ๊ณผ๋กœ ์‚ฐ์ถœ
ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋กœ์šฐ๋ผ๋„ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ์กฐ
์ธ์„ outer join์ด๋ผ๊ณ  ๋งํ•˜๋ฉฐ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ํ…Œ์ด๋ธ”์„ outer, ๊ทธ ๋ฐ˜๋Œ€์ชฝ์„ inner
๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์˜ํ•  ์ ์€ inner ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋‹ค๋ฉด ์ด ์กฐ๊ฑด์€ ๋ฐ˜๋“œ์‹œ where์ ˆ์ด ์•„๋‹Œ
on์ ˆ์— ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ where ์ ˆ์— ์ด ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ธฐ์ˆ ํ•˜๋ฉด OUTER JOIN์ด ์•„
๋‹Œ INNER JOIN์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.์ด๋Š” ANSI ๊ทœ์•ฝ์ด๋ฉฐ outer ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ
์ œ์•ฝ ์กฐ๊ฑด์€ ์–ด๋””์— ๊ธฐ์ˆ ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a left outer join order_detail b
ON a.cust_id = b.cust_id
AND b.order_qty > 10 // ์ฃผ์˜
WHERE a.cust_reg = โ€˜seoulโ€™
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a , order_detail b
WHERE a.cust_id *= b.cust_id
AND a.cust_reg = โ€˜seoulโ€™
AND b.order_qty > 10
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
derived table join
from์ ˆ์—์„œ ๋ทฐํ˜•ํƒœ์˜ ์ค‘๊ฐ„ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ ํ›„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ์„ ํ•˜๋Š” ํ˜•ํƒœ๋กœ ํŽธ์ง‘
์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, select์ ˆ ์—์„œ์˜ ์‚ฌ์šฉ์€ ์›๋ž˜ ASA์˜
WatcomSQL์—์„œ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ SYBASE IQ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
Oracle์—์„œ๋Š” In-line-view ๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์„
๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ)
SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty
FROM customer a , (SELECT cust_id, order_unit, order_qty
FROM order_detail
WHERE order_prod = โ€˜101โ€™) b
WHERE a.cust_id = b.cust_id
AND a.cust_reg = โ€˜Seoulโ€™
์ฐธ๊ณ 
derived table์˜ ๊ฒฐ๊ณผ๋กœ ๋งŽ์€ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฐ์ถœ๋œ๋‹ค๋ฉด ์ด๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๊ณ 
์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์กฐ์ธ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž„์‹œ ํ…Œ์ด๋ธ”
์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ์ง‘ํ•  ๋•Œ ๋ถˆํŽธํ•œ ์ ์ด ์กฐ๊ธˆ์€ ์žˆ์„์ง€ ๋ชจ๋ฅด์ง€๋งŒ ์„ฑ๋Šฅ์ƒ์—๋Š” ๋งŽ์€ ์ด์ ์ด ์žˆ์Šต
๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sub-query
sub-query๋Š” ์—ฌ๋Ÿฌ ์ ˆ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ SELECT ๋ฌธ์žฅ ์•ˆ์— ๊ธฐ์ˆ ๋œ SELECT ๋ฌธ์žฅ์ž…๋‹ˆ
๋‹ค. sub-query๋Š” main query์ด์ „์— ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋˜๋ฉฐ sub-query์˜ ๊ฒฐ๊ณผ๋ฅผ main query
์— ์˜ํ•ด ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
sub-query๋Š” ๊ด„ํ˜ธ๋กœ ์–‘์ชฝ์„ ๋ฌถ์–ด์•ผ ํ•˜๊ณ  ์—ฐ์‚ฐ์ž์˜ ์˜ค๋ฅธ์ชฝ์— ๋‚˜ํƒ€๋‚˜์•ผ ํ•˜๋ฉฐ order by ์ ˆ
์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ select-list์— ๋‹จ์ง€ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿฌ๋งŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
sub-query์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฐ์ถœํ•œ๋‹ค๋ฉด ๋‹จ์ผ ํ–‰ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ 2๊ฑด
์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฐ์ถœํ•œ๋‹ค๋ฉด ๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹จ์ผ ํ–‰ ์—ฐ์‚ฐ์ž : =, >, <, >=, <=, !=
๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ์ž : IN, EXISTS (์ฐธ๊ณ  : ANY, ALL์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)
sub-query๋Š” where์ ˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ having์ ˆ, from์ ˆ์—์„œ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํŠนํžˆ from์ ˆ ์—
์„œ ์‚ฌ์šฉํ•˜๋Š” sub-query๋Š” derived-table์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
syntax
SELECT select-list
FROM table-expression
WHERE expression operator ( SELECT select-list
FROM table-expression
WHERE search-condition )
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sub-query
์˜ˆ)
SELECT cust_fname, cust_lname
FROM customer
WHERE cust_id in ( SELECT cust_id
FROM order_detail
WHERE order_proc = โ€˜101โ€™)
AND cust_reg = โ€˜Seoulโ€™
SELECT c.cust_fname, c.cust_lname
FROM customer c, order_detail o
WHERE c.cust_id in = o.cust_id
AND o.order_proc = โ€˜101โ€™
AND c.cust_reg = โ€˜Seoulโ€™
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
union
์—ฐ์‚ฐ์ž ์–‘์ชฝ์˜ ์งˆ์˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ํ•ฉํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ์—ฐ์‚ฐ์ž๋กœ ์ค‘๋ณต ๋ฐ์ดํ„ฐ
๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ณด์—ฌ์ค„ ๋•Œ๋Š” ALL ์ด๋ผ๋Š” Keyword๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ง๋ถ™์—ฌ ์ง‘๋‹ˆ๋‹ค.
์—ฐ์‚ฐ์ž ์–‘์ชฝ์—์„œ ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ์ˆ˜ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ™์•„์•ผ
ํ•ฉ๋‹ˆ๋‹ค.
์—ฐ์‚ฐ์ž ์–‘์ชฝ์˜ ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋”ฐ์ ธ๋ณผ ๋•Œ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‹ค์ œ
์—ฐ์‚ฐํ•  ๋•Œ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ๊ณผ์ •์„ ์ƒ๋žตํ•˜๋ฏ€๋กœ UNION ALL์ด ์„ฑ๋Šฅ์— ์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค.
UNION ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ด์„œ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด UNION ์—ฐ์‚ฐ์ž์˜ ์•„๋ž˜ ์ชฝ์˜ ์งˆ์˜์— order by
์ ˆ์„ ์ถ”๊ฐ€ ๊ธฐ์ˆ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ปฌ๋Ÿผ ์ด๋ฆ„์ด ์•„๋‹ˆ๊ณ  ์ปฌ๋Ÿผ์˜ ์œ„์น˜์ˆœ์„œ๋ฅผ ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT cust_name,cust_city,cust_phone
FROM a_customer
UNION [ALL]
SELECT cust_name,cust_city,cust_phone
FROM b_customer
ORDER BY 1, 2;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
minus, intersect
MINUS์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ž๋Š” ์ง์ ‘ ์ œ๊ณต๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์˜ ๋ณด๊ธฐ์ฒ˜๋Ÿผ ์งˆ์˜๋ฅผ ์ง
์ ‘ ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT product_id
FROM ( SELECT a.product_id, b.product_id as b_product_id
FROM inventories a LEFT OUTER JOIN order_item b
ON a.product_id = b.product_id ) tmp
WHERE b_product_id IS NULL;
INTERSECT์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ž๋„ ์—ญ์‹œ ์ง์ ‘ ์ œ๊ณต๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์˜ ๋ณด๊ธฐ์ฒ˜
๋Ÿผ ์งˆ์˜๋ฅผ ์ง์ ‘ ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
SELECT a.product_id
FROM inventories a JOIN order_item b
ON a.product_id = b.product_id;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sp_iqcolumn
syntax
sp_iqcolumn table-name;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Adding, Changing, and Deleting data
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
insert
ํ•œ ํ…Œ์ด๋ธ”์— insert๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ์„ ๋•Œ ์–ด๋–ค ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋„ ๊ทธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด write ํ•  ์ˆ˜
์žˆ๋Š” ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ write ์ด์ „ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ read ํ•  ์ˆ˜ ๋Š” ์žˆ์Šต๋‹ˆ๋‹ค.
syntax1
INSERT [INTO] [owner.]table-name [(column-name[,โ€ฆ])]
VALUES (expression โ€ฆ)
syntax2
INSERT [INTO] [owner.]table-name [(column-name[,โ€ฆ])]
insert-load-option
select-statement
syntax3
INSERT [INTO] [owner.]table-name [(column-name[,โ€ฆ])]
insert-load-option
[LOCATION โ€˜server-name.db-nameโ€™]
{select-statement}
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
insert-manually insert
์ฃผ์–ด์ง„ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”์— ํ•œ๊ฑด ํ•œ๊ฑด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉฐ ์ฃผ๋กœ OLTP์˜ ์šด์˜ํ™˜
๊ฒฝ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
SYBASE IQ ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์— ์ด๋Ÿฐ ์‹์˜ INSERT๋Š” ์ž…๋ ฅ๋˜๋Š” ์†๋„๋„ ๋А๋ฆด ๋ฟ๋งŒ
์•„๋‹ˆ๋ผ ์„œ๋ฒ„์— ์ฃผ๋Š” ๋ถ€๋‹ด๋„ ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ์ด๋Ÿฐ INSERT๋Š” ์ž์ œํ•ด ์ฃผ์‹ญ์‹œ์˜ค.
๋งŒ์•ฝ ์‚ฌ์šฉ์‹œ์—๋„ ์ปฌ๋Ÿผ๊ณผ ๊ฐ’์— ๋Œ€ํ•œ ๋งคํ•‘์„ ๋ช…์‹œ์ ์œผ๋กœ ํ•˜์‹ญ์‹œ์˜ค
์˜ˆ)
INSERT INTO department (dept_id, dept_name)
VALUES (230, โ€˜Eastern Salesโ€™);
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
insert-inserting from IQ main store
์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋ณด๋“ฏ์ด SELECTํ•˜๋Š” ํ…Œ์ด๋ธ”๋„ SYBASE IQ์˜ main store์— ์กด์žฌํ•˜๊ณ 
INSERT ํ•˜๋Š” ํ…Œ์ด๋ธ”๋„ SYBASE IQ main store์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
ETL ๊ณผ์ • ์ค‘์— ๋งŽ์ด ๋ฐœ์ƒ๋˜๋Š” ํ˜•ํƒœ์˜ ์ž…๋ ฅ ๋ฐฉ๋ฒ• ์ด๋ฉฐ ๋‹ค์ค‘ ์“ฐ๋ ˆ๋“œ๋กœ ๋™์ž‘๋˜๋Š” LOAD์™€ ๋‹ฌ
๋ฆฌ ํ•œ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋งก์•„์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๊ณ  ๋งค์šฐ ์ค‘์š”ํ•œ ํŠธ๋žœ์žญ์…˜์ด๋ผ๋ฉด ๊ฒฝ์šฐ์— ๋”ฐ๋ผ SAM ํŒŒ์ผ๋กœ UNLOAD
ํ•œ ํ›„์— ๊ทธ ํŒŒ์ผ์„ ๋‹ค์‹œ LOAD ํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ด ๋ณด์‹ญ์‹œ์˜ค.
์˜ˆ)
INSERT INTO dept_head ( name, dept )
SELECT emp_lname || โ€˜ โ€˜ || emp_fname as name,
dept_name
FROM employee JOIN department
ON emp_id = dept_head_id;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
insert-inserting directly from a foreign db
์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋ณด๋“ฏ์ด ํ˜„์žฌ ์ ‘์†ํ•˜๊ณ  ์žˆ๋Š” SYBASE IQ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ DB์˜ ํ…Œ์ด๋ธ”์„ ์ฝ์–ด
์„œ ํ˜„์žฌ ์ ‘์†ํ•˜๊ณ  ์žˆ๋Š” SYBASE IQ์˜ ํ…Œ์ด๋ธ”์— ์ž…๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ DB๋กœ๋Š” ๋˜ ๋‹ค๋ฅธ SYBASE IQ, ASE, Oracle, Informix ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ SYBASE ์ œํ’ˆ์ด ์•„๋‹Œ Oracle, Informix๋“ฑ์€ ์ค‘๊ฐ„์— SYBASE์˜ Gateway ์ œํ’ˆ์ด ์žˆ
์–ด์•ผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ž…๋ ฅ์ด ๋˜๋Š” SYBASE IQ์ชฝ์— OCDK๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ ์ชฝ interfaces file์—
SELECT ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๋‹ค๋ฅธ DB์— ๋Œ€ํ•œ ๋ชฉ๋ก์ด ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ)
INSERT INTO customer
( customer_id, cust_type )
LOCATION โ€˜prod.asedbโ€™
{ SELECT customer_id, cust_type
FROM customer } ;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
insert-partial width insert
ํ•œ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์„œ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์—…๋ฌด์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ ํŠน์ •ํ•œ ์ปฌ๋Ÿผ์„ ์ฒจ๊ฐ€ ํ–ˆ์„
๋•Œ ๋‹ค๋ฅธ RDBMS ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ์žฌ๋กœ๋“œ ์—†์ด ์ด ์ฒจ๊ฐ€๋œ ์ปฌ๋Ÿผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š”
๋ฐฉ๋ฒ•์„ SYBASE IQ๋Š” ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ๋Š” ์ปฌ๋Ÿผ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ
์— ์ปฌ๋Ÿผ ๋‹จ์œ„์˜ ์ฒ˜๋ฆฌ์— ๋งค์šฐ ๊ฐ•ํ•œ ํŠน์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ)
INSERT INTO lineitem ( colC, colD )
START ROW ID 1
LOCATION โ€˜ase_srv1.part_dbโ€™
{ SELECT colC, colD FROM lineitem } ;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
update
12.4 ์ดํ•˜์˜ ๋ฒ„์ „์—์„œ๋Š” SYBASE IQ์—์„œ UPDATE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ œ์•ฝ ์‚ฌํ•ญ์ด ์กฐ๊ธˆ ์žˆ์—ˆ์ง€
๋งŒ ์ง€๊ธˆ์€ ๋ชจ๋“  ์ œ์•ฝ ์‚ฌํ•ญ์ด ์ œ๊ฑฐ ๋˜์—ˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์กฐ์ธ์„ ์ด์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ™•
์žฅ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
SYBASE IQ๋Š” ์ปฌ๋Ÿผ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ช‡ ๊ฐœ์˜ ์ปฌ๋Ÿผ๋งŒ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€
๋‹ค๋ฅธ RDBMS์— ๋น„ํ•ด ์›”๋“ฑํžˆ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
syntax
UPDATE [owner.]table-name
SET [column-name = expression, โ€ฆ
[ FROM table-expression, ]
[ WHERE search-condition [, join-condition ]] โ€ฆโ€ฆ
์˜ˆ)
UPDATE employee
SET dept_id = 400
WHERE emp_id = 129;
UPDATE employee
SET emp.salary = emp.salary + dept.bonus
FROM employee emp, department dept
WHEREWHERE empemp..deptnumdeptnum = dept.= dept.deptnumdeptnum;;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
delete
ํŠน์ • ํ…Œ์ด๋ธ”์— ์กฐ๊ฑด์„ ์ฃผ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ์„
ํ•˜์—ฌ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์กฐ๊ฑด ์—†์ด ์ „ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œ์‹œ๋Š” TRUNCATE TABLE ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋กœ๊ทธ๋ฅผ ์ 
๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
syntax
DELETE [ FROM ] [owner.]table-name
[ FROM table-list ]
[ WHERE search-condition ]
์˜ˆ)
DELETE employee
WHERE emp_id = 105;
DELETE contact
FROM contact, customer
WHERE contact.last_name = customer.WHERE contact.last_name = customer.lnamelname
ANDAND contact.first_name = customer.contact.first_name = customer.fnamefname;
TRUNCATE TABLE employee;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Using procedure
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
procedure
์ ˆ์ฐจ์ ์ธ SQL ์–ธ์–ด์— ์˜ํ•ด ์ž‘์„ฑ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚ด์— ์ €์žฅ๋˜๋ฉฐ ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—
์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ๋“ฑ ์ œ์–ด๋ฌธ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ CALL๋ฌธ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฃผ
๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
ํ”„๋กœ์‹œ์ ธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์— SELECT์˜ ๊ฒฐ๊ณผ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋˜ ๋‹ค๋ฅธ ํ”„
๋กœ์‹œ์ ธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ข…๋ฅ˜
User-Defined Stored Procedure
System-Defined Stored Procedure
์žฅ์ 
๋ฐ˜๋ณต์ ์ธ ์ผ์„ ๋‹จ์ˆœํ™”/ํ‘œ์ค€ํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค
โ€ฆโ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
creating stored procedure
resource ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ CREATE PROCEDURE ๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ• 
์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
ALTER PROCEDURE ๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์‹œ์ ธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต
๋‹ˆ๋‹ค
ํ”„๋กœ์‹œ์ ธ์˜ ๋ชธ์ฒด๋Š” BEGIN๊ณผ END๋กœ ์ด๋ฃจ์–ด์ง„ compound statement ์ด๋ฉฐ ๊ฐ ๋ฌธ์žฅ์€ ์„ธ
๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๋๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์‹œ์ ธ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•˜๋”๋ผ๊ณ  ( )๋Š” ๋ฌธ๋ฒ•์ƒ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ
๋‹ˆ๋‹ค.
syntax
CREATE PROCEDURE procedure_name ( [parameter][,โ€ฆโ€ฆ] )
[ RESULT (result-column,โ€ฆ) ]
BEGIN
// Business Logic
END;
Compound statement
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
declaring parameter
ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ˜ธ์ถœ๋ฐ›๋Š” ํ”„๋กœ์‹œ์ ธ ์‚ฌ์ด์— ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด ์ •์˜๋˜์–ด ์žˆ์œผ
๋ฉฐ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ํ˜ธ์ถœ๋ฐ›๋Š” ์ชฝ์œผ๋กœ ์ •๋ณด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด์„œ ์ž…๋‹ˆ๋‹ค.
๋˜ํ•œ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ๊ทธ ์ค‘์— ํ•˜๋‚˜๊ฐ€ ์—ญ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ต
ํ•ด์„œ ์ด๋ฉฐ ์ด๋Ÿฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” CREATE PROCEDURE๋ฌธ์˜ ๊ด„ํ˜ธ์•ˆ์— ์„ ์–ธํ•˜๋ฉฐ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌ
๋ฉ๋‹ˆ๋‹ค
์ปฌ๋Ÿผ์ฒ˜๋Ÿผ ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์„ ์–ธ๊ณผ ๋™์‹œ์— DEFAULT ์„ ์–ธ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ
์ด๋Ÿฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์•ž์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3์ข…๋ฅ˜์˜ Keyword๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
IN : ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ํ”„๋กœ์‹œ์ ธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ
OUT : ํ”„๋กœ์‹œ์ ธ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ
INOUT : IN ์—ญํ• ๊ณผ OUT ์—ญํ• ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ
syntax
CREATE PROCEDURE procedure-name
( IN | OUT | INOUT parameter-name data-type [ DEFAULT expression ],โ€ฆโ€ฆ)
์˜ˆ)
CREATE PROCEDURE ProductType ( IN product_id INT, OUT type CHAR(10) )
BEGIN
โ€ฆโ€ฆโ€ฆโ€ฆ..
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
checking parameter
NULL๊ณผ ์ƒ์ˆ˜๊ฐ’๋“ฑ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋””ํดํŠธ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ํ”„๋กœ์‹œ์ ธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์— ํŒŒ๋ผ
๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š์•˜์„ ๋•Œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ๊ฒ€์€ ๋…ผ
๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ)
CREATE PROCEDURE CustomerProducts_proc
( IN v_customer_id INT DEFAULT NULL )
BEGIN
IF v_customer_id IS NULL THEN // ๋งŒ์•ฝ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด
RETURN โ€“99000;
ELSE
SELECT a.id, SUM(b.quantity)
FROM product a, sales_order_items b, sales_order c
WHERE c.cust_id = v_customer_id
AND c.order_id = b.id
AND b.prod_id = a.id
GROUP BY a.id;
END IF;
END;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
calling stored procedure
ํ”„๋กœ์‹œ์ ธ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜น์€ ๋‹ค๋ฅธ ํ”„๋กœ์‹œ์ ธ์—์„œ CALL ๋ฌธ์— ์˜ํ•ด ๋ถˆ๋ ค์งˆ ์ˆ˜ ์žˆ์Šต
๋‹ˆ๋‹ค.
ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ทธ ํ”„๋กœ์‹œ์ ธ์— ๋Œ€ํ•ด ์‹คํ–‰ ๊ถŒํ•œ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค
ํ”„๋กœ์‹œ์ ธ์˜ ์‹คํ–‰์ด ๋๋‚ฌ์„ ๋•Œ OUT, INOUT์œผ๋กœ ์„ ์–ธ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์ด ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ
์ด๋‚˜ ํ”„๋กœ์‹œ์ ธ๋กœ ๋˜๋Œ๋ ค ์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์‹œ์ ธ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ƒํƒœ ๊ฐ’์„ ๋ฐ›์•„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ
์Šต๋‹ˆ๋‹ค.
Syntax
[variable=] CALL procedure_name ( [parameter][,โ€ฆโ€ฆ] );
์˜ˆ1)
CALL customer_list_proc();
์˜ˆ2)
CREATE VARIABLE v_returnval INT;
v_returnval = CALL integer_proc ( arg1 = val1, โ€ฆโ€ฆ );
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
passing parameter
creator
CREATE PROCEDURE Sample_proc ( IN v_var1 INT DEFAULT NULL,
IN v_var2 INT DEFAULT NULL,
IN v_var3 INT DEFAULT NULL)
BEGIN
โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ
END;
caller : ์œ„์น˜์— ์˜ํ•œ ๋ฐฉ๋ฒ•
CREATE VARIABLE v_loc1 INT;
CREATE VARIABLE v_loc2 INT;
CREATE VARIABLE v_loc3 INT;
SET v_loc1 = 100; SET v_loc2 = 200; SET v_loc3 = 300;
CALL Sample_proc ( v_loc1, v_loc2, v_loc3 );
caller : ์ด๋ฆ„์— ์˜ํ•œ ๋ฐฉ๋ฒ•
CREATE VARIABLE v_name1 int;
CREATE VARIABLE v_name2 int;
CREATE VARIABLE v_name3 int;
SET v_name1 = 100; SET v_name2 = 200; SET v_name3 = 300;
CALL Sample_proc ( v_var3=v_name3, v_var2=v_name2, v_var1=v_name1 );
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
returning results : case1
ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ”„๋กœ์‹œ์ ธ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ OUT ํ˜น์€ INOUT์œผ๋กœ ์„ ์–ธ๋˜์–ด์ง„ ํŒŒ๋ผ๋ฏธ
ํ„ฐ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ณ„์ ์ธ ๊ฐ’์„ ๋ฐ›์•„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ)
- creator
CREATE PROCEDURE AverageSalary_proc ( OUT v_avgsal NUMERIC (20,3) )
BEGIN
SELECT AVG(salary) INTO v_avgsal
FROM employee;
END;
- caller
CREATE VARIABLE v_average NUMERIC(20,3);
CALL AverageSalary_proc(v_average);
SELECT v_average;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
returning results : case2
ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ”„๋กœ์‹œ์ ธ์—์„œ SELECT ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์˜ˆ)
- creator
CREATE PROCEDURE SalaryList_proc ( IN v_dept_id INT )
BEGIN
SELECT emp_id, salary
FROM employee
WHERE dept_id = v_dept_id;
END
- caller
CALL SalaryList_proc(100);
์ฐธ๊ณ 
Interactive SQL์‚ฌ์šฉ์‹œ ํ•ด๋‹น๋˜๋Š” ํ”„๋กœ์‹œ์ ธ์˜ ์ข…๋ฃŒ ํ›„์— RESUME๊ณผ ๊ฐ™์€ ์ปค์„œ๋ฅผ ๋‹ซ์„
์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์•ผ๋งŒ ํ•ด๋‹น๋˜๋Š” ํ”„๋กœ์‹œ์ ธ๊ฐ€ DROP ๋˜๊ฑฐ๋‚˜ ALTER ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ํ”„๋กœ์‹œ์ ธ์—์„œ SELECT ๋Œ€์ƒ์ด ๋˜๋Š” ํ…Œ์ด๋ธ”๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
returning results : case3
ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ”„๋กœ์‹œ์ ธ์˜ RETURN๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ ์ˆซ์ž ์ƒํƒœ ๊ฐ’์„ ๊ฒฐ๊ณผ๋กœ ๋ฐ›
์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
syntax
RETURN [(expr)]
์˜ˆ)
- creator
CREATE PROCEDURE SalaryList_proc ( IN v_dept_id INT DEFAULT NULL)
BEGIN
IF v_dept_id IS NULL THEN
RETURN โ€“99000;
ELSE
SELECT emp_id, salary
FROM employee
WHERE dept_id = v_dept_id;
END IF;
END
- caller
CREATE VARIABLE ret_value INT;
ret_value = CALL SalaryList_proc(100);
SELECT ret_value;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
result option
Embedded SQL๋‚˜ ODBC์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ RESULT ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ SELECT ๊ฒฐ
๊ณผ์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ)
- creator
CREATE PROCEDURE SalaryList_proc ( IN v_dept_id INT DEFAULT NULL)
RESULT ( โ€œEmployee IDโ€ INT, Salary NUMERIC(20,3))
BEGIN
IF v_dept_id IS NULL THEN
return โ€“99000;
ELSE
SELECT emp_id, salary
FROM employee
WHERE dept_id = v_dept_id;
END IF;
END
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
dropping stored procedure
ํ”„๋กœ์‹œ์ ธ์˜ ์ƒ์„ฑ์ž๋‚˜ ํ˜น์€ dba ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ DROP PROCEDURE ๋ผ๋Š” ๋ช…๋ น์–ด
๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ํ”„๋กœ์‹œ์ ธ๋Š” ์‚ญ์ œ๋  ์ˆ˜ ์—†์ง€๋งŒ ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ํ›„์— ์ปค์„œ๊ฐ€ ์—ด
๋ ค ์žˆ๋Š” ์ƒํƒœ๋กœ ๋œ ํ”„๋กœ์‹œ์ ธ๋„ ์—ญ์‹œ ์‚ญ์ œ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
syntax
DROP PROCEDURE procedure_name;
์˜ˆ1)
DROP PROCEDURE customer_list_proc;
์˜ˆ2)
IF EXISTS ( SELECT 1 FROM sysprocedure WHERE proc_name = โ€˜proc_nameโ€™ )
THEN
DROP PROCEDURE procedure_name;
END IF;
CREATE PROCEDURE โ€ฆโ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
creating function
resource ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ CREATE FUNCTION ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ• 
์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
ALTER FUNCTION ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
ํ•จ์ˆ˜์˜ ๋ชธ์ฒด๋Š” BEGIN๊ณผ END๋กœ ์ด๋ฃจ์–ด์ง„ compound statement ์ด๋ฉฐ ๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๋Š”
IN ์ด๊ธฐ ๋•Œ๋ฌธ์— IN, OUT, INOUT ๊ณผ ๊ฐ™์€ keyword๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค
return๋˜๋Š” ๋ฐ์ดํ„ฐํƒ€์ž…์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ RETURNS์ ˆ์ด ๊ผญ ํ•„์š”ํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋˜๋Œ๋ ค
์ฃผ๊ธฐ ์œ„ํ•œ RETURN๋ฌธ๋„ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค
Syntax
CREATE FUNCTION function_name ( [parameter][,โ€ฆโ€ฆ] )
RETURNS data_type
BEGIN
// Business Logic
RETURN (return_value);
END;
Compound statement
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
calling function
์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” non-aggregation ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์ด๋ฉด ์–ด๋””๋‚˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค
ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ทธ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์‹คํ–‰๊ถŒํ•œ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค
syntax
SELECT function_name ( [parameter][,โ€ฆโ€ฆ] ), โ€ฆโ€ฆ
FROM table_name;
์˜ˆ)
SELECT fullname ( emp_fname, emp_lname)
FROM employee;
SELECT fullname ( โ€˜Janeโ€™, โ€˜Smithโ€™ );
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
returning function result
RETURN๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์˜ˆ)
- creator
CREATE FUNCTION fullname ( v_fname CHAR(30), v_lname CHAR(30) )
RETURNS CHAR(61)
BEGIN
DECLARE name CHAR(61);
SET name = v_fname || โ€˜ โ€˜ || v_lname;
RETURN ( name );
END;
- caller
SELECT fullname (emp_fname, emp_lname)
FROM employee;
์ฐธ๊ณ 
INSERT โ€ฆ SELECT๋ฌธ์—์„œ ์‚ฌ์šฉ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 1๊ฑด์”ฉ ์ž…๋ ฅ์ด ์ˆ˜ํ–‰๋˜์–ด ์„ฑ๋Šฅ์— ์ง€๋Œ€
ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ EXTRACT ํ•  ๋•Œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
dropping function
ํ•จ์ˆ˜์˜ ์ƒ์„ฑ์ž๋‚˜ ํ˜น์€ dba ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ DROP FUNCTION ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ
์šฉํ•ด์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
syntax
DROP FUNCTION function_name;
์˜ˆ1)
DROP FUNCTION customer_list_proc;
์˜ˆ2)
IF EXISTS ( SELECT 1 FROM sysprocedure WHERE proc_name = โ€˜func_nameโ€™ )
THEN
DROP FUNCTION function_name;
END IF;
CREATE FUNCTION โ€ฆโ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
permission
dba๋‚˜ ํ˜น์€ resource ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋งŒ์ด ํ”„๋กœ์‹œ์ ธ๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
GRANT resource TO user_name;
ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ทธ ํ”„๋กœ์‹œ์ ธ๋‚˜ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์‹คํ–‰๊ถŒํ•œ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค
GRANT execute ON procedure_name TO user_name;
ํ”„๋กœ์‹œ์ ธ๋‚˜ ํ•จ์ˆ˜์˜ ์ƒ์„ฑ์ž ํ˜น์€ dba ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ์‹œ์ ธ๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜
์žˆ์Šต๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sp_helptext
syntax
sp_helptext procedure-name;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
tip
stored procedure ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์€ ํ•ด๋‹น stored procedure
์˜ ์ด๋ฆ„๊ณผ ์—ฐ๊ด€์„ฑ ์žˆ๊ฒŒ ๋ช…๋ช…ํ•ด์•ผ ๋””๋ฒ„๊น…์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
stored procedure์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น๋˜๋Š” ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๋™
์ผํ•˜๊ฒŒ ์„ ์–ธํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค.
stored procedure์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋Š” v_์™€ ๊ฐ™์€ ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ˆ„๊ฐ€ ์–ธ์ œ ๋ณด์•„๋„
์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์–ด์•ผ ์ฝ๊ธฐ์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
stored procedure๋Š” ๋งŒ๋“ค์–ด์ง€๋Š” ์‹œ์ ์— ๊ธฐ๋ณธ์ ์ธ ์˜ค๋ฅ˜ ์ ๊ฒ€๋งŒ ํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์˜ค๋ฅ˜๋Š” ์‹ค
ํ–‰์‹œ์— ์ ๊ฒ€๋˜์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑ ํ›„์— ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค.
T-SQL๊ณผ ํ˜ผ์šฉํ•˜์ง€ ๋ง๊ณ  SYBASE IQ์˜ ๊ธฐ๋ณธ SQL์ธ WatcomSQL์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ
ํ•˜์‹ญ์‹œ์˜ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต๊ตฌ๋ถˆ๋Šฅ๊ณผ ๊ฐ™์€ ๋งŒ์•ฝ์˜ ์‚ฌํƒœ์— ๋Œ€๋น„ํ•˜์—ฌ ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์˜ script๋ฅผ ๋”ฐ๋กœ
๋ณด๊ด€ํ•˜๋ฉฐ ๋•Œ์— ๋”ฐ๋ผ์„œ๋Š” ์ด๋Ÿฐ script์˜ version ๊ด€๋ฆฌ๋„ ์ง์ ‘ ํ•˜์‹ญ์‹œ์˜ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
System function
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์žํ•จ์ˆ˜
ASCII(string_expr) : string_expr ์ฒซ ๋ฒˆ์งธ๋ฌธ์ž์˜ ์•„์Šคํ‚ค ๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค
SELECT ASCII(โ€˜Aโ€™) -> 65
CHAR(integer_expr) : integer_expr์„ character๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค
SELECT CHAR(65) -> โ€˜Aโ€™
INSERTSTR(integer_expr, string_expr1, string_expr2) : string2_expr2๋ฅผstring_expr1
์˜ integer_expr๋ฒˆ ์งธ์— ๋ผ์›Œ ๋„ฃ์Šต๋‹ˆ๋‹ค
SELECT INSERTSTR(3,โ€™ABCFGโ€™,โ€™DEโ€™) -> โ€˜ABCDEFGโ€™
LCASE(string_expr) : string_expr๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค(lower์™€ ๋™์ผ)
LEFT(string_expr, integer_expr) : string_expr์˜ ์™ผ์ชฝ๋ถ€ํ„ฐ integer_expr ์ž๋ฆฌ๋งŒํผ ์„ ํƒ
ํ•ฉ๋‹ˆ๋‹ค
SELECT LEFT(โ€˜ABCDEFโ€™,3) -> โ€˜ABCโ€™
LENGTH(string_expr) : string_expr์˜ character์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
LOCATE(string_expr1, string_expr2) : string_expr2๊ฐ€ string_expr1์˜ ๋ช‡ ๋ฒˆ์งธ ์œ„์น˜ํ•˜
๋Š”๊ฐ€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์žํ•จ์ˆ˜
LTRIM(string_expr) : string_expr์˜ ์™ผ์ชฝ blank๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค
RIGHT(string_expr, integer_expr) : string_expr์˜ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ integer_expr ์ž๋ฆฌ ๋งŒํผ
์„ ํƒํ•ฉ๋‹ˆ๋‹ค
SELECT RIGHT(โ€˜ABCDEFโ€™,3) -> โ€˜DEFโ€™
RTRIM(string_expr) : string_expr์˜ ์˜ค๋ฅธ์ชฝ blank๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค
SIMILAR(string_expr1, string_expr2) : string_expr1๊ณผ string_expr2์˜ ์œ ์‚ฌ์„ฑ์ด ๋ช‡ %
์ธ๊ฐ€๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค
STRING(string1, [string2,โ€ฆโ€ฆ..string99]) : ๋‚˜์—ด๋œ string์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ( || ๊ฐ€๋Šฅ)
STUFF(string_expr1, start, length, string_expr2) : string_expr1์˜ start ๋ถ€ํ„ฐ length ๋งŒ
ํผ ๋ฒ„๋ฆฌ๊ณ  ๊ทธ์ž๋ฆฌ์— string_expr2๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค
SUBSTR(string_expr, start, length) : string_expr์—์„œ start ๋ฒˆ์งธ ๋ถ€ํ„ฐ length ๋งŒํผ ์ž˜๋ผ
์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์žํ•จ์ˆ˜
TRIM(string_expr) : string_expr์˜ ์ฒ˜์Œ๊ณผ ๋์˜ blank๋ฅผ ์ œ์™ธ์‹œํ‚ต๋‹ˆ๋‹ค
UCASE(string_expr) : string_expr๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค(UPPER์™€ ๋™์ผ)
๊ทธ ์™ธ โ€ฆโ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์ˆซ์žํ•จ์ˆ˜
ABS(numeric_expr) : ์ ˆ๋Œ€๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค
CEILING(numeric_expr) : ์†Œ์ˆ˜์ ์ด ์žˆ์„ ๋•Œ ๊ฐ€์žฅ ํฐ integer ๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค
FLOOR(numeric_expr) : ์†Œ์ˆ˜์ ์ด ์žˆ์„ ๋•Œ ๊ฐ€์žฅ ์ž‘์€ integer ๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค
MOD(dividend, divisor) : dividend๋ฅผ divisor๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค
POWER(numeric_expr1, numeric_expr2) : numeric_expr1์— numeric_expr2 ์ œ๊ณฑํ•œ ๊ฒฐ
๊ณผ๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค
RAND(integer_expr) : ์†Œ์ˆ˜์  ์ดํ•˜ 15์ž๋ฆฌ ๋‚œ์ˆ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค
ROUND(numeric_expr, integer_expr) : numeric_expr์„ integer_expr ์ž๋ฆฌ๋กœ ๋ฐ˜์˜ฌ๋ฆผ ํ•ฉ
๋‹ˆ๋‹ค
TRUNCATE(numeric_expr, integer_expr) : numeric_expr์—์„œ ์†Œ์ˆ˜์  integer_expr ์ž
๋ฆฌ ๋ฏธ๋งŒ์„ ์ž๋ฆ„
๊ทธ ์™ธ acos, asin, atan, logโ€ฆโ€ฆ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋‚ ์งœํ•จ์ˆ˜
DATE(expr) : expr์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋…„์›”์ผ๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
DATEFORMAT(date_expr, string_expr) : date_expr๋ฅผ string_expr ํ˜•์œผ๋กœ ๋ณ€ํ™˜
SELECT DATEFORMAT(โ€˜1999-01-01โ€™,โ€™mm dd, yyyyโ€™) -> 01 01, 1999
DAY(date_expr) : date_expr์˜ ๋‚ ์งœ๋ฅผ ์ˆ˜๋กœ ํ‘œํ˜„ (1~31) ํ•ฉ๋‹ˆ๋‹ค
DAYNAME(date_expr) : date_expr์˜ ์š”์ผ์„ ์˜๋ฌธ์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
DAYS(date_expr1, date_expr2) : date_expr1์—์„œ date_expr2 ๊นŒ์ง€์˜ ๋‚ ์งœ ์ˆ˜
DOW(date_expr) : date_expr์˜ ์š”์ผ์„ ์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. (1=Sunday, 2=Monday,
โ€ฆโ€ฆ7=Saturday)
MONTH(date_expr) : date_expr์˜ ์›”์„ ์ˆ˜๋กœ ํ‘œํ˜„(1~12)ํ•ฉ๋‹ˆ๋‹ค
MONTHNAME(date_expr) : date_expr์˜ ์›”์„ ์˜๋ฌธ์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
MONTHS(date_expr1, date_expr2) : date_expr1์—์„œ date_expr2 ๊นŒ์ง€์˜ ์ด ๊ฐœ์›” ์ˆ˜๋ฅผ
๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋‚ ์งœํ•จ์ˆ˜
QUARTER(date_expr) : date_expr์˜ ๋ถ„๊ธฐ๋ฅผ ์ˆ˜๋กœ ํ‘œํ˜„(1~4)ํ•ฉ๋‹ˆ๋‹ค
WEEKS(date_expr1, date_expr2) : date_expr1์—์„œ date_expr2๊นŒ์ง€์˜ ์ด ์ฃผ
YEAR(date_expr) : date_expr์˜ ๋…„๋„๋ฅผ ์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค
YEARS(date_expr1, date_expr2) : date_expr1์—์„œ date_expr2 ๊นŒ์ง€์˜ ์ด ๋…„
YMD(year_num, month_num, day_num) : year_num์˜ ๋…„๋„์— month_num์˜ ๊ฐœ์›”์„ ๋”
ํ•˜๊ณ  day_num์„ ๋”ํ•œ ์ผ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
NOW(*) : ํ˜„์žฌ ์ผ์ž์™€ ์‹œ๊ฐ„, ๋ถ„, ์ดˆ,Millisecond๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
TODAY(*) : ์‹œ๊ฐ„, ๋ถ„, ์ดˆ,Millisecond๋ฅผ ์ œ์™ธํ•œ ํ˜„์žฌ ์ผ์ž๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๋‚ ์งœํ•จ์ˆ˜
๋‚ ์งœ์—ฐ์‚ฐ
SELECT YEARS(DATE(โ€˜2001-05-24โ€™), 1) : 2002-05-24 00:00:00.000
SELECT MONTHS(DATE(โ€˜2001-05-24โ€™), 1) : 2001-06-24 00:00:00.000
SELECT DAYS(DATE(โ€˜2001-05-24โ€™), 1) : 2001-05-25 00:00:00.000
๋‚ ์งœ๋น„๊ต
SELECT YEARS(DATE(โ€˜2001-05-24โ€™), DATE(โ€˜2004-05-26โ€™)) : 3
SELECT MONTHS(DATE(โ€˜2001-05-24โ€™), DATE(โ€˜2001-06-26โ€™)) : 1
SELECT DAYS(DATE(โ€˜2001-05-24โ€™), DATE(โ€˜2001-05-26โ€™)) : 2
๋‚ ์งœ์ถ”์ถœ
SELECT YEAR( โ€˜2001-05-24โ€™) : 2001
SELECT MONTH( โ€˜2001-05-24โ€™) : 05
SELECT MONTHNAME( โ€˜2001-05-24โ€™) : May
SELECT DAY( โ€˜2001-05-24โ€™) : 24
SELECT DAYNAME( โ€˜2001-05-24โ€™) : Thursday
๊ธฐํƒ€
SELECT NOW() ํ˜น์€ SELECT TODAY() : ํ˜„์žฌ์ผ์„ ๊ตฌํ•จ
SELECT DATEFORMAT( DATE(โ€˜2001-05-24โ€™), โ€˜yyyy/mm/ddโ€™) : 2001/05/24
SELECT DATE( โ€˜2001-05-24โ€™) : string โ€˜2001-05-24โ€™๋ฅผ ๋‚ ์งœ 2001-05-24๋กœ ๋ณ€๊ฒฝ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์‹œ๊ฐ„ํ•จ์ˆ˜
HOUR(datetime_expr) : datetime_expr์˜ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(0~23)
HOURS(datetime_expr1, datetime_expr2) : datetime_expr1์—์„œ datetime_expr2๊นŒ์ง€
์˜ ์ด ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
MINUTE(datetime_expr) : datetime_expr์˜ ๋ถ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(0~59)
MINUTES(datetime_expr1, datetime_expr2) : datetime_expr1์—์„œ datetime_expr2๊นŒ
์ง€์˜ ์ด ๋ถ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
SECOND(datetime_expr) : datetime_expr์˜ ์ดˆ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(0~59)
SECONDS(datetime_expr1, datetime_expr2) : datetime_expr1์—์„œdatetime_expr2๊นŒ
์ง€์˜ ์ด ์ดˆ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐํƒ€ํ•จ์ˆ˜
NUMBER(*) : result set์˜ ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ผ๋ จ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค
ROWID(table_name) : ๊ฐ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋  ๋•Œ ์ž…๋ ฅ๋˜๋Š” ์ˆœ์„œ์— ์˜ํ•ด ๊ฐ๊ฐ์˜ ID
๊ฐ€ ์ผ๋ จ ๋ฒˆํ˜ธ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ฒˆํ˜ธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋œ ํ…Œ
์ด๋ธ”์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์—ฌ derived table(in-line view) ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
COALESCE(expr1, expr2) : ์—ฌ๊ธฐ์„œ expr1์€ null ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’ ์ด๊ฑฐ๋‚˜ ํ‘œํ˜„์‹
์ž…๋‹ˆ๋‹ค. expr2๋Š” null ๊ฐ’์„ ์ „ํ™˜์‹œ ๋Œ€์น˜ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค.
IFNULL(expr1, expr2 [,expr3]) : expr1์˜ ๊ฐ’์ด NULL ์ด๋ฉด expr2๋ฅผ, ์•„๋‹ˆ๋ฉด expr3์„ ๋ฐ˜ํ™˜
ํ•ฉ๋‹ˆ๋‹ค.
NULLIF(expr1, expr2) : expr1๊ณผ expr2๊ฐ€ ๊ฐ™์œผ๋ฉด NULL์„, ์•„๋‹ˆ๋ฉด expr1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์‹œ์Šคํ…œํ•จ์ˆ˜
CURRENT DATE : ํ˜„์žฌ์ผ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค.
CURRENT TIME : ํ˜„์žฌ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค.
CURRENT TIMESTAMP: ํ˜„์žฌ์ผ์ž์™€ ํ˜„์žฌ์‹œ๊ฐ„์„ ์กฐํ•ฉํ•˜์—ฌ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค.
CURRENT USER : ํ˜„์žฌ connection ๋˜์–ด ์žˆ๋Š” ์‚ฌ์šฉ์ž์˜ ID, ์ฆ‰ ์ž๊ธฐ์˜ ID ์ž…๋‹ˆ๋‹ค.
SQLCODE : ํ˜„์žฌ์˜ SQLCODE๊ฐ’ ์ž…๋‹ˆ๋‹ค.
SQLSTATE : ํ˜„์žฌ์˜ SQLSTATE๊ฐ’ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 26501๊ฐ’์€ โ€˜SQL statement errorโ€™
๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
CONNECTION_PROPERTY(expr) : expr์˜ connection property ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
expr ๊ฐ’์€ sa_conn_properties์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
DB_PROPERTY(expr) : expr์˜ db property ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. expr ๊ฐ’์€
sa_db_properties์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
PROPERTY(expr) : expr์˜ server property ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. expr ๊ฐ’์€
sa_eng_properties์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ํƒ€์ž…๋ณ€๊ฒฝํ•จ์ˆ˜
CAST (expr AS data_type) : expr์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ data_type์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค
SELECT CAST(โ€˜ABCDEโ€™ AS char(2)) : โ€˜ABโ€™
DATE(expr) : expr์„ DATE ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
SELECT DATE(20030301) : 2003-03-01
DATETIME(expr) : expr์„ DATETIME ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
SELECT DATETIME(โ€˜20030301โ€™) : 2003-03-01 00:00:00.000
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Creating table and index
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table
syntax
CREATE [ GLOBAL TEMPORARY ] TABLE [owner].table-name
(
column-definition [column-constraint],
column-definition [column-constraint],
. . . . . . . .
[table-constraint],
[table-constraint],
. . . . . . . .
)
[IN dbspace-name] // system์ด๋ฉด catalog ์˜์—ญ, ์‚ฌ์šฉ์ž์ œ
[ON COMMIT DELETE | PRESERVE ROWS] // global temporary table์ผ ๊ฒฝ์šฐ๋งŒ
column-definition : column-name data-type [ [not] null ]
column-constraint : unique, primary key, references, iq unique
table-constraint : unique, primary key, foreign key
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-column definition
column-name, data-type, property๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ property์—๋Š” NULL๊ณผ NOT NULL๋ฅผ ์„ 
ํƒํ•  ์ˆ˜ ์žˆ๊ณ  ์ƒ๋žตํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ข…๋ฅ˜์— ๋”ฐ๋ผ NULL๊ณผ NOT NULL์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ์— ๋ฐ˜๋“œ์‹œ ํ‘œํ˜„ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.
์˜ˆ)
CREATE TABLE employee
(
emp_id INT NOT NULL,
lname CHAR(30) NOT NULL,
fname CHAR(30) NOT NULL,
salary UNSIGNED INT NOT NULL,
dept_id INT NOT NULL
)
์ฐธ๊ณ 
NULL, NOT NULL ์ƒ๋žต์‹œ isql ์—์„œ๋Š” NOT NULL, dbisqlc์—์„œ๋Š” NULL์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ
์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-constraint
IQ UNIQUE
๋””ํดํŠธ ์ธ๋ฑ์Šค์ธ FP ์ธ๋ฑ์Šค์˜ ํƒ€์ž…์„ ์ปฌ๋Ÿผ์˜ ์นด๋””๋‚ ๋ฆฌํ‹ฐ์— ๋”ฐ๋ผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
์ƒ๋žตํ•˜๋ฉด Flat FP ์ธ๋ฑ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์นด๋””๋‚ ๋ฆฌํ‹ฐ๊ฐ€
255 ์ดํ•˜์ด๋ฉด FFP ์ธ๋ฑ์Šค๊ฐ€, 256~65536 ์ด๋ฉด FFFP ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด
๋ ‡๊ฒŒ IQ UNIQUE๋ฅผ ์ ์šฉํ•˜๋ฉด ๋” ์ข‹์€ ์••์ถ•๋ฅ ๊ณผ ๋” ์ข‹์€ ์‹คํ–‰ ๊ณ„ํš์„ ์‚ฐ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„
์™€์ค๋‹ˆ๋‹ค.
์ฐธ๊ณ 
SYBASE IQ์˜ cost-based ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ์ž‘์„ฑํ•  ๋•Œ catalog๋กœ ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๊ฐ€
์ง€ ์ •๋ณด๋ฅผ ์ทจํ•ฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ธ์ž์ค‘์˜ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๊ฐ ์ปฌ๋Ÿผ์˜ ์นด๋””๋‚ ๋ฆฌํ‹ฐ์ž…
๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์นด๋””๋‚ ๋ฆฌํ‹ฐ ์ •๋ณด๋Š” HG, LF ์ธ๋ฑ์Šค์™€ IQ UNIQUE์— ์˜ํ•ด์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-constraint
UNIQUE
unique HG ์ธ๋ฑ์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์˜ตํ‹ฐ๋งˆ์ด์ ธ์—๊ฒŒ ๋ณด๋‹ค ๋งŽ์€ ์ •๋ณด๋ฅผ
์ฃผ์–ด ์ข‹์€ ์‹คํ–‰๊ณ„ํš์„ ์ƒ์„ฑํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๊ด€๋ฆฌ์ƒ ๊ฐ€๋Šฅํ•˜๋ฉด CREATE
INDEX๋กœ ์‚ฌ์šฉํ•˜์‹œ๋Š” ํŽธ์ด ์ข‹์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.
PRIMARY KEY
unique HG ์ธ๋ฑ์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ 2๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค
์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์œ ์ผ์„ฑ ์ฒดํฌ์™€ ์˜ตํ‹ฐ๋งˆ์ด์ ธ์—๊ฒŒ ๋ณด๋‹ค ๋งŽ์€ ์ •๋ณด๋ฅผ ์ฃผ์–ด ์ข‹์€ ์‹คํ–‰๊ณ„
ํš์„ ์ƒ์„ฑํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ์กฐํ•ฉ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ ๊ฐ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋Š” ๋ณ„๋„๋กœ ๋‹ค์‹œ
๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋””๋ฉ˜์…˜ ํ…Œ์ด๋ธ”์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์กฐํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธ ์งˆ์˜ ์‹คํ–‰
์‹œ ์ธ๋ฑ์Šค๋กœ์„œ ๊ธฐ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, PK, FK์˜ ์„ ์–ธ์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ ์กฐํ•ฉ ์ธ๋ฑ์Šค๋กœ
์‚ฌ์šฉ๋œ ๋ชจ๋“  ์ปฌ๋Ÿผ์ด Equal ์งˆ์˜๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.
FOREIGN KEY
non-unique HG ์ธ๋ฑ์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ 2๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ
๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ FK๊ฐ€ ์ƒ์„ฑ๋˜์–ด์ง€๋ฉด ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹จ,
Disable_RI_Check ์˜ต์…˜์ด Off ์ผ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.
CHECK, ROLE, DEFAULT์™€ ๊ฐ™์€ CONSTRAINT๋Š” SYBASE IQ์—์„œ๋Š” ์ œ๊ณต๋˜์ง€ ์•Š์Šต
๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
referential integrity
์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ๊ทœ์น™์€ 12.5 ๋ฒ„์ „๋ถ€ํ„ฐ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. FK๋ฅผ ํฌํ•จํ•œ
ํ…Œ์ด๋ธ”์— INSERT/UPDATE๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด FK ๋ฐ์ดํ„ฐ๋ฅผ PK์™€ ๋น„๊ตํ•˜์—ฌ ์œ„๋ฐ˜๋˜๋ฉด
ROLLBACKํ•˜๊ณ  ์•„๋‹ˆ๋ฉฐ INSERT/UPDATE๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
PK๋ฅผ ํฌํ•จํ•œ ํ…Œ์ด๋ธ”์— DELETE๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ด ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” FK ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด
ROLLBACKํ•˜๋ฉฐ ์ด ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์œผ๋กœ์˜ UPDATE๋„ ์—ญ์‹œ ROLLBACK ํ•ฉ
๋‹ˆ๋‹ค. ๋‹จ, CASCADE DELETE์™€ FK ๊ฐ’์„ NULL๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํ–ฅํ›„ ์ œ๊ณต ์˜ˆ์ •์ž…๋‹ˆ
๋‹ค.
๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์— ALTER TABLE ADD FOREIGN KEY ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ
RI ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
LOAD TABLE ํ•  ๋•Œ RI ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๋ฉด ์˜ต์…˜์— ๋”ฐ๋ผ ROLLBACK ํ˜น์€ ์žฌ์ฒ˜๋ฆฌ ํŒŒ์ผ๋กœ
์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์žฌ์ฒ˜๋ฆฌ ํŒŒ์ผ๋กœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ธฐ๋Šฅ์€ 12.5 ์ด์ƒ์˜ ๊ธฐ๋Šฅ์ด๋ฉฐ ์ถ”ํ›„ ํ™•์ธ ๊ณผ์ •์„
๊ฑฐ์ณ ์žฌ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
BASE TABLE๋ฅผ ์ฐธ์กฐํ•˜๋Š” FK๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜
๋Š” FK ์—ญ์‹œ BASE TABLE์— ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ RI ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ 5% ์ •๋„์˜ ์˜ค๋ฒ„ํ—ค๋“œ
๊ฐ€ ์กด์žฌํ•˜๊ณ  M:M ์กฐ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ ์ด์ ๋„ ์žˆ์œผ๋ฏ€๋กœ ์ƒํ™ฉ์— ๋”ฐ
๋ผ ์ ์ ˆํžˆ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-data type
8
19
20
-9,223,372,036,854,775,808 ~
9,223,372,036,854,775,807
0 ~ 18,446,744,073,709,551,615
BIGINT
UNSIGNED BIGINT
25-32,768 ~ 32,767SMALLINT
130 ~ 255TINYINT
4
10
11
-2,147,483,648 ~ 2,147,483,647
0 ~ 42,942,967,294
INTEGER
UNSIGNED INT
256 + (n - 255)256 <= n <= 32K
VARCHAR (n)
CHARACTER VARYING (n)
n1 <= n <= 255
VARCHAR (n)
CHARACTER VARYING (n)
n1 <= n <= 255
CHAR (n)
CHARACTER (n)
Storage
(byte)
Max
Prec.
RangeData Type
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-data type
10, 1, NULLBIT
64K โ€“1LONG BINARY
32K โ€“ 11 <= n <= (32k โ€“ 1)VARBINARY (n)
2561 <= n <= 255BINARY (n)
2 to 69126-10^38 ~ 10^38 โ€“ 1
DECIMAL (p,s)
NUMERIC (p,s)
8152.22 (^308) ~ 1.79 (^308)DOUBLE
47Platform-dependentREAL
4 or 816Platform-dependentFLOAT (n)
Storage
(byte)
Max
Prec.
RangeData Type
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-data type
800:00:00.000000 ~ 23:59.59.999999TIME
8
0001/01/01 00:00:00.000000 ~
9999/12/31 23:59:59.999999
DATETIME
SMALLDATETIME
TIMESTAMP
40001/01/01 ~ 9999/12/31DATE
Storage
(byte)
Max
Prec.
RangeData Type
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-data type
๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์„ ํƒํ•  ๋•Œ INT ๊ณ„์—ด์„ ์ตœ์šฐ์„  ์ˆœ์œ„๋กœ ๊ณ ๋ คํ•  ๊ฒƒ์„ ์ ๊ทน
๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ( INT ๊ณ„์—ด : TINYINT, SMALLINT, INT, UNSIGNED INT, BININT,
UNSIGNED BIGINT )
CHAR/VARCHAR : VARCHAR, CHAR์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ๊ทธ ๋’ค์— ์›๋ž˜ ์ƒ์„ฑ์‹œ์— ๊ธฐ
์ˆ ํ•œ ํฌ๊ธฐ ๋งŒํผ์˜ ๊ณต๋ฐฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฑ„์›Œ์ ธ ๊ธฐ์กด ์‹œ์Šคํ…œ์˜ VARCHAR๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์ €์žฅ๊ณต
๊ฐ„ ์ ˆ์•ฝ์ด๋ผ๋Š” ์ด์ ์€ ์‚ฌ๋ผ์ง€๊ณ  ์˜คํžˆ๋ ค ๊ฐ€๋ณ€๊ธธ์ด์ค‘ ์‹ค ๋ฐ์ดํ„ฐ ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๋Š” ์ถ”๊ฐ€
1Byte๋ผ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 255 Byte์ดํ•˜๋Š” CHAR ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ
๋‹ค.
๋‚ ์งœ : ์ผ๋ฐ˜์ ์œผ๋กœ CHAR(8)๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š”๋ฐ DATE ํ˜•ํƒœ๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
์ด SYBASE IQ์˜ ํŠน์„ฑ์ƒ ์ธ๋ฑ์Šค์˜ ๊ฒ€์ƒ‰์†๋„๋ฅผ ํ–ฅ์ƒ ์‹œํ‚ค๋ฏ€๋กœ ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†์œผ๋ฉด
DATE๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ 12.5 ์ด์ƒ์—์„œ ์†Œ๊ฐœ๋œ DATE INDEX์˜ ์„ฑ๋Šฅ์€ ๊ทธ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ
ํƒ€์ž…์ด DATE ์ผ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ๋กœ์„œ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ํ‘œํ˜„์ด ํ•„์š”์—†๊ณ  ๋‚ 
์งœ์— ๋Œ€ํ•œ ํ‘œํ˜„๋งŒ ํ•„์š”ํ•˜๋‹ค๋ฉด 8Byte์˜ DATETIME ๋ณด๋‹ค๋Š” 4Byte์˜ DATE์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ
์ด ๊ณต๊ฐ„ ์ ˆ์•ฝ์ธก๋ฉด์—์„œ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์†Œ์ˆ˜์  ์ดํ•˜๊ฐ€ ์—†๋Š” ์ˆซ์ž ํƒ€์ž…์€ NUMERIC/DECIMAL๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค INT ํ˜•ํƒœ๋กœ ์„ 
์–ธํ•˜๋Š” ๊ฒƒ์ด ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰ ์†๋„ ๋ฐ ์กฐ์ธ ์†๋„๋ฅผ ํ–ฅ์ƒ ์‹œํ‚ต๋‹ˆ๋‹ค. ํŠนํžˆ ์กฐ์ธ ์ปฌ๋Ÿผ์€ TINYINT,
SMALLINT, UNSIGNED INT, UNSIGNED BIGINT๊ฐ€ ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-data type
NUMERIC(p,s) ์˜ precision : ์•„๋ž˜ ํ‘œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ™•์žฅ์„ฑ ๊ณ ๋ คํ•ด ์ถฉ๋ถ„ํ•œ precision ์ •์˜
ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. DECIMAL์€ NUMERIC๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ฐธ๊ณ 
๋Œ€์šฉ๋Ÿ‰์„ ์ทจ๊ธ‰ํ•˜๋Š” ํŒฉํŠธ์™€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์—์„œ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ํฌ๊ธฐ ์„ ํƒ์ด ๋””์Šคํฌ ์ ˆ๊ฐ์—
์ง€๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด 1,000๋งŒ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ํŒฉํŠธ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ์„ INT์—์„œ TINYINT ๋‚˜
SMALLINT๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?
4 + 2 * (int(((prec โ€“ scale) + 3) / 4) + int((scale + 3) / 4) + 1)19 ์ด์ƒ
810 โ€“ 18
45 โ€“ 9
21 โ€“ 4
Length(byte)Precision
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-data type
IQ UNIQUE ์ ์šฉ ์ตœ์šฐ์„  ์ˆœ์œ„4Date๋‚ ์งœ
Precision์€ 4,9,18 rule์— ์ ์šฉ๋จNumeric(p,s)์†Œ์ˆ˜์  ์ดํ•˜ ์ˆซ์ž
์†Œ์ˆ˜์  ์ดํ•˜ ์—†๋Š” ์ˆ˜Tinyint, Smallint,
Int, unsigned int,
Unsigned bigint
๊ธฐํƒ€ ์ˆซ์ž ์นผ๋Ÿผ
Y=1/N=01Tinyint์—ฌ๋ถ€
์—ฐ๋ น, ๊ฐ€์กฑ์ˆ˜ ๋“ฑ1Tinyint์ˆซ์ž 255์ดํ•˜
Int : 999,999,999 ์ง€์›4
2,1
Unsigned Int,
Smallint,tinyint
์ผ์ˆ˜/๊ฑด์ˆ˜
๋‹จ, ์ˆซ์žํ˜•ํƒœ๋กœ ๋œ ์ฝ”๋“œ๋Š” int ํ˜•์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ€๋Šฅํ•˜
๋ฉด ์ฝ”๋“œ ๊ฐ’์€ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
Char์ฝ”๋“œ
Index์‚ฌ์šฉ ์•ˆํ•จ256์ด์ƒVarcharLong String
4
8
1~30
4
Bytes
์ด์œจ, 0% ~ 999%Numeric(9,6)Ratio
๊ธˆ์•ก, ์ด์ž, ์„ธ๊ธˆ ๋“ฑ ์†Œ์ˆ˜์  ์ดํ•˜ ์—†๋Š” ์ˆ˜
Bigint : 999,999,999,999,999,999 ์ง€์›
[Unsigned]BigintAmount
30 Bytes๊นŒ์ง€ Concatenate ๊ถŒ์žฅ
0 ~ 42์–ต
๋น„๊ณ 
Unsigned intSystemKey (Dummy Sequence)
CharBusiness Key Concatenation
DataTypeColumn ๋ฒ”์ฃผ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create domain
์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” built-in ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ทผ๊ฐ„์œผ๋กœ ํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ๋งŒ๋“  ๋‹จ์ˆœํ•œ ํ˜•
ํƒœ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ผ์น˜์„ฑ ํ–ฅ์ƒ ๋ฐ ํŽธ์ด์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
syntax
create domain domain-name data-type [ [ not ] null ];
์˜ˆ)
create domain street_address char(35) ;
create table twocol ( id int, street street_address );
ํ•ด๋‹นํ•˜๋Š” ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•œ object ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ํ•œํ•ด์„œ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
syntax
drop domain domain-name;
์˜ˆ)
drop domain street_address;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table in system
์˜ˆ)
CREATE TABLE employee
(
emp_id INT NOT NULL,
lname CHAR(30) NOT NULL,
fname CHAR(30) NOT NULL,
salary UNSIGNED INT NOT NULL,
dept_id INT NOT NULL
) IN SYSTEM
์ฐธ๊ณ 
์œ„์˜ ํ…Œ์ด๋ธ”์€ IQ Main Store ์˜์—ญ์— ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  Catalog Store์— ์ƒ์„ฑ๋˜๋ฉฐ 2GB์˜
ํŒŒ์ผํฌ๊ธฐ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•œ๊ณ„ ๊ฐ’์— ๋„๋‹ฌํ•˜๋ฉด IQ Server๊ฐ€ down๋˜๊ฑฐ๋‚˜
hang ์ƒํƒœ๊ฐ€ ๋˜๋Š”๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ถ€์ž‘์šฉ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.SYBASE IQ์—์„œ ASA๋Š” ๋‹จ์ˆœํžˆ
Catalog๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋“ค์˜ ์‚ฌ์šฉ์„ ๊ธˆํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table
์˜ˆ)
CREATE TABLE employee
(
emp_id INT NOT NULL,
lname CHAR(30) NOT NULL IQ UNIQUE(20000),
fname CHAR(30) NOT NULL IQ UNIQUE(20000),
salary UNSIGNED INT NOT NULL IQ UNIQUE(20000),
dept_id INT NOT NULL IQ UNIQUE(50),
PRIMARY KEY (emp_id),
FOREIGN KEY (dept_id) REFERENCES dept(dept_id)
)
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create table-partition
12.5 ์ด์ƒ ๋ฒ„์ ผ์—์„œ๋Š” ๋งค์šฐ ํฐ ํŒฉํŠธ ํ…Œ์ด๋ธ”์„ UNION ALL VIEW๋ฅผ ํ†ตํ•ด ํŒŒํ‹ฐ์…˜ ์ฒ˜๋ฆฌํ•˜์—ฌ
์งˆ์˜ ๋ฐ ๋กœ๋”ฉ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ด ๋•Œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋Š”
DBA๊ฐ€ ๋ชจ๋‘ ์ˆ˜๋™์œผ๋กœ ์ž‘์—…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์งˆ์˜๋Š” ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๋ทฐ๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•˜๊ณ  ์งˆ์˜ ์‹คํ–‰์‹œ ๊ฐ ํŒŒํ‹ฐ์…˜๋ณ„๋กœ
๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํŒŒํ‹ฐ์…˜๋œ ํŒฉํŠธ ํ…Œ์ด๋ธ”๋“ค์€ ๋””๋ฉ˜์…˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ FK ์„ ์–ธ์ด ์„ ํ–‰๋˜
์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋งค์šฐ ์ปค๋‹ค๋ž€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋กœ๋”ฉ ์ž‘์—…์‹œ ๋ฐœ์ƒํ•˜๋˜ HG ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ์†Œ์‹œ
ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
t1
t2
t3
PartitionedBig Fact Table
CREATE VIEW bigtable AS
SELECT * FROM t1
UNION ALL
SELECT * FROM t2
UNION ALL
SELECT * FROM t3
UNION ALL VIEW
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
alter table
syntax
ALTER TABLE [owner.]table-name
{ADD column-definition [column-constraint]โ€ฆ
| ADD table-constraint
| MODIFY column-name [not] null
| DROP column-name
| DROP unique
| DROP primary key
| DROP foreign key
| RENAME new-table-name
| RENAME old-column-name TO new-column-name}
์˜ˆ)
ALTER TABLE employee
ADD OFFICE CHAR(20) NOT NULL; // ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ vs. ์—†์„ ๋•Œ
ALTER TABLE employee
MODIFY office NULL; // ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ vs. ์—†์„ ๋•Œ
ALTER TABLE employee
DROP office;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
drop table
syntax
DROP TABLE [owner.]table-name
์ด ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ด€๋˜์–ด์ง„ JOIN INDEX๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๋จผ์ € DROP ํ•˜๊ณ  ๊ทธ ํ›„์— DROP
TABLE์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์•ก์„ธ์Šค ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
User โ€˜xxx_userโ€™ has the row in โ€˜xxx_tableโ€™ locked
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
comment
ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ทฐ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค object์— ๋Œ€ํ•ด ์‹œ์Šคํ…œ ์นด๋‹ค๋กœ๊ทธ๋‚ด์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ €
์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค
syntax
COMMENT ON
{ COLUMN [owner.]table-name.column-name
| FOREIGN KEY [owner.]table-name.role-name
| INDEX [owner.]index-name
| PROCEDURE [owner.]procedure-name
| TABLE [owner.]table-name
โ€ฆ.
IS comment;
์˜ˆ)
COMMENT ON TABLE employee is โ€œEmployee Informationโ€;
COMMENT ON TABLE employee is null;
์ฐธ๊ณ 
์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ์ •๋ณด๋Š” sp_iqtable์ด๋‚˜ sp_iqcolumn๋“ฑ๊ณผ ๊ฐ™์€ stored procedure ๊ฒฐ๊ณผ์˜
remarks ์ปฌ๋Ÿผ์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sp_iqtable
syntax
sp_iqtable table-name;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sp_iqcolumn
syntax
sp_iqcolumn table-name;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sp_iqtablesize
syntax
sp_iqtablesize โ€˜[owner.]table-nameโ€™;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create view
์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€๋Š” ์•Š์œผ๋ฉด์„œ ๋งˆ์น˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.
๋ทฐ๊ฐ€ ์ฐธ์กฐ๋˜๋Š” ์‹œ์ ์— ์นด๋‹ค๋กœ๊ทธ๋กœ ๋ถ€ํ„ฐ ๋ทฐ์˜ ์ •์˜๋ฅผ ์ฝ์–ด ๋ทฐ๋ฅผ ํ˜•์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์ด ์ฐธ
์กฐํ•ฉ๋‹ˆ๋‹ค.
syntax
CREATE VIEW view-name [ (column-name,โ€ฆ) ]
AS select-statement-without-order-by
[ with check option ];
์˜ˆ)
CREATE VIEW emp_dept
AS
SELECT emp_lname,
emp_fname,
dept_name
FROM employee e, department d
WHERE e.dept_id = d.dept_id;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
drop view
syntax
DROP VIEW view-name;
์˜ˆ)
DROP VIEW emp_dept;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sp_iqview
syntax
sp_iqview view-name;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create index
syntax
CREATE [ UNIQUE ] [index-type] INDEX index-name
ON [owner.]table-name(column-name) [notify interger]
index-type : CMP, HG, HNG, LF, WD, DATE, TIME, DTTM
UNIQUE๋ฅผ ์ƒ๋žตํ•˜๋ฉด NON_UNIQUEํ•œ ์ธ๋ฑ์Šค๊ฐ€, index-type์„ ์ƒ๋žตํ•˜๋ฉด HG ์ธ๋ฑ์Šค๊ฐ€
์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
FP์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•œ ๊ฐ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์ ์žฌ ์ „/ํ›„์— ๋งŒ๋“ค์–ด ์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ ๋ฐ์ดํ„ฐ ์ ์žฌ
์ „์— ์ธ๋ฑ์Šค๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ณ  ๊ทธ ํ›„์— ๋กœ๋”ฉํ•˜๋Š” ํŽธ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•œ ํ›„์— ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“œ๋Š”
๊ฒƒ ๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค.
๋ณตํ•ฉ ์ธ๋ฑ์Šค๋Š” UNIQUE/NON_UNIQUE HG ์ธ๋ฑ์Šค์ธ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ํ˜„์žฌ ๋ฒ„์ „๊นŒ์ง€
๋Š” ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฉฐ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋กœ HG ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๊ทธ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑ
ํ•˜๋Š” ๊ฐœ๋ณ„ ์ปฌ๋Ÿผ ๋˜ํ•œ ์ธ๋ฑ์Šค ์ƒ์„ฑ ์กฐ๊ฑด์— ๋งž์ถฐ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
FP ์ธ๋ฑ์Šค๋Š” CREATE INDEX ๋ฅผ ํ†ตํ•ด์„œ๋Š” ๊ฒฐ์ฝ” ๋งŒ๋“ค ์ˆ˜ ์—†๊ณ  CREATE TABLE๋ฅผ ํ†ตํ•ด์„œ
๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค
PRIMARY KEY constraint์™€ UNIQUE constraint์— ์˜ํ•ด์„œ UNIQUE HG ์ธ๋ฑ์Šค๊ฐ€ ์ž
๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ง€๋ฉฐ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ธ๋ฑ์Šค๋Š” DROP INDEX์— ์˜ํ•ด ์‚ญ์ œ๋  ์ˆ˜ ์—†๊ณ 
ALTER TABLE์„ ํ†ตํ•ด์„œ๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create index-LF index
์นด๋””๋‚ ๋ฆฌํ‹ฐ๊ฐ€ ๋น„๊ต์  ๋‚ฎ์€(1500 ์ดํ•˜) ์ปฌ๋Ÿผ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ธ๋ฑ์Šค๋กœ ์กฐ์ธ, ๊ทธ๋ฃน, ๋ฒ”์œ„์™€
๊ฐ™์€ ๋ชจ๋“  ์—ฐ์‚ฐ์— ๊ฐ€์žฅ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ธ๋ฑ์Šค ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ Bit-Map์œผ๋กœ ์ €์žฅ
ํ•˜๋ฉฐ ์ฒ˜๋ฆฌ ๋˜ํ•œ Bit Processing์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ HG ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ๊ฐ€์žฅ ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„
๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
๊ธฐ์ˆ ์ ์œผ๋กœ ์นด๋””๋‚ ๋ฆฌํ‹ฐ 10,000๊นŒ์ง€ ์ง€์› ๊ฐ€๋Šฅ ํ•˜๋‚˜ 1,500 ์ดํ•˜์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋ฉฐ
์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ์ดํ„ฐ์˜ 70%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create index-HG index
์นด๋””๋‚ ๋ฆฌํ‹ฐ๊ฐ€ 1,500 ์ด์ƒ์ด๊ณ  ์กฐ์ธ, ๊ทธ๋ฃน, ๋ฒ”์œ„ ๊ทธ๋ฆฌ๊ณ  ํŠน์ •์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰
ํ•˜๋Š” ์ปฌ๋Ÿผ์— ์ด์šฉํ•˜๋Š” ์ธ๋ฑ์Šค๋กœ B-Tree๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธ๋ฑ์Šค ์ž…๋‹ˆ๋‹ค.
์œ ์ผ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” UNIQUE HG๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ
์ดํ„ฐ์˜ 120%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ์ ์žฌ ์ž‘์—…์‹œ์— ๋งŽ์€ ๋ถ€๋‹ด์„ ์ฃผ๋Š” ์ธ๋ฑ์Šค์ด๋ฏ€๋กœ
ํ•œ ํ…Œ์ด๋ธ”์— ๋„ˆ๋ฌด ๋งŽ์€ HG ์ธ๋ฑ์Šค๊ฐ€ ๋งŒ๋“ค์–ด ์ง€์ง€ ์•Š๋„๋ก ์ฃผ์˜ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฒฝํ—˜์ƒ ํ…Œ์ด๋ธ”๋‹น
4~5๊ฐœ์˜ HG ์ธ๋ฑ์Šค๊ฐ€ ์ ๋‹นํ•ฉ๋‹ˆ๋‹ค.
CREATE TABLE์˜ UNIQUE๋‚˜ PRIMARY KEY constraint์— ์˜ํ•ด ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create index-HNG index
SUM(), AVG()์™€ ๊ฐ™์€ aggregate ํ•จ์ˆ˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ์ˆ˜์น˜ ์ปฌ๋Ÿผ์ด๋‚˜ ๋ฒ”์œ„ ์งˆ์˜์— ์‚ฌ์šฉ๋˜
๋Š” ์ปฌ๋Ÿผ์— ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ฑ์Šค๋กœ ์นด๋””๋‚ ๋ฆฌํ‹ฐ์™€ ๋ฌด๊ด€ํ•˜๋ฉฐ ์„ ํ˜ธํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ INT ๊ณ„์—ด
์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ DATE ๊ณ„์—ด์˜ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๋ฒ”์œ„ ์งˆ์˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด HNG๋ณด๋‹ค๋Š” DATE ์ธ๋ฑ
์Šค์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฏธ LF ํ˜น์€ HG์™€ ๊ฐ™์€ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ปฌ๋Ÿผ์ด๋ผ๊ณ  ํ•ด๋„ ๊ทธ ์ปฌ๋Ÿผ์ด ์œ„์™€ ๊ฐ™์€ ์กฐ๊ฑด์—
๋งŒ์กฑ๋˜๋ฉด ์ƒ์„ฑํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ์ดํ„ฐ์˜ 70%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create index-CMP, WD index
CMP ์ธ๋ฑ์Šค๋Š” ์นด๋””๋‚ ๋ฆฌํ‹ฐ์™€ ๋ฌด๊ด€ํ•˜๊ณ  ์ปฌ๋Ÿผ ๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค๋กœ ๋™
์ผํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ฐ„์˜ ๋น„๊ต๋ฅผ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ์ธ๋ฑ์‹ฑ ๊ธฐ๋ฒ•์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ์ดํ„ฐ
์˜ 70%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
WD ์ธ๋ฑ์Šค๋Š” ์นด๋””๋‚ ๋ฆฌํ‹ฐ์™€ ๋ฌด๊ด€ํ•˜๋ฉฐ ์ฃผ์†Œ๋‚˜ ์„ค๋ช…๊ณผ ๊ฐ™์ด long varchar ์ปฌ๋Ÿผ์— ํŠน์ • ๋ฌธ
์ž๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์‹ฑ ๊ธฐ๋ฒ•์œผ๋กœ ์ปฌ๋Ÿผ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ ์–ด๋ ค
์šด ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ์„ ์œ„ํ•œ ์ธ๋ฑ์Šค ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ์ดํ„ฐ์˜ 120%๋กœ
์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
create index-DATE, TIME, DTTM
DATE ๊ณ„์—ด์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋Ÿผ์„ ์œ„ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ๋ฑ์Šค๋กœ ๋‚ ์งœ๊ด€๋ จ ํ•จ์ˆ˜
์ ์šฉ์‹œ ๊ธฐ์กด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ
์Šต๋‹ˆ๋‹ค. ( DATE ๊ณ„์—ด : DATE, DATETIME, TIME )
์นด๋””๋‚ ๋ฆฌํ‹ฐ์™€ ๋ฌด๊ด€ํ•˜๋ฉฐ UNIQUE๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†๊ณ  ์˜ค์ง DATE ๊ด€๋ จ๋œ ์ปฌ๋Ÿผ์—๋งŒ ์ ์šฉ ๊ฐ€
๋Šฅํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๋ฒ”์œ„ ์งˆ์˜, datepart ์งˆ์˜์— ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฒ”์œ„ ์งˆ์˜์—์„œ๋Š”HNG ์ธ๋ฑ์Šค ๋ณด
๋‹ค ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์ด๋‚˜ EQUALITY ์งˆ์˜๋Š” LF/HG ๋ณด๋‹ค ๋А๋ฆฝ๋‹ˆ๋‹ค.
์ง€์›๋˜๋Š” ์งˆ์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
datepart ํ•จ์ˆ˜: Month, Day, Week, Quarter, Yearโ€ฆ
๋ฒ”์œ„ : >, >=, <, <=, <>, =, between
์ง€์›๋˜์ง€ ์•Š๋Š” ์งˆ์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Aggregate ํ•จ์ˆ˜ : sum, avg, min, max
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
begin parallel IQ
syntax
BEGIN PARALLEL IQ
create-index-statement-list;
END PARALLEL IQ
SYBASE IQ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ์†๋„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•œ ํ›„ ์ธ๋ฑ
์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์†๋„๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ ์žฌ ์ „์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ
๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ํ•„์š”์„ฑ์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”
๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด create-index-statement-list์— ๊ธฐ์ˆ ๋œ ๋ช…๋ น์–ด๋Š” ๊ธฐ
๋ณธ์ ์œผ๋กœ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ช…๋ น์–ด๋Š” create-index-statement-list ์ „์ฒด์— ๋Œ€ํ•œ ์–ด๋–ค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋กค๋ฐฑ๋˜๋Š”
ATOMIC ํ˜•ํƒœ๋กœ ๋™์ž‘๋˜๋ฉฐ ํ•œ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ง๋ ฌ๋กœ ์ฒ˜๋ฆฌ
๋ฉ๋‹ˆ๋‹ค.
์ฐธ๊ณ 
create-index-statement-list์˜ ์ ์ • ์ˆ˜์น˜๋Š” CPU์ˆ˜ โ€“ 1 ์ด๋ฉฐ ์ด ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰์ค‘์ธ ๋™์•ˆ
์— ๋ฐœ์ƒํ•˜๋Š” ์–ด๋–ค DDL๋„ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
drop index
syntax
DROP INDEX [[owner.]table-name.] index-name
FP ์ธ๋ฑ์Šค์™€ PRIMARY KEY, UNIQUE constraint์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์ง„ HG ์ธ๋ฑ
์Šค๋Š” ์ด ๋ช…๋ น์–ด์— ์˜ํ•ด ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ฐธ๊ณ 
CREATE INDEX์— ์˜ํ•ด ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ์นด๋””๋‚ ๋ฆฌํ‹ฐ ์ •๋ณด๊ฐ€ ์นด๋‹ค๋กœ๊ทธ์— ์ €์žฅ๋˜์–ด ์‹คํ–‰๊ณ„ํš
์ž‘์„ฑ์‹œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ HG์™€ LF ์ธ๋ฑ์Šค๋งŒ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์นด๋””๋‚ ๋ฆฌํ‹ฐ ์ •๋ณด๋Š”
sp_iqcolumn์˜ cardinality ์ปฌ๋Ÿผ์— ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sp_iqindex
syntax
sp_iqindex table-name;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
sp_iqindexsize
syntax
sp_iqindexsize index-name;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Loading and Extracting data
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load
DW ๋Š” OLTP์‹œ์Šคํ…œ๊ณผ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๋ฐฉ๋ฒ•์ด ์‹ค์‹œ๊ฐ„์ด ์•„๋‹ˆ๋ผ ์—…๋ฌด์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ผ
์ • ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๊ณ  bulk๋กœ ์ ์žฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. SYBASE IQ๋„ ๋ฐ์ดํ„ฐ๋ฅผ bulk๋กœ ์ 
์žฌํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋ณธ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ ์žฌ๋ฅผ ์œ„ํ•œ ์›์‹œ ๋ฐ์ดํ„ฐ๋Š” ์ผ์ •ํ•œ ํฌ๋งท์„ ๊ฐ–์ถ”๊ณ  flat file ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋ฉฐ ํฌ๋งทํ˜•ํƒœ์— ๋”ฐ
๋ผ binary file๊ณผ ascii file๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
ํ•œ ํ…Œ์ด๋ธ”์— ์ ์žฌ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ์„ ๋•Œ ์–ด๋–ค ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋„ ๊ทธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ถŒ
ํ•œ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ฝ๊ธฐ๋Š” snapshot versioning ์ด๋ผ๋Š” ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ์–ด๋–ค ์‚ฌ์šฉ์ž๋„ ๊ฐ€
๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ ์žฌ ๋Œ€์ƒ์ด ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์กด์žฌ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ
๋ฅผ replace ํ•˜๋Š” UPSERT ๊ธฐ๋Šฅ์€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
LOAD ๋ช…๋ น์–ด๋Š” ์˜ต์…˜์— ๋”ฐ๋ผ ์ ์žฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘๋‹ค ์ž…๋ ฅ๋˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ์ž…๋ ฅ๋˜
์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ LOAD ๋ช…๋ น์–ด๋Š” ์˜ต์…˜์— ๋”ฐ๋ผ ์ ์žฌ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ์™€ ์˜ค๋ฅ˜ ์›์ธ์— ๋Œ€ํ•ด ํŒŒ์ผ
๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
์ž„์‹œ ํ…Œ์ด๋ธ”๋„ ์ผ๋ฐ˜ ๋‹ค๋ฅธ ์˜๊ตฌ์ ์ธ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์ ์žฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load
syntax
LOAD TABLE [owner.] table-name
[ ( column-name [column-spec] | filler (filler-type) ) ]
FROM โ€˜file-nameโ€™[, . . . . . . ] // ์›์‹œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์ด๋ฆ„
[ FORMAT โ€˜asciiโ€™ | โ€˜binaryโ€™ ] // ์›์‹œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ํฌ๋งท
[ DELIMITED BY โ€˜stringโ€™ ] // ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ ๊ตฌ๋ถ„์ž
[ QUOTES OFF ] // off
[ ESCAPES OFF ] // off
[ WITH CHECKPOINT ON | OFF ] // checkpoint ์‹คํ–‰์—ฌ๋ถ€
[ ROW DELIMITED BY โ€˜stringโ€™ ] // row ๋ถ„๋ฆฌ ๊ตฌ๋ถ„์ž
[ LIMIT number-of-rows ] // ์ด ์ž…๋ ฅ ๊ฑด์ˆ˜ ์ œํ•œ
[ NOTIFY number-of-rows ] // message display ๊ฑด์ˆ˜
[ ON FILE ERROR rollback | finish | continue ] // multi-file์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ
[ SKIP number-of-row ] // ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ช‡ ๊ฑด์„ ์ƒ๋žต
[ START ROW ID number-of-row ] // ๋ช‡ ๋ฒˆ์งธ row ๋ถ€ํ„ฐ ์ž…๋ ฅ
[ BLOCK FACTOR number | block size number ] // block๋‹น row ์ˆ˜
[ IGNORE CONSTRAINT constraint-type [,โ€ฆ]] // ์ œ์•ฝ์‚ฌํ•ญ ์œ„๋ฐ˜ ํšŸ์ˆ˜ ์ •์˜
[ MESSAGE LOG โ€˜file-nameโ€™ // ์˜ค๋ฅ˜ ๊ธฐ๋ก ํŒŒ์ผ ์ •์˜
ROW LOG โ€˜file-nameโ€™ // ์˜ค๋ฅ˜๋ฐ์ดํ„ฐ ๊ธฐ๋ก ํŒŒ์ผ ์ •์˜
[ONLY LOG log-what, [โ€ฆ]] // ์˜ค๋ฅ˜ ์ •์˜
[ LOG DELIMITED BY โ€˜stringโ€™ ] // ์˜ค๋ฅ˜ ๋ฐ์ดํ„ฐ ํ•„๋“œ ๋ถ„๋ฆฌ์ž
. . . . . .
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-column spec
FROM์ ˆ์— ๊ธฐ์ˆ ํ•œ ์†Œ์ŠคํŒŒ์ผ์˜ ํ•„๋“œ ํฌ๋งท๊ณผ LOAD TABLE์ ˆ์—์„œ ๊ธฐ์ˆ ํ•œ ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ์˜
๋งคํ•‘ ์ •๋ณด๋ฅผ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.
column-name : ์ ์žฌ๋ฅผ ์œ„ํ•œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„
ascii(numer-of-byte) : number-of-byte ํฌ๊ธฐ์˜ ํ•„๋“œ ๊ฐ’์„ ๋Œ€์ƒ ์ปฌ๋Ÿผ๊ณผ ๋งคํ•‘
โ€˜field delimiterโ€™ : field delimiter ์ „ ๊นŒ์ง€์˜ ๊ฐ’์„ ๋Œ€์ƒ ์ปฌ๋Ÿผ๊ณผ ๋งคํ•‘
date(format) : format ํ˜•ํƒœ์˜ ํ•„๋“œ ๊ฐ’์„ ๋Œ€์ƒ ์ปฌ๋Ÿผ์˜ DATE ํƒ€์ž…๊ณผ ๋งคํ•‘
nulls ( blanks | zeros | โ€˜literalโ€™ [,โ€™literalโ€™] . . . ) : ๊ด„ํ˜ธ์•ˆ์˜ ๋‚ด์šฉ์„ NULL๋กœ ๋ณ€ํ™˜
filler(number-of-byte) : number-of-byte ๋งŒํผ์˜ ๊ธธ์ด๋ฅผ ๊ฑด๋„ˆ ๋œ€
์˜ˆ)
LOAD TABLE sales
( l_orderkey โ€˜|โ€™,
l_quantity ascii(4) null(blanks, zeros, โ€˜9999โ€™),
filler(1),
l_shipdate date(โ€˜YYYY/MM/DDโ€™) null(blanks, zeros, โ€™0000/00/00โ€™) )
FROM . . . . . . .
0001|100002003/10/15
0002|200000000/00/00
0003|999902003/10/15
0004|100002003/10/11
โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ.
file format
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-from clause
์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†Œ์ŠคํŒŒ์ผ์„ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•˜๋‚˜์˜ FROM์ ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ์—ฌ๋Ÿฌ
๊ฐœ์˜ ์†Œ์ŠคํŒŒ์ผ์„ ํ•˜๋‚˜์˜ LOAD ๋ช…๋ น์–ด๋กœ ์ ์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†Œ์ŠคํŒŒ์ผ์„ ํ†ตํ•ด ์ ์žฌ์ž‘์—… ์ˆ˜ํ–‰ํ•  ๋•Œ ์—ฐ๊ด€์žˆ๋Š” ์˜ต์…˜์œผ๋กœ๋Š” ON FILE
ERROR ๋ผ๊ณ  ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ์ ์žฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด
๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ๊ธฐ์ˆ ํ•ด ์ฃผ๋Š” ์˜ต์…˜ ์ž…๋‹ˆ๋‹ค. ๋‹จ, ์—ฌ๊ธฐ์„œ์˜ ์˜ค๋ฅ˜๋Š” ํ•ด๋‹น๋˜๋Š” ํŒŒ์ผ์ด ์—†๋‹ค๊ฑฐ๋‚˜
์ฝ๊ธฐ ๊ถŒํ•œ์ด ์—†์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋งŒ์„ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค.
ON FILE ERROR ROLLBACK : ๋””ํดํŠธ ์˜ต์…˜์œผ๋กœ์„œ ์ ์žฌ ์ „์ฒด๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค
ON FILE ERROR FINISH : ํ˜„์žฌ๊นŒ์ง€ ์ˆ˜ํ–‰๋˜์–ด์ง„ ํŒŒ์ผ๊นŒ์ง€๋งŒ ์ ์žฌ์ž‘์—…์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค
ON FILE ERROR CONTINUE : ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋›ฐ์–ด ์ž‘์—…์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค
์˜ˆ)
LOAD TABLE sales
(
l_orderkey โ€˜|โ€™,
l_quantity ascii(4) null(blanks, zeros, โ€˜9999โ€™),
filler(1),
l_shipdate date(โ€˜YYYY/MM/DDโ€™) null(blanks, zeros, โ€™0000/00/00โ€™)
)
FROM โ€˜/data/sales1.datโ€™,โ€™/data/sales2.datโ€™,โ€™/data/sales3.datโ€™
ON FILE ERROR FINISH
. . . . . .
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-delimited by option
column-spec์— ์ปฌ๋Ÿผ๋‹น ๊ทธ ์ปฌ๋Ÿผ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ„๋ฆฌ์ž๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๊ณ  ์ ์žฌํ•˜๋Š”
ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค
์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž์˜ ๋””ํดํŠธ๋Š” ์ฝค๋งˆ์ด๋ฉฐ row delimited by ์˜ต์…˜๊ณผ ๋ณ‘ํ–‰ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ ๋’ค์—๋„ ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ ๋’ค์— ๋ฐ˜๋“œ์‹œ ํ–‰ ๋ถ„๋ฆฌ
์ž๊ฐ€ ํ‘œํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŠน์ˆ˜๋ฌธ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค
tab : x09, newline : x0a, carriage return : x0d, null : x00
์˜ˆ)
LOAD TABLE sales
(
l_orderkey,
l_quantity,
l_shipdate
)
FROM โ€˜/data/sales.datโ€™
DELIMITED BY โ€˜|โ€™
ROW DELIMITED BY โ€˜nโ€™
. . . . . .
sales.dat
0001|1000|20031015|
0002|2000|20031012|
0003|9999|20031015|
0004|1000|20031011|
โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-row delimited by option
column-spec์— ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ„๋ฆฌ์ž๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๊ณ  ์ ์žฌํ•˜๋Š” ํ…Œ
์ด๋ธ”์˜ ํ–‰ ๋ถ„๋ฆฌ์ž๋ฅผ ์˜ต์…˜์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค
12.4.2 ๋ถ€ํ„ฐ ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  newline ์œผ๋กœ ํ–‰ ๋ถ„๋ฆฌ์ž๋ฅผ ์„ ์–ธํ•ด์•ผ๋งŒ ๋ณ‘๋ ฌ์ ์žฌ๊ฐ€ ๊ฐ€๋Šฅ
ํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ ๋’ค์—๋„ ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ ๋’ค์— ๋ฐ˜๋“œ์‹œ ํ–‰ ๋ถ„๋ฆฌ
์ž๊ฐ€ ํ‘œํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŠน์ˆ˜๋ฌธ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค
tab : x09, newline : x0a, carriage return : x0d, null : x00
์˜ˆ)
LOAD TABLE sales
(
l_orderkey,
l_quantity,
l_shipdate
)
FROM โ€˜/data/sales.datโ€™
DELIMITED BY โ€˜|โ€™
ROW DELIMITED BY โ€˜nโ€™
. . . . . .
sales.dat
0001|1000|20031015|
0002|2000|20031012|
0003|9999|20031015|
0004|1000|20031011|
โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-ignore constraint option
์ง€์ •๋œ constraint์— ๋Œ€ํ•œ ์œ„๋ฐ˜์ด ์ง€์ •๋œ ํšŸ์ˆ˜๋ณด๋‹ค ๋งŽ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋กค๋ฐฑ๋˜๋ฉฐ ์œ„๋ฐ˜๋œ ๋ฐ์ด
ํ„ฐ๋Š” ์ ์žฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ฐ constraint์— ๋Œ€ํ•œ ์œ„๋ฐ˜ ํšŸ์ˆ˜๋ฅผ 0์œผ๋กœ ํ•œ๋‹ค๋ฉด ์œ„๋ฐ˜๋œ ๋ณด
๋“  ๋ฐ์ดํ„ฐ๋Š” ์ ์žฌ๋˜์ง€ ์•Š๊ณ  ๋กค๋ฐฑ๋„ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ MESSAGE LOG ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ์ œ์•ฝ์‚ฌํ•ญ์ด ์œ„๋ฐ˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๋กœ
๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋Œ€์ƒ์ด ๋˜๋Š” constraint ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
UNIQUE : ์œ ์ผ์„ฑ์ด ์œ„๋ฐ˜๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€
NULL : NOT NULL ์ปฌ๋Ÿผ์— NULL ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€
FOREIGN KEY : ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„๋ฐ˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€
DATA VALUE : ์„ ์–ธ๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ์œ„๋ฐ˜๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€
ALL : UNIQUE, NULL, FOREIGN KEY, DATA VALUE์˜ ์กฐํ•ฉ
์˜ˆ)
LOAD TABLE sales
โ€ฆโ€ฆโ€ฆโ€ฆ.
โ€ฆโ€ฆโ€ฆโ€ฆ.
IGNORE CONSTRAINT NULL 50, UNIQUE 100, ALL 125
// 51๋ฒˆ ์ด์ƒ์˜ NULL ๊ฐ’ ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ 101๋ฒˆ ์ด์ƒ์˜ UNIQUE ๊ฐ’ ์œ„๋ฐ˜์ด ๋ฐœ์ƒ
// ํ•˜๊ฑฐ๋‚˜ 1๋ฒˆ ์ด์ƒ์˜ FOREIGN KEY ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์กฐํ•ฉํ•ด์„œ ์ด 126๋ฒˆ ์ด์ƒ์˜
// ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๋ฉด ๋กค๋ฐฑ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-message log option
์ง€์ •๋œ ์œ„๋ฐ˜ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•˜๋Š” ํŒŒ์ผ๊ณผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํŒŒ์ผ์„ ๊ธฐ์ˆ 
ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ถ”ํ›„์— ์ด ๋‘๊ฐœ์˜ ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
MESSAGE LOG์— ๊ธฐ์ˆ ํ•˜๋Š” ํŒŒ์ผ์—๋Š” ์œ„๋ฐ˜ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๋ฉฐ ROW LOG์— ๊ธฐ์ˆ ํ•˜๋Š” ํŒŒ
์ผ์—๋Š” ํ•„๋“œ ๋ถ„๋ฆฌ์ž๋กœ ๊ตฌ๋ถ„๋œ ์˜ค๋ฅ˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ ๋ถ„๋ฆฌ์ž๋Š” ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์ฝค๋งˆ
๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  LOG DELIMITED BY ์˜ต์…˜์— ์˜ํ•ด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š” ์œ„๋ฐ˜ ์‚ฌํ•ญ์€ NULL, UNIQUE, FOREIGN KEY, DATA VALUE, ALL์ด ์žˆ
์œผ๋ฉฐ ๊ทธ ๋‚ด์šฉ์€ IGNORE CONSTRAINT์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” MESSAGE LOG๋Š” SYBASE IQ์˜ ๊ธฐ๋ณธ์ ์ธ IQ message log ์™€๋Š” ๋ณ„๋„์˜
ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
MESSAGE LOG๋‚˜ ROW LOG๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ์ƒˆ๋กœ ๊ธฐ๋ก๋˜๋Š” ์ •๋ณด๋Š” ํ˜„์žฌ ๊ธฐ๋ก๋œ ์ •
๋ณด์— ์ถ”๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
ONLY LOG๊ฐ€ ์ƒ๋žต๋œ๋‹ค๋ฉด ์ ์žฌ ์‹œ์ž‘์‹œ๊ฐ„๊ณผ ์ข…๋ฃŒ์‹œ๊ฐ„๋งŒ์ด MESSAGE LOG ํŒŒ์ผ์— ๊ธฐ๋ก
๋ฉ๋‹ˆ๋‹ค.
์ ์žฌ ์ž‘์—…์ด ๋๋‚˜๋ฉด IQ message log ํŒŒ์ผ์— constraint ์œ„๋ฐ˜ ํšŸ์ˆ˜์™€ skip๋œ ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜
์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-message log option
์˜ˆ)
LOAD TABLE sales
โ€ฆโ€ฆโ€ฆโ€ฆ
IGNORE CONSTRAINT UNIQUE 200, NULL 50
MESSAGE LOG โ€˜msg.logโ€™
ROW LOG โ€˜row.logโ€™
ONlY LOG UNIQUE, NULL, DATA VALUE
LOG DELIMITED BY โ€˜|โ€™
msg.log
2002-07-15 15:00:23 Load Table sales: Integrity Constraint Violations
1267 DATA VALUE 4
3126 UNIQUE 1
3216 NULL 3
2002-07-15 16:00:10 LOAD TABLE sales Completed
row.log
2002-07-15 15:00:23 Load Table sales: Integrity Constraint Violations
1267 |Mary Smith|56|M|ABCDEFG|1943/03/31|MC|
3216 |John Jones|NULL|NULL|S|1945/02/28|NULL
โ€ฆ
2002-07-15 16:00:10 LOAD TABLE sales Completed
rowid, type, column number
rowid, delimiter, data
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-etc
WITH CHECKPOINT : ์ด ์˜ต์…˜์€ ์ ์žฌ๊ฐ€ ๋๋‚œ ํ›„์— CHECKPOINT์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ
๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ on์„ ๋ฐ”๊ฟ€ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ ์žฌ ํ›„์— ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์กด์žฌํ•˜๋˜ ๋ฐ์ดํ„ฐ๋“ค
์ด ๋ชจ๋‘ ๋””์Šคํฌ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
ESCAPSES : ์ ์žฌ ๋Œ€์ƒ ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ์ค‘์— ์—ญ ์Šฌ๋ž˜์‹œ ๋’ค์— ๋‚˜์˜ค๋Š” ๋ฌธ์ž๋ฅผ ํŠน์ˆ˜ ๋ฌธ์ž๋กœ
์ธ์ •ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ASA ์—์„œ๋Š” on/off ์„ค์ •์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ SYBASE IQ
์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ off๋กœ๋งŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ƒ๋žตํ•˜๋ฉด ์—ญ ์Šฌ๋ž˜์‹œ ๋’ค์— ๋‚˜์˜ค๋Š” ๋ฌธ์ž
๋ฅผ ํŠน์ˆ˜๋ฌธ์ž๋กœ ์ธ์‹ํ•˜๋Š” on์œผ๋กœ ์„ค์ •๋˜๋ฉฐ SYBASE IQ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค
QUOTES : ์ ์žฌ ๋Œ€์ƒ ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ์ค‘์— quote(โ€˜) ๋ฌธ์ž๋ฅผ ๋ฐ์ดํ„ฐ๋กœ ์ธ์ •ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •
ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ASA ์—์„œ๋Š” on/off ์„ค์ •์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ SYBASE IQ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ off๋กœ๋งŒ
์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ƒ๋žตํ•˜๋ฉด quote ๋ฌธ์ž๋ฅผ ๋ฐ์ดํ„ฐ ์ž์ฒด๋กœ ์ธ์ •ํ•˜์ง€ ์•Š๋Š” on์œผ๋กœ
์„ค์ •๋˜๋ฉฐ SYBASE IQ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
LIMIT : ์ž…๋ ฅํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ตœ๋Œ€ ๊ฑด์ˆ˜๋ฅผ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ 0์œผ๋กœ ์ž…๋ ฅ๊ฑด์ˆ˜์— ๋Œ€
ํ•œ ์ œ์•ฝ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
NOTIFY : ๋ช‡ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์žฌ๋  ๋•Œ ํ•œ๋ฒˆ์”ฉ ๋ฉ”์‹œ์ง€๋ฅผ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ธฐ
์ˆ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ 100,000 ๊ฑด ์ด๋ฉฐ NOTIFY_MODULUS ๋ผ๋Š” ์˜ต์…˜ ๊ฐ’์ด ๊ทธ๋ ‡๊ฒŒ ์„ค์ •
๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-etc
SKIP : ๋ช‡ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ ์žฌ์ž‘์—…์„ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ธฐ์ˆ ํ•˜๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ 0์œผ๋กœ ๋ชจ
๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•ฉ๋‹ˆ๋‹ค.
START ROW ID : partial with insert ์ฒ˜๋Ÿผ ํŠน์ • ๋ช‡ ๊ฐœ ์ปฌ๋Ÿผ์˜ ์ ์žฌ ์ž‘์—…์„ ์ฒซ ๋ฒˆ์งธ ๋กœ์šฐ๋ถ€
ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ด LOAD ์ผ ๋ฟ ๊ธฐ๋ณธ ์›๋ฆฌ๋Š” INSERT์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
FILE FORMAT : BINARY์™€ ASCII๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜
๋ก BINARY ํ˜•ํƒœ์˜ ํŒŒ์ผ์ด ๋น ๋ฅธ ์ ์žฌ ์„ฑ๋Šฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋˜ํ•œ BINARY ํŒŒ์ผ ํ˜•ํƒœ์˜ ๋ฐ์ด
ํ„ฐ๋ฅผ ์ ์žฌ์‹œ ๊ฐ column-spec ๋’ค์— WITH NULL BYTE ๋ผ๋Š” ์˜ต์…˜์„ ์ฃผ์–ด NULL ๊ฐ’์— ๋Œ€ํ•œ
์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ์™ธ : ๋ฉ”๋‰ด์–ผ์„ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-mode
SYBASE IQ์˜ ์ ์žฌ ์ž‘์—…์€ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” single thread ๋ชจ๋“œ์ด๊ณ 
๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” parallel thread ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ SYBASE IQ๋Š” ๊ฐ ์ปฌ๋Ÿผ๋‹น 1๊ฐœ์˜
์“ฐ๋ ˆ๋“œ์™€ ๊ฐ ์ธ๋ฑ์Šค๋‹น 1๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” parallel thread ๋ชจ๋“œ์—์„œ
์ ์žฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ single thread ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ ‡๊ฒŒ ๋™์ž‘์‹œ์—๋Š” ์ ์žฌ
์ž‘์—…์˜ ์†๋„๊ฐ€ ๋งค์šฐ ๋–จ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” single thread ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•˜๋Š” ์›์ธ์„
ํŒŒ์•…ํ•˜์—ฌ ๊ทธ ์›์ธ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ •์ƒ์ ์ธ ์ž‘์—…์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ๊ฐ€ ์ ์žฌ ์ž‘์—…์„ single thread ๋ชจ๋“œ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ฒฝ์šฐ๋Š” ์“ฐ๋ ˆ๋“œ์˜ ๋ถ€
์กฑ, partial with load ์ž‘์—…, ROW DELIMITED BY ์˜ต์…˜์˜ ์ƒ๋žต์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-tip
๋ฐ์ดํ„ฐ ์ ์žฌ ์ž‘์—… ์ „์— ํ…Œ์ด๋ธ”์— ํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์‹œ๊ณ  ํ•œ ํ…Œ์ด๋ธ”์— HG ์ธ๋ฑ
์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋‹ค๋ฉด ํŒŒํ‹ฐ์…˜์„ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”.
ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ˆ˜์™€ ์ ์žฌ ๋Œ€์ƒ ํŒŒ์ผ์˜ ํ•„๋“œ ์ˆ˜๋ฅผ ์ผ์น˜ํ•˜์‹ญ์‹œ์˜ค.
๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋Œ€์ƒ ํŒŒ์ผ์˜ ํฌ๋งท์€ ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜๋ก BINARY ๋กœ ํ•˜์‹œ๊ณ 
ASCII๋กœ ํ•˜์‹ค ๊ฒฝ์šฐ์—๋„ ๊ณ ์ •๊ธธ์ด ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
๋งŒ์•ฝ ๊ณ ์ •๊ธธ์ด ํ˜•ํƒœ๋งŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ณ ์ • ๊ธธ์ด์™€ ๋ณ€๋™ ๊ธธ์ด๋“ฑ์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€
๋ง๊ณ  ์ฐจ๋ผ๋ฆฌ ํ•„๋“œ์˜ ๋ถ„๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€๋™๊ธธ์ด ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ด ๋•Œ์— ๋งˆ์ง€๋ง‰ ํ•„
๋“œ์—๋„ ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค.
๊ฐ ์ปฌ๋Ÿผ์˜ column-spec์— NULLS( ) ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ NULL ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ๊ธฐ์ˆ 
ํ•˜์‹ญ์‹œ์˜ค. ์ผ์ข…์˜ ๋ฐ์ดํ„ฐ ํด๋ฆฐ์ง• ๋กœ์ง์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ ์žฌ์ค‘ ์ž˜๋ชป ๊ธฐ์ˆ ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ถ”ํ›„ ์ ๊ฒ€์„ ์œ„ํ•ด IGNORE CONSTRAINT ์˜ต์…˜๊ณผ
MESSAGE LOG ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
์ ์žฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด message log ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ค์–ด๊ฐ€๊ณ  ์žˆ
๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค.
์ ์žฌ ์ž‘์—…์€ ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ ์€ ์‹œ๊ฐ„์„ ๊ณ ๋ คํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์—
๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ ์žฌ ํ›„์— ๊ฐ ์‚ฌ์šฉ์ž์˜ ์žฌ์ ‘์†์„ ์ง€์‹œํ•˜์‹ญ์‹œ์˜ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-message file
100,000 ๊ฑด๋‹น ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•˜๋ฉฐ
notify option ์œผ๋กœ ์กฐ์ ˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค
SALES_FACT ํ…Œ์ด๋ธ”์— 5,000,000๊ฑด์„ 103์ดˆ์—
์ ์žฌ/์™„๋ฃŒ ํ•˜์˜€๋‹ค๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค
18 ๊ฐœ ์ปฌ๋Ÿผ์˜ SALES_FACT ๋ผ๋Š” ํ…Œ์ด๋ธ”์—
full width ์ ์žฌ๊ฐ€ ์‹œ์ž‘๋˜๋ฉฐ parallel thread
mode๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์ฐธ๊ณ  105Byte)
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-message file
18 ๊ฐœ ์ปฌ๋Ÿผ์˜ SALES_FACT ๋ผ๋Š” ํ…Œ์ด๋ธ”์—
partial width ์ ์žฌ๊ฐ€ ์‹œ์ž‘๋˜๋ฉฐ single thread
mode๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์ฐธ๊ณ  105Byte)
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
load-big picture
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
extract
sam ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”๋กœ ์ ์žฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๋ฐ˜๋Œ€๋กœ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ sam ํŒŒ์ผ ํ˜•ํƒœ
๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•˜๋ฉฐ UNLOAD, EXPORT๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š”
๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ์˜ ์ด๋™ ๋ฐ ๋ฐฑ์—… ์šฉ๋„๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
SYBASE IQ์˜ EXTRACT ๋ฐฉ๋ฒ•์€ ๋ฌด์ฒ™ ๊ฐ„๋‹จํ•˜๋ฉฐ ๋งŽ์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์—ฌ
๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ์„ ์ •ํ•œ ํ›„์— SELECT๋ฌธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋˜ ํ˜น์€ ํด๋ผ
์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์ง€๋˜ SELECT๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์˜ต์…˜์—์„œ ์ •ํ•œ ํ˜•ํƒœ์™€ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ 
UNLOAD๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ถœ๋ ฅ์€ SYBASE IQ์˜ ์„œ๋ฒ„ ๋ชจ๋“ˆ์ด ์กด์žฌํ•˜๋Š” ๊ณณ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
SELECT๋ฌธ ๋’ค์— ์˜ต์…˜์„ ์ทจ์†Œ ์‹œํ‚ค๊ฑฐ๋‚˜ ์ž„์‹œ๋กœ ์˜ต์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜
๋ชจ๋“  ์งˆ์˜๋Š” ์„ ์–ธ๋œ ํŒŒ์ผ๋กœ ์ถœ๋ ฅ๋˜๋ฏ€๋กœ ํŠน๋ณ„ํ•œ ๋ชฉ์ ์ด ์—†๋‹ค๋ฉด temporary option ์‚ฌ์šฉํ•˜
๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
์ถœ๋ ฅ๋˜๋Š” ํŒŒ์ผ์˜ ํ˜•ํƒœ๋Š” ASCII, BINARY, BINARY/SWAP๋กœ ์˜ต์…˜ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜
์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด ์žˆ๋Š” SELECT๋ฌธ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
syntax
SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜โ€ฆ./โ€ฆ./โ€ฆ.โ€™; // EXTRACT ์„ค์ •
SET TEMPORARY OPTION . . . . . . ;
SET TEMPORARY OPTION . . . . . . ;
select-statement;
SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜โ€™; // EXTRACT ํ•ด์ œ
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
extract-option
Temp_Extract_NameN
UNLOAD ํ•˜๋Š” ํŒŒ์ผ์— ๋Œ€ํ•œ ์ด๋ฆ„๊ณผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ N์€ 1,2,3,4,5,6,7,8์ด๋ฉฐ
Temp_Extract_SizeN ์˜ต์…˜๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ํŒŒ์ผ์‹œ์Šคํ…œ์— ์ˆ˜์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฐ๊ณผ๋„
์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋‚˜๋ˆ ์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋‚˜๋ˆ ์„œ ์ €์žฅํ•  ๋•Œ
์—๋„ ํŒŒ์ผ๋ณ„๋กœ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ง๋ ฌ๋กœ ์ง„ํ–‰๋จ์„ ์ƒ๊ธฐํ•˜๋ฉฐ ๋งŒ์•ฝ ๋ณ‘๋ ฌ๋กœ ๋ฐ์ด
ํ„ฐ๋ฅผ UNLOAD ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด WHERE ์ ˆ์˜ ์กฐ๊ฑด์„ ๋ฐ”๊พผ ์งˆ์˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ Temp_Extract_Name1์ด ์„ค์ •๋˜๋ฉด ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ LOAD, DELETE, INSERT ๋ช…๋ น
์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ ์„ค์ •๋œ ํŒŒ์ผ์ด๋ฆ„์„ ํ•ด์ œ ์‹œํ‚ฌ ๋•Œ๋Š” ์ด ์˜ต์…˜์˜ ๊ฐ’์„
โ€˜โ€™(empty string) ๋กœ ๋ฐ”๊พธ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํŒŒ์ผ์€ ์ผ๋ฐ˜ ์œ ๋‹‰์Šค ์ผ๋ฐ˜ ํŒŒ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ
FIFO ํŒŒ์ผ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
Temp_Extract_SizeN
UNLOAD ํ•˜๋Š” ๋Œ€์ƒ ํŒŒ์ผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ KB ๋‹จ์œ„๋กœ ์ง€์ •ํ•˜๋ฉฐ ๊ทธ ํฌ๊ธฐ๋Š” AIX & HP-UX์ธ
๊ฒฝ์šฐ 64GB, Sun Solaris์ธ ๊ฒฝ์šฐ 512GB, Window์ธ ๊ฒฝ์šฐ 128GB ๊นŒ์ง€ ์ž…๋‹ˆ๋‹ค.
Temp_Extract_Column_Delimiter
์ถœ๋ ฅ๋˜๋Š” ๊ฐ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๊ตฌ๋ถ„์ž๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ๋””ํดํŠธ๋Š” ์ฝค๋งˆ(,) ์ž…๋‹ˆ๋‹ค
Temp_Extract_ Row_Delimiter
์ถœ๋ ฅ๋˜๋Š” ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ตฌ๋ถ„์ž๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ๋””ํดํŠธ๋Š” carriage return(n) ์ž…๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
extract-option
Temp_Extract_ Binary
์„ค์ • ๊ฐ’์ด on์ผ ๊ฒฝ์šฐ ์ถœ๋ ฅ๋˜๋Š” ํŒŒ์ผ์˜ ํ˜•ํƒœ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
Temp_Extract_ Swap
์„ค์ • ๊ฐ’์ด on์ผ ๊ฒฝ์šฐ ์ถœ๋ ฅ๋˜๋Š” ํŒŒ์ผ์˜ ํ˜•ํƒœ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ swap ํ˜•ํƒœ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์„ 
ํ–‰๋˜์–ด์•ผ ํ•  ์กฐ๊ฑด์œผ๋กœ Temp_Extract_Binary์ด on ์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Temp_Extract_ Null_As_Zero
ASCII ํ˜•ํƒœ๋กœ UNLOADํ•  ๋•Œ NULL ๊ฐ’์— ๋Œ€ํ•œ ํ‘œํ˜„์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ on์œผ
๋กœ ์†”์ •๋˜๋ฉด NULL ๊ฐ’์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆซ์ž ํƒ€์ž…์€ 0์œผ๋กœ ๋ฌธ์ž ํƒ€์ž…์ด๋‚˜ ๋‚ ์งœ ๊ณ„์—ด์˜ ํƒ€
์ž…์€ empty string (โ€˜โ€™)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ off์ผ ๊ฒฝ์šฐ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๊ด€๊ณ„์—†์ด string โ€˜NULLโ€™
๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ off ์ด๋ฉฐ ๋งŒ์•ฝ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  UNLOAD ํ•œ ํŒŒ์ผ์„ ๋‹ค์‹œ
LOADํ•  ๋•Œ ์ฃผ์˜ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
Temp_Extract_Append
์„ค์ • ๊ฐ’์ด on์ผ ๊ฒฝ์šฐ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ์˜ ๋’ค์— ์ฒจ์‚ญํ•˜์—ฌ UNLOAD๊ฐ€ ๋˜๋ฉฐ ๋งŒ์•ฝ ํŒŒ์ผ์ด
์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒˆ๋กœ์šด ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด ์ง‘๋‹ˆ๋‹ค.
Temp_Extract_Quote
Temp_Extract_Quotes, Temp_Extract_Quotes_All๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ ์ด ๋‘๊ฐ€์ง€ ์˜ต์…˜์ค‘
์— ํ•˜๋‚˜๋ผ๋„ on์œผ๋กœ ์„ค์ •๋˜๋ฉด ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ์–‘์ชฝ์„ ์—ฌ๊ธฐ์„œ ์„ค์ •ํ•œ ๊ธฐํ˜ธ๋กœ ๊ฐ์‹ธ์ค๋‹ˆ๋‹ค.
๋‹จ, UNLOAD ํŒŒ์ผ ํ˜•ํƒœ๊ฐ€ ASCII ์ผ ๊ฒฝ์šฐ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
extract-option
Temp_Extract_Quotes
์ด ์˜ต์…˜์ด on์œผ๋กœ ์„ค์ •๋œ๋‹ค๋ฉด UNLOAD ํ•  ๋•Œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ค‘ ๋ฌธ์ž๋‚˜ ๋‚ ์งœ ํ˜•ํƒœ์˜ ๋ฐ์ด
ํ„ฐ๋ฅผ ๊ฐ ํ•„๋“œ์˜ ์‹œ์ž‘๊ณผ ๋ ์–‘์ชฝ์— Temp_Extract_Quote์—์„œ ์„ค์ •ํ•œ ๊ธฐํ˜ธ๋กœ ๊ฐ์‹ธ์ค๋‹ˆ๋‹ค.
Temp_Extract_Quote ์˜ต์…˜์„ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด โ€˜ ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
Temp_Extract_Quote_All
์ด ์˜ต์…˜์ด on์œผ๋กœ ์„ค์ •๋œ๋‹ค๋ฉด UNLOAD ํ•  ๋•Œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ค‘ ๋ฌธ์ž๋‚˜ ๋‚ ์งœ ํ˜•ํƒœ์˜ ๋ฐ์ด
ํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ ํ•„๋“œ์˜ ์‹œ์ž‘๊ณผ ๋ ์–‘์ชฝ์— Temp_Extract_Quote์—์„œ ์„ค
์ •ํ•œ ๊ธฐํ˜ธ๋กœ ๊ฐ์‹ธ์ค๋‹ˆ๋‹ค. Temp_Extract_Quote ์˜ต์…˜์„ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด โ€˜ ๊ฐ€ ์‚ฌ
์šฉ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
extract-example
์˜ˆ)
SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜/data/orders1.datโ€™;
SET TEMPORARY OPTION Temp_Extract_Name2 = โ€˜/data/orders2.datโ€™;
SET TEMPORARY OPTION Temp_Extract_Name3 = โ€˜โ€™; // ์ค‘์š”
SET TEMPORARY OPTION Temp_Extract_Size1 = โ€˜1024000โ€™;
SET TEMPORARY OPTION Temp_Extract_Size2 = โ€˜1024000โ€™;
SET TEMPORARY OPTION Temp_Extract_Delimiter = โ€˜|โ€™ ;
SET TEMPORARY OPTION Temp_Extract_Row_Delimiter = โ€˜nโ€™ ;
SET TEMPORARY OPTION Temp_Extract_Null_As_Zero = โ€˜onโ€™ ;
SELECT * FROM orders ;
SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜โ€™; // extract disable
orders ํ…Œ์ด๋ธ”์„ 1,024,000KB ํฌ๊ธฐ์˜ ๋‘๊ฐœ์˜ ํŒŒ์ผ์— ๋‚˜๋ˆ„์–ด์„œ UNLOAD ํ•˜๋Š”๋ฐ ํŒŒ์ผ์€ |
๋กœ ํ•„๋“œ ๋ถ„๋ฆฌ ๋˜์—ˆ์œผ๋ฉฐ ๋ ˆ์ฝ”๋“œ ๋ถ„๋ฆฌ์ž๋Š” n ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์ค‘ ์ˆซ์ž ์ปฌ๋Ÿผ์˜
NULL ๊ฐ’์€ 0์œผ๋กœ, ๋ฌธ์ž/๋‚ ์งœ ์ปฌ๋Ÿผ์˜ NULL ๊ฐ’์€ โ€˜โ€™(empty string) ์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ๋งŒ์•ฝ TEMPORARYTEMPORARY ์˜ต์…˜์ด์˜ต์…˜์ด ์ƒ๋žต๋˜์—ˆ๋‹ค๋ฉด์ƒ๋žต๋˜์—ˆ๋‹ค๋ฉด ์–ด๋–ค์–ด๋–ค ์ผ์ด์ผ์ด ์ผ์–ด๋‚ ๊นŒ์š”์ผ์–ด๋‚ ๊นŒ์š”??
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Transaction, Versioning and Etc.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
transaction
๋‹จ์ผ ์‚ฌ๊ฑด์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐœ์ƒ๋˜์–ด์ง„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๊ฒŒ ๋ฐ˜
์˜์‹œ์ผœ์ค๋‹ˆ๋‹ค. ์˜ค์ง COMMIT ๋˜๊ฑฐ๋‚˜ ROLLBACK ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
autocommit mode (unchained mode)
๊ฐœ๋ณ„์ ์ธ INSERT, UPDATE, DELETE, SELECT๋ฅผ ๊ฐœ๋ณ„ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๊ฐœ์˜ statement๋ฅผ ํ•œ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์œผ๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ BEGIN TRAN๊ณผ
COMMIT(ํ˜น์€ ROLLBACK)์œผ๋กœ ํŠธ๋žœ์žญ์…˜์˜ ์ฒ˜์Œ๊ณผ ๋์„ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ASE์™€ isql์˜ ๊ธฐ๋ณธ์ ์ธ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋“œ ์ž…๋‹ˆ๋‹ค.
manual commit mode (chained mode)
์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ ํ˜น์€ ๋˜ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋จ๊ณผ ๋™์‹œ์— BEGIN TRAN์ด ์•”์‹œ์ ์œผ๋กœ
์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์˜ COMMIT์„ ํ†ตํ•ด ์ข…๋ฃŒ๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ANSI ํ‘œ์ค€, SYBASE IQ, ASA, dbisql์˜ ๋””ํดํŠธ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋“œ ์ž…๋‹ˆ๋‹ค.
Chained ๋ผ๋Š” ์˜ต์…˜์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜ ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
SET [TEMPORARY] OPTION Chained = โ€˜offโ€™; // unchained mode
SET [TEMPORARY] OPTION Chained = โ€˜onโ€™; // chained mode
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
transaction command
BEGIN TRANSACTION : unchained mode์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ์ •์˜ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์˜
์‹œ์ž‘์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
BEGIN TRAN[SACTION] [transaction-name];
COMMIT : ํŠธ๋žœ์žญ์…˜์˜ ์ข…๋ฃŒ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ทจ์†Œ ์—†์ด ์˜์›ํžˆ ๋ฐ˜
์˜ํ•ฉ๋‹ˆ๋‹ค
COMMIT [WORK];
ROLLBACK : ํŠธ๋žœ์žญ์…˜์˜ ์ข…๋ฃŒ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ ์ด์ „์˜ ๋ฐœ์ƒ๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค
ROLLBACK [WORK];
SAVEPOINT : ํ˜„์žฌ์˜ ํŠธ๋žœ์žญ์…˜์— breakpoint๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค
SAVEPOINT [savepoint-name];
ROLLBACK TO SAVEPOINT : SAVEPOINT ์ดํ›„์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.
ROLLBACK TO SAVEPOINT [savepoint-name];
CHECKPOINT : ๋ฉ”๋ชจ๋ฆฌ๋‚ด์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋””์Šคํฌ์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
CHECKPOINT;
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์—ฐ๊ด€๋œ option
Auto_Commit : Interactive SQL ํ˜น์€ dbisql๊ณผ ๊ฐ™์€ SYBASE IQ์˜ ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ์—
์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ๋ชจ๋“  ๋ช…๋ น ์‹คํ–‰ ํ›„์— ๋ฌต์‹œ์ ์œผ๋กœ COMMIT์˜ ์‹คํ–‰์—ฌ๋ถ€๋ฅผ ์กฐ์ ˆํ•ฉ
๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ off๋กœ ์ž๋™์œผ๋กœ COMMIT์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ, on์œผ๋กœ ์„ค์ •ํ•  ๋•Œ
compound statement, batch ๋’ค์—์„œ COMMIT ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
SET [TEMPORARY] OPTION Auto_Commit = โ€˜offโ€™;
Chained : chained ๋ชจ๋“œ์™€ unchained ๋ชจ๋“œ์˜ ๋ณ€๊ฒฝ์„ ์กฐ์ ˆํ•˜๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ on, ์ฆ‰chained
๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ๊ฐ ํด๋ผ์ด์–ธํŠธ ํˆด์—์„œ์˜ ์ง€์›์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€ํ•˜์‹ญ์‹œ์˜ค.
SET [TEMPORARY] OPTION Chained = โ€˜onโ€™;
Commit_On_Exit : Interactive SQL, dbisql๊ณผ ๊ฐ™์€ SYBASE IQ์˜ ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ ์—
์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ํˆด ์ข…๋ฃŒ์‹œ COMMIT์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ on, ์ฆ‰
ํˆด ์ข…๋ฃŒ์‹œ ์ž๋™์œผ๋กœ COMMIT์„ ์‹คํ•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํด๋ผ์ด์–ธํŠธ ํˆด์—์„œ์˜ ์ง€์› ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€ํ•˜
์‹ญ์‹œ์˜ค.
SET [TEMPORARY] OPTION Commit_on_exit = โ€˜onโ€™;
AutoPreCommit : ์ด ์˜ต์…˜์€ ๋‹ค๋ฅธ ์˜ต์…˜๊ณผ ๋‹ฌ๋ฆฌ odbc ํ™˜๊ฒฝ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” connection
level ์˜ต์…˜์ด๋ฉฐ ๋ชจ๋“  ๋ช…๋ น์–ด์ „์— COMMIT์˜ ์‹คํ–‰์—ฌ๋ถ€๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ off ์ฆ‰ ์ž
๋™์œผ๋กœ COMMITํ•˜์ง€ ์•Š์œผ๋ฉฐ Interactive SQL, dbisql๊ณผ ๊ฐ™์€ SYBASE IQ์˜ ๊ธฐ๋ณธ ํด๋ผ์ด
์–ธํŠธ์—์„œ๋Š” ๋น„๋ก odbc ํ™˜๊ฒฝํ•˜์—์„œ ๋™์ž‘ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
transaction์˜ ์ดํ•ด
O
update test set a = 1
rollback;
onon, off
X
update test set a = 1;
rollback;
offon, off
2 statement per 1 batch
1 statement per 1 batch
compound statement
๋น„๊ณ 
X
update test set a = 1
rollback;
offon, off
O
X
X
O
Rollback
update test set a = 1;
rollback;
onoff
update test set a = 1;
rollback;
onon
BEGIN
update test set a = 1;
rollback;
END;
offon, off
BEGIN
update test set a = 1;
rollback;
END;
onon, off
๋‚ด์šฉChainedAuto_Commit
Auto_Commit์ด ์‹คํ–‰๋˜๋Š” ์‹œ์ 
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
snapshot versioning
SYBASE IQ์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ table-level versioning์ด
๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.
ANSI isolation level 3์„ ์ง€์›ํ•˜๋ฉฐ ์ฝ๊ณ  ์žˆ๋Š” ๋™์•ˆ์—๋„ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠน
์ •ํ•œ ์‹œ์ ์— ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์“ธ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋Š” SYBASE IQ์— ์˜ํ•ด ์ž๋™์œผ๋กœ 1๋ช…
์œผ๋กœ ์ œํ•œ๋˜๋ฉฐ ์กฐ์ ˆ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์–ด๋–ค ํ…Œ์ด๋ธ”์ด ์ˆ˜์ •๋˜์–ด์ง€๋ฉด ๊ทธ ํŽ˜์ด์ง€๋“ค์˜ ์ด์ „ ๋ฐ์ดํ„ฐ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋‚จ๊ฒจ๋‘๊ณ  ์ƒˆ๋กœ์šด ํŽ˜
์ด์ง€์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋“ค์ด ์“ฐ์—ฌ์ง€๋ฉฐ ๊ฐ ํŽ˜์ด์ง€ ํ—ค๋”์—๋Š” blockmap ์ด๋ผ๋Š” ๋ฒ„์ „์ •๋ณด๋ฅผ
๋ณด๊ด€ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด์ „ ํŽ˜์ด์ง€์˜ blockmap์—๋Š” ์ด์ „๋ฒ„์ „์ด ์ƒˆ
๋กœ์šด ํŽ˜์ด์ง€์˜ blockmap์—๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
์ด์ „ ๋ฒ„์ „๋“ค์€ ๋” ์ด์ƒ ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ๋˜๋ฉฐ ์ด๋Ÿฐ ๋ฒ„์ „
๊ด€๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ RDBMS์—์„œ์˜ log์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋ฒ„์ „์˜ ํ…Œ์ด๋ธ” ๋‚ด์šฉ์„ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ๋จผ์ € COMMIT์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์งˆ์˜๋ฅผ ํ•˜
์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ SYBASE IQ์˜ COMMIT์—๋Š” ๋‘ ๊ฐ€์ง€์˜ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
versioning example
t1 ์‹œ์ ์— User1, User2๋Š” customer,order, product ํ…Œ์ด๋ธ”๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ
๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
versioning example
t2 ์‹œ์ ์— write user๊ฐ€ ๋“ค์–ด์™€์„œ customer ํ…Œ์ด๋ธ”์„ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ™์€ ์‹œ๊ฐ„์— ๋‹ค๋ฅธ
์‚ฌ์šฉ์ž๋“ค์€ ์•„์ง๋„ ์—ฌ์ „ํžˆ customer,order,product ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
versioning example
t3 ์‹œ์ ์— write user์˜ customer ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ˆ˜์ •์ด COMMIT ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์‹œ๊ฐ„
์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์•„์ง๋„ ์—ฌ์ „ํžˆ customer,order,product ํ…Œ์ด๋ธ”์˜ ์›๋ž˜ ๋ฒ„์ „์„ ์กฐํšŒ
ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
versioning example
t4 ์‹œ์ ์— User 3์ด login ํ•ด์„œ customer ํ…Œ์ด๋ธ”์˜ ์ƒˆ ๋ฒ„์ „๊ณผ order, product์˜ ์›๋ž˜ ๋ฒ„
์ „์„ ์กฐํšŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์•„์ง๋„ ์—ฌ์ „ํžˆ customer, order,
product ํ…Œ์ด๋ธ”์˜ ์›๋ž˜ ๋ฒ„์ „์„ ์กฐํšŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
versioning example
t5 ์‹œ์ ์— User 1, User 2๊ฐ€ COMMIT์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์žฌ์ ‘์† ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜
customer ํ…Œ์ด๋ธ”๊ณผ ์›๋ž˜๋ฒ„์ „์˜ order, product ํ…Œ์ด๋ธ”์„ ์ฝ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—
customer์˜ ์›๋ž˜๋ฒ„์ „์€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
์žฌ์—ฐ
Interactive SQL๋ฅผ ์ด์šฉํ•˜์—ฌ A,B ๋‘ ๊ฐœ์˜ ์„ธ์…˜์„ ๋™์‹œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค
A ์„ธ์…˜์—์„œ ๊ธฐ์กด ํ…Œ์ด๋ธ” sample์— ์ปฌ๋Ÿผ์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
B ์„ธ์…˜์—์„œ A์„ธ์…˜์—์„œ ๋งŒ๋“  sample ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค
๋‘ ์„ธ์…˜ ๋ชจ๋‘ Auto_Commit ์˜ต์…˜์ด off๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
์ด ๋ฌธ์ œ๋Š” SYBASE IQ์˜ versioning๊ณผ ๊ด€๋ จํ•œ ๋ฌธ์ œ๋กœ B ์„ธ์…˜์˜ ์—ฐ๊ฒฐ์‹œ์ ์— ํ˜น์€ ๋งˆ์ง€๋ง‰
COMMIT๋ฅผ ์‹คํ–‰ํ•œ ํ›„์— sample์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์— B ์„ธ์…˜์—์„œ
COMMIT์„ ์‹คํ–‰ํ•˜๋ฉด B ์„ธ์…˜์—์„œ๋„ sample ์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
์žฌ์—ฐ
Interactive SQL๋ฅผ ์ด์šฉํ•˜์—ฌ A,B ๋‘ ๊ฐœ์˜ ์„ธ์…˜์„ ๋™์‹œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค
A ์„ธ์…˜์—์„œ sample ํ…Œ์ด๋ธ”์„ SELECT ํ•˜๊ณ  ๊ทธ๋ƒฅ ๊ทธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค
B ์„ธ์…˜์—์„œ sample ํ…Œ์ด๋ธ”์„ DROP ํ•˜๊ฑฐ๋‚˜ ALTER ํ•ฉ๋‹ˆ๋‹ค.
๋‘ ์„ธ์…˜ ๋ชจ๋‘ Auto_Commit ์˜ต์…˜์ด off๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์ด๊ฒƒ์€ SYBASE IQ์˜ locking ๋ฉ”์นด๋‹ˆ์ฆ˜๊ณผ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. A ์„ธ์…˜์—์„œ sample ํ…Œ์ด
๋ธ”์„ SELECT ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์—์„œ SYBASE IQ๋Š” sample ํ…Œ์ด๋ธ”์— lock์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ
๋‹ค. ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด
COMMIT์„ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.COMMIT์„ ์‹คํ–‰ํ•˜์˜€๋”๋ผ๋„ ํ˜„์žฌ SELECT ๊ฒฐ๊ณผ์˜ ์ปค์„œ๊ฐ€
์—ด๋ ค ์žˆ๊ธฐ ๋•Œ๋ฌธ์— RESUME ์ด๋ž€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ด ๋˜ํ•œ ๋‹ซ์•„ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
์žฌ์—ฐ
Interactive SQL๋ฅผ ์ด์šฉํ•˜์—ฌ A,B ๋‘ ๊ฐœ์˜ ์„ธ์…˜์„ ๋™์‹œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค
A ์„ธ์…˜์—์„œ sample ํ…Œ์ด๋ธ”์„ SELECTํ•˜๊ณ  COMMIT๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
B ์„ธ์…˜์—์„œ sample ํ…Œ์ด๋ธ”์„ DROP ํ•˜๊ฑฐ๋‚˜ ALTER ํ•ฉ๋‹ˆ๋‹ค
๋‘ ์„ธ์…˜ ๋ชจ๋‘ Auto_Commit ์˜ต์…˜์ด off๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์ด๊ฒƒ์€ SYBASE IQ ํด๋ผ์ด์–ธํŠธ ํˆด์˜ ์ปค์„œ ๋ฐฉ์‹ ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋ฒ• ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์œผ๋กœ
A์„ธ์…˜์—์„œ SELECTํ•œ ํ›„์— COMMIT์„ ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธด sample ํ…Œ์ด๋ธ”์— lock ํ˜„์ƒ์€ ์ข…
๋ฃŒ๊ฐ€ ๋˜๋‚˜ sample ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ point๋ฅผ ๊ณ„์†ํ•ด์„œ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ปค์„œ๊ฐ€ ์—ด๋ ค์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ปค์„œ๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” A ์„ธ์…˜์—์„œ RESUME ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ
SELECT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.ํ˜น์€ A ์„ธ์…˜์„ ์ข…๋ฃŒํ•œ ํ›„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
Transaction Tip
READ ์‚ฌ์šฉ์ž์™€ WRITE ์‚ฌ์šฉ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ณ  WRITE ์ž‘์—…์€ ๊ฐ€๋Šฅํ•˜๋ฉด READ ์‚ฌ
์šฉ์ž๊ฐ€ ์—†๋Š” ์‹œ๊ฐ„์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
READ ์‚ฌ์šฉ์ž๋Š” READ ๋ช…๋ น ์ „ํ›„์— COMMIT ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
dbisqlc์„ ์‚ฌ์šฉํ•˜๋Š” READ ์‚ฌ์šฉ์ž๋Š” Auto_Commit=โ€˜Onโ€™ ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค
OLAP Tool์„ ํฌํ•จํ•œ ODBC ํ™˜๊ฒฝ์—์„œ๋Š” AutoPreCommit=โ€˜Yโ€™๋กœ ๋ณ€๊ฒฝํ•˜๊ณ 
๊ฐ ์งˆ์˜ ๋’ค์— OLAP Tool ์˜ ํ›„์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ COMMIT์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
(๋‹จ, dbisqlc ๋Š” ์œ„ ์กฐ๊ฑด์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค)
๊ทธ ์™ธ isql๊ณผ ๊ฐ™์€ OCDK ํ™˜๊ฒฝ์˜ READ ์‚ฌ์šฉ์ž๋Š” ๋””ํดํŠธ ์ƒํƒœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด versioning๊ณผ transaction์œผ๋กœ ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•˜๋Š” ๊ฐœ๋ฐœ ๋ถ€์ž‘์šฉ์„ ์ตœ์†Œํ™”
์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
์œ ์šฉํ•œ system SP
sp_iqconnection
sp_iqstatus
sp_iqtransaction
sp_iqview
sp_iqspaceused
sp_iqlocks
sp_iqcontext
sp_iqtable
sp_iqtablesize
sp_iqcolumn
sp_iqindex
sp_iqindexsize
sp_helptext
BI. Anytime. AnywhereBI. Anytime. Anywhere
YBASE
ยฎ
www.www.sybasesybase.co..co.krkr
0202--34513451--52005200

More Related Content

PDF
All about JDBC Performance Tuning_Wh apm
PDF
WAS์˜ ๋™์ž‘๊ณผ WEB, Servlet, JSP_Wh apm
PDF
์›น ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ ๋ฐ ์—ญํ• _Wh apm
PDF
SSD ๊ฐœ๋… ๋ฐ ํ™œ์šฉ_Wh oracle
PDF
TP-Monitor_Wh apm
PDF
Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]
PDF
Tips and Tricks for SAP Sybase IQ
All about JDBC Performance Tuning_Wh apm
WAS์˜ ๋™์ž‘๊ณผ WEB, Servlet, JSP_Wh apm
์›น ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ ๋ฐ ์—ญํ• _Wh apm
SSD ๊ฐœ๋… ๋ฐ ํ™œ์šฉ_Wh oracle
TP-Monitor_Wh apm
Ko.xenapp xendesktop-75.cds-75-about-whats-new[1]
Tips and Tricks for SAP Sybase IQ

Similar to Fast Track To Sybase Iq2 (20)

PDF
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Day #3 MySQL Monitoring, Trouble Shooting
PPTX
DBMS ์•„ํ‚คํ…์ฒ˜
PDF
Database ํŠœ๋‹ ๊ต์œก 110124
DOCX
MySQL_SQL_Tunning_v0.1.3.docx
PDF
Bind Peeking ํ•œ๊ณ„์— ๋”ฐ๋ฅธ Adaptive Cursor Sharing ๋“ฑ์žฅ_Wh oracle
PDF
Oracle Query Optimizer ๊ด€๋ จ Parameter_OracleParameter
PPT
ecdevday8 ์›น๊ฐœ๋ฐœ์ž์˜ ์•ฝํ•œ๊ณ ๋ฆฌ SQL ๋›ฐ์–ด๋„˜๊ธฐ
PPTX
์˜ค๋ผํด DB ์•„ํ‚คํ…์ฒ˜์™€ ํŠœ๋‹
PDF
Fundamentals of Oracle SQL
PDF
Database
PDF
2016๋…„ ์ธ๋ฌธ์ •๋ณดํ•™ Sql์„ธ๋ฏธ๋‚˜ 1/3
PDF
Things Happend between JDBC and MySQL
PPTX
แ„Œแ…กแ„‡แ…กแ„€แ…ก แ„ƒแ…ตแ„‡แ…ตแ„‹แ…ช แ„‰แ…กแ„€แ…ฑแ„€แ…ต แ„แ…กแ„Œแ…ต แ„‡แ…ฅแ†ฏแ„‹แ…ฅแ„Œแ…ตแ„‚แ…ณแ†ซ แ„‹แ…ตแ†ฏแ„ƒแ…ณแ†ฏ
PDF
SQL Profile์„ ์ด์šฉํ•œ SQL Plan ๋ณ€๊ฒฝ_Wh oracle
PPTX
์‹ค๋ฌด๋กœ ๋ฐฐ์šฐ๋Š” ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ตœ์ ํ™” Ch6
PPTX
แ„’แ…ญแ„‹แ…ฒแ†ฏแ„Œแ…ฅแ†จแ„‹แ…ตแ†ซ SQL แ„Œแ…กแ†จแ„‰แ…ฅแ†ผแ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ 1แ„Œแ…ฎแ„Žแ…ก
PDF
ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ์†์„ฑ RDB(MySQL) ์Šคํ„ฐ๋”” 1
PDF
์†์‰ฌ์šด ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•(๋ผ์ด๋ธŒ๋ฐ”์ธ๋”ฉ ํ™œ์šฉ)
ย 
PDF
SQL Server Access Patterns
PDF
SQL PlAN MANAGEMENT ํ™œ์šฉ_Wh oracle
[์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ…]Day #3 MySQL Monitoring, Trouble Shooting
DBMS ์•„ํ‚คํ…์ฒ˜
Database ํŠœ๋‹ ๊ต์œก 110124
MySQL_SQL_Tunning_v0.1.3.docx
Bind Peeking ํ•œ๊ณ„์— ๋”ฐ๋ฅธ Adaptive Cursor Sharing ๋“ฑ์žฅ_Wh oracle
Oracle Query Optimizer ๊ด€๋ จ Parameter_OracleParameter
ecdevday8 ์›น๊ฐœ๋ฐœ์ž์˜ ์•ฝํ•œ๊ณ ๋ฆฌ SQL ๋›ฐ์–ด๋„˜๊ธฐ
์˜ค๋ผํด DB ์•„ํ‚คํ…์ฒ˜์™€ ํŠœ๋‹
Fundamentals of Oracle SQL
Database
2016๋…„ ์ธ๋ฌธ์ •๋ณดํ•™ Sql์„ธ๋ฏธ๋‚˜ 1/3
Things Happend between JDBC and MySQL
แ„Œแ…กแ„‡แ…กแ„€แ…ก แ„ƒแ…ตแ„‡แ…ตแ„‹แ…ช แ„‰แ…กแ„€แ…ฑแ„€แ…ต แ„แ…กแ„Œแ…ต แ„‡แ…ฅแ†ฏแ„‹แ…ฅแ„Œแ…ตแ„‚แ…ณแ†ซ แ„‹แ…ตแ†ฏแ„ƒแ…ณแ†ฏ
SQL Profile์„ ์ด์šฉํ•œ SQL Plan ๋ณ€๊ฒฝ_Wh oracle
์‹ค๋ฌด๋กœ ๋ฐฐ์šฐ๋Š” ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ตœ์ ํ™” Ch6
แ„’แ…ญแ„‹แ…ฒแ†ฏแ„Œแ…ฅแ†จแ„‹แ…ตแ†ซ SQL แ„Œแ…กแ†จแ„‰แ…ฅแ†ผแ„‡แ…กแ†ผแ„‡แ…ฅแ†ธ 1แ„Œแ…ฎแ„Žแ…ก
ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ์†์„ฑ RDB(MySQL) ์Šคํ„ฐ๋”” 1
์†์‰ฌ์šด ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•(๋ผ์ด๋ธŒ๋ฐ”์ธ๋”ฉ ํ™œ์šฉ)
ย 
SQL Server Access Patterns
SQL PlAN MANAGEMENT ํ™œ์šฉ_Wh oracle
Ad

Fast Track To Sybase Iq2

  • 1. Fast track to SYBASE IQFast track to SYBASE IQFast track to SYBASE IQ ํ•œ๊ตญ์‚ฌ์ด๋ฒ ์ด์Šค Pre-Sales BI Part ver 2.9 2003/10/09 ์†Œ๋ณ‘๊ฐ
  • 2. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ Overview
  • 3. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Sybase RDBMS Sybase๊ฐ€ ์ œ๊ณตํ•˜๋Š” RDBMS๋Š” ๊ฐ ์—…๋ฌด์˜ ๊ทœ๋ชจ์™€ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ํฌ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด 3๊ฐœ๋กœ ๊ตฌ ๋ถ„๋˜์–ด์ง‘๋‹ˆ๋‹ค. Adaptive Server Anywhere (ASA): ๊ฐœ์ธ์—…๋ฌด์šฉ ์ตœ์†Œํ˜• RDBMS์ด๊ณ  ANSI ํ‘œ์ค€ SQL๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๊ฒ€์ฆ๋œ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. SYBASE IQ์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ SYBASE IQ์—์„œ๋Š” Catalog, Query parser, Connectivity๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค Adaptive Server Enterprise (ASE) : ๋ฒ”์šฉ RDBMS์ด๋ฉฐ ํŠนํžˆ OLTP ์—…๋ฌด์— ํƒ์›”ํ•œ ํšจ๊ณผ๋ฅผ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค. DW ์†”๋ฃจ์…˜์—์„œ OLAP์˜ Repository ์˜์—ญ์œผ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ : DW/DSS/Data Mart ์—…๋ฌด๋ฅผ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์–ด์ง„ ์ „์šฉ RDBMS ์ด๋ฉฐ ASA๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ ์—ฌ๊ธฐ์— ํฌํ•จ๋œ ASA ์˜์—ญ์€ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์˜์—ญ์ž…๋‹ˆ๋‹ค.
  • 4. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ ๋Š”โ€ฆโ€ฆ ๊ธฐ์กด RDBMS๋Š” OLTP์™€ DSS๊ฐ€ ํ˜ผ์žฌ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์ธ๋ฐ ๋ฐ˜ํ•ด SYBASE IQ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์ „์šฉ RDBMS๋กœ ์ธ๋ฑ์‹ฑ์ด๋‚˜ ์•ก์„ธ์Šค ๋ฐฉ์‹์—์„œ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์— ๋งž๋Š” ์ƒˆ๋กœ ์šด ๊ธฐ๋ฒ•์œผ๋กœ ๊ตฌํ˜„๋œ RDBMS๋กœ ์„ฑ๋Šฅ, ์œ ์—ฐ์„ฑ, ๊ฒฝ์ œ์„ฑ ์ธก๋ฉด์—์„œ ๊ฐ€์žฅ ํƒ์›”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…๋‹ˆ๋‹ค ๊ธฐ์กด RDBMS๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์งˆ์˜ ํŠนํžˆ ์กฐ์ธ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋น„์ •๊ทœํ™” ์ฆ‰ Star-Schema ๋˜๋Š” Snowflake-Schema๋กœ ๋””์ž์ธ ํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅ ํ•˜๊ธฐ๋„ ํ•˜๊ณ  ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฒ•์˜ ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ๋””์ž์ธ์— ์˜ํ•ด ER ๋ชจ๋ธ์„ ๊ถŒ์žฅํ•˜๊ธฐ๋„ ํ•˜์ง€ ๋งŒ SYBASE IQ์˜ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์ œ์•ฝ๋„ ๋‘์ง€ ์•Š์Šต๋‹ˆ ๋‹ค RDBMS๊ฐ€ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋‹จ์ผ ์งˆ์˜ ์ž‘์—…์„ MPP์™€ ๊ฐ™์€ ๋ณ‘๋ ฌ ๋…ธ๋“œ์— ๋ถ„๋‹ด์‹œํ‚ค ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜๋Š”๋ฐ ์ด๋Š” ๋น„์šฉ์— ๋น„ํ•ด ์„ฑ๋Šฅ์— ๋ฌธ์ œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
  • 5. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ ํŠน์ง•-column-wise data ๊ตฌ์กฐ ๊ธฐ์กด RDBMS๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐฉ์‹์ด ๋ ˆ์ฝ”๋“œ ๋ ˆ๋ฒจ๋กœ ๋˜์–ด ์žˆ๊ณ  DW๋Š” ์ผ์ • ์ฃผ๊ธฐ๋กœ ๋ฐ์ด ํ„ฐ๊ฐ€ ๋กœ๋“œ ๋˜๋ฉฐ ๋กœ๋“œ๋œ ํ›„์— ์•ก์„ธ์Šค ๋˜๋Š” ํ˜•ํƒœ๋กœ ์ด์šฉ๋˜์–ด ์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ DW์— ์‚ฌ์šฉ๋˜๋Š” ์งˆ์˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ํ•„์š”ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน์ • ๋ช‡ ๊ฐœ์˜ ์ปฌ๋Ÿผ๋งŒ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ ๋ผ์„œ ๋ ˆ์ฝ”๋“œ ๋ ˆ๋ฒจ์˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐฉ์‹์€ ๋ถˆํ•„์š”ํ•œ I/O๋ฅผ ์œ ๋ฐœ ์‹œํ‚ค๋ฏ€๋กœ DW๋ฅผ ํšจ๊ณผ์ ์œผ ๋กœ ์ง€์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ์ด์™€ ๊ฐ™์€ I/O์˜ ์ฆ๊ฐ€๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด MPP์™€ ๊ฐ™์€ ๋ณ‘๋ ฌ ์‹œ์Šคํ…œ์„ ์ด ์šฉ ํ•˜๋Š”๋ฐ ์ด๋Š” ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์— I/O๋ฅผ ๋ถ„์‚ฐ์‹œ์ผœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฒƒ์ธ๋ฐ ๊ฒฐ๊ตญ I/O์˜ ์ด๋Ÿ‰์€ ๋ณ€ํ™”๊ฐ€ ์—†์œผ๋ฉฐ ๋น„์šฉ ๋Œ€๋น„ ์„ฑ๋Šฅ์ด ํƒ์›”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. SYBASE IQ ๋Š” I/O ์ž์ฒด๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ธฐ๋ฒ•์„ ์ œ๊ณต ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ์•ก์„ธ ์Šค ํ•˜์—ฌ ํ•œ๋ฒˆ I/O์— ๋Œ€๋‹จํžˆ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • 6. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ ํŠน์ง•-bit-wise index ๊ตฌ์กฐ ์นผ๋Ÿผ์˜ ์นด๋””๋‚ ๋ฆฌํ‹ฐ์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๋ฅผ bit mask ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์ด๋ ‡๊ฒŒ ํ‘œํ˜„๋œ ๊ฐ bit๋Š” ๊ฐœ ๋ณ„์ ์œผ๋กœ ๋”ฐ๋กœ ์ €์žฅ๋˜์–ด ์ธ๋ฑ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค ์ด๋ ‡๊ฒŒ bit ๋‹จ์œ„๋กœ ์ €์žฅ๋œ ๊ฐ๊ฐ์˜ ์ธ๋ฑ์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์••์ถ•์ €์žฅ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋˜ํ•œ ์„œ ๋กœ ๋‹ค๋ฅธ ์••์ถ•๋ฅ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์••์ถ•๋ฅ ์€ ๋ฐ์ดํ„ฐ์˜ ์„ฑ๊ฒฉ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ž์ธ ํŽ˜์ด์ง€ ํฌ๊ธฐ์— ๋”ฐ ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  • 7. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ๋ฅผ ์ด๋Ÿฐ ์šฉ๋„๋กœ๋Š”โ€ฆโ€ฆ SYBASE IQ์˜ Lock, ํŠธ๋žœ์žญ์…˜ ๋ฉ”์นด๋‹ˆ์ฆ˜๋“ฑ ๋ชจ๋“  ๊ตฌ์กฐ๊ฐ€ DW ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•˜๋„๋ก ๋””์ž์ธ ์ด ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—…๋ฌด๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์•„๋ž˜์— ์–ธ๊ธ‰๋˜๊ณ  ์žˆ๋Š” ์—…๋ฌด์˜ ํŠน์„ฑ๋“ค์€ ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๊ฑด ํ•œ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ฃผ๋กœ ํ•˜๋Š” ์—…๋ฌด ์ž…๋‹ˆ๋‹ค. OLTP Real time update ์œ„์™€ ๊ฐ™์€ ํ•„์š”์„ฑ์ด ์žˆ๋Š” ์—…๋ฌด๋Š” ๊ฐ™์ด ์ œ๊ณต๋˜๋Š” ASE๋ผ๋Š” RDBMS๋กœ ์ด๋™ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • 8. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ Client ์„ค์ •ํ•˜๊ธฐ
  • 9. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ Client ODBC๋ฅผ ์ง€์›ํ•˜๋Š” Client : SYBASE IQ์— ์ตœ์ ํ™” ๋œ API ๋ฐฉ๋ฒ•์ด๋ฉฐ ๊ฐ๊ฐ UNIX์šฉ๊ณผ Window์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. DBISQLC(Interactive SQL Classic) : SYBASE IQ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” SQL Editor ๊ทธ ์™ธ 3rd party ์ œํ’ˆ OCDK๋ฅผ ์ง€์›ํ•˜๋Š” Client : SYBASE IQ๋Š” Native Driver์ธ OCDK๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ODBC ๋ฐฉ๋ฒ•๊ณผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์„ค์ • ๊ฐ’์ด ๋‹ฌ๋ผ ์›ํ•˜์ง€ ์•Š๋Š” ๋ถ€์ž‘์šฉ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋ถ„ํžˆ ์ˆ™ ์ง€ ํ›„์— ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. isql : ASE์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ช…๋ น์–ด ๋Œ€ํ™”๋ฐฉ์‹์˜ SQL Editor SQL Advantage : ASE์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” GUI ๋Œ€ํ™”๋ฐฉ์‹์˜ SQL Editor ๊ทธ ์™ธ 3rd party ์ œํ’ˆ JDBC๋ฅผ ์ง€์›ํ•˜๋Š” Client : Sybase์˜ JDBC์ธ Jconnect๋ฅผ ์ง€์›ํ•˜๋Š” API ์ž…๋‹ˆ๋‹ค. DBISQL(Interactive SQL JAVA) : SYBASE IQ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” SQL Editor ์ด๋ฉฐ ์ง€์› API์— ๋”ฐ๋ผ OCDK (Jconnect)์™€ ODBC (JDBC-ODBC Bridge)๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3rd party ์ œํ’ˆ
  • 10. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ODBC ์„ค์ • โ€“ win client ODBC Administrator๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
  • 11. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ODBC ์„ค์ • โ€“ win client Add ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ƒˆ๋กœ์šด data source๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค ๋‹จ, SYBASE IQ Server๋Š” Unix Server์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • 12. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ODBC ์„ค์ • โ€“ win client Adaptive Server IQ 12 ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ ํƒํ•˜๊ณ  Finish ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค ODBC ํƒญ์„ ์„ ํƒํ•˜๊ณ  Data source name ํ•„๋“œ์— ์ ์ ˆํ•œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค
  • 13. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ODBC ์„ค์ • โ€“ win client Login ํƒญ์„ ์„ ํƒํ•˜๊ณ  User ID์™€ Password์˜ ํ•„๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค Database ํƒญ์„ ์„ ํƒํ•˜๊ณ  Server name๊ณผ Database name ํ•„๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค
  • 14. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ODBC ์„ค์ • โ€“ win client Network ํƒญ์„ ์„ ํƒํ•˜๊ณ  TCP/IP ์ฒดํฌ๋ฐ•์Šค๋ฅผ ํด๋ฆญํ•˜๊ณ  SYBASE IQ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ์™€ port ๋ฒˆํ˜ธ๋ฅผ ์ฝœ๋ก (์ฃผ์˜:์„ธ๋ฏธ์ฝœ๋ก  ์•„๋‹˜)์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ODBC ํƒญ์„ ์„ ํƒํ•˜๊ณ  Test connection ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.(๋‹จ, ์ด ๊ธฐ๋Šฅ์€ Win98๊ณผ ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ๋˜์ง€ ์•Š๊ณ  WinNT์™€ ๊ฐ™์€ ์„œ๋ฒ„ ๊ณ„์—ด์—์„œ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.) ์ฝœ๋ก 
  • 15. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ODBC ์„ค์ • โ€“ unix client dbdsn ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ด์šฉ % $SYBASE/ASIQ-12_5/bin/dbdsn โ€“c โ€œENG=asiqdemo;DBN=asiqdemo;UID=dba; PWD=SQL;CommLinks=tcpip{host=157.133.75.36;port=2345}โ€ โ€“w asiqdemo ์œ„ ๋ช…๋ น์–ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๋ฉด $SYBASE/.odbc.ini ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋“ค ์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ODBCINI๋ผ๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ํŠน๋ณ„ํžˆ ๋”ฐ๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๋ฉด ์„ค์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ ์˜ .odbc.ini ๋ผ๋Š” ํŒŒ์ผ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ .odbc.ini ๋ผ๋Š” ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ ๋‹ค. ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ ๋งŒ์•ฝ ODBCINI ๋ผ๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด $ODBCINI/.odbc.ini ํŒŒ์ผ์„, ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด $SYBASE/.odbc.ini ํŒŒ์ผ์„ vi ์™€ ๊ฐ™์€ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ์ง‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. [asiqdemo] // data source name Userid=dba // user id Password=SQL // password DatabaseName=asiqdemo // IQ database name ServerName=asiqdemo // IQ engine name CommLinks=tcpip{host=157.133.75.36;port=2345} // protocol, IP, port
  • 16. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. JDBC/OCDK ์„ค์ • โ€“ win client DSEDIT๋ผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  OK ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, SYBASE IQ 12.5 ์ด์ƒ์— ์„œ๋Š” OCDK ๋ชจ๋“ˆ์ด ์„ค์น˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. start programs sybase Dsedit Utility Server๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. Server Object Addโ€ฆโ€ฆ
  • 17. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. JDBC/OCDK ์„ค์ • โ€“ win client ๋“ฑ๋ก๋œ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ์™€ port ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค Server Object Modify Attribute OK ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค ์ฝค๋งˆ
  • 18. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. JDBC/OCDK ์„ค์ • โ€“ win client SYBASE IQ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค Server Object Ping Server ์•„๋ž˜์™€ ๊ฐ™์€ ์—ฐ๊ฒฐ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด๋ฉด ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • 19. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. JDBC/OCDK ์„ค์ • โ€“ unix client dscp ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉ % $SYBASE/OCS-12_5/bin/dscp >> open OK FailOver to Interface Driver Session 1 InterfacesDriver>> add asiqdemo // IQ engine name Service : [SQL Server] // enter Transport Type : [tcp] tli tcp // sun์„ ์ œ์™ธํ•˜๋ฉด tcp Transport Address : 157.133.75.36 2345 // IP, port Transport Type : [tcp] // enter Transport Address : // enter Security Mechanism [ ] : // enter HA Failoverserver : [ HA Failover Server ] // enter Error in adding asiqdemo Session 1 InterfacesDriver>> exit
  • 20. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. JDBC/OCDK ์„ค์ • โ€“ unix client dscp ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉ(๊ณ„์†) ์œ„ ๋ช…๋ น์–ด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๋ฉด $SYBASE/interfaces ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ $SYBASE/interfaces ํŒŒ์ผ์„ vi ์™€ ๊ฐ™์€ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํŽธ์ง‘ํ•˜ ์‹ญ์‹œ์˜ค. ๋‹จ, ํŽธ์ง‘ํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์€ master, query ์•ž์˜ ๋ฌธ์ž๋Š” ๋ฐ˜๋“œ์‹œ ํƒญ์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ ๋‹ˆ๋‹ค. asiqdemo // for Solaris master tli tcp /dev/tcp x000209299e4d32730000000000000000 query tli tcp /dev/tcp x000209299e4d32730000000000000000 asiqdemo // for HP, IBMโ€ฆ. master tcp ether 157.133.75.36 2345 query tcp ether 157.133.75.36 2345
  • 21. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. DBISQL SYBASE IQ์˜ ๊ธฐ๋ณธ์ ์ธ ์งˆ์˜ ํŽธ์ง‘ ํˆด Embedded SQL/C ๊ณ„์—ด UNIX : dbisqlc Window : interactive SQL Classic JAVA ๊ณ„์—ด UNIX : dbisql Window : interactive SQL JAVA ์ฐธ๊ณ  : ์›๋ž˜ dbisql์€ ASA(Adaptive Server Anywhere)์˜ ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ ์ž…๋‹ˆ๋‹ค.
  • 22. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL Classic Window ๊ณ„์—ด์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ ODBC๋ฅผ ํ‘œ์ค€ API๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ Interactive SQL Classic์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
  • 23. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL Classic Login ํƒญ์˜ ODBC data source name ์ฝค๋ณด ๋ฐ•์Šค์—์„œ ODBC ์„ค์ •์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ์ ‘์†์„ ์›ํ•˜๋Š” data source name์„ ์„ ํƒํ•œ ํ›„ OK ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค
  • 24. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL Classic Data, Statistics, Command ์„ธ ๊ฐœ์˜ ์„œ๋ธŒ ์ฐฝ์„ ๊ฐ€์ง€ Interactive SQL Classic ๋ฉ”์ธ ํ™”๋ฉด ์ด ๋‚˜์˜ค๊ณ  Statistics ์ฐฝ์— Connected to database ๋ผ๋Š” ์ ‘์† ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๊ฐ€ ๋ชจ์ด๋ฉด ์ •์ƒ ์ ‘์† ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ SQL๋ฌธ์„ ํŽธ์ง‘ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Command window Statistics window Data window
  • 25. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL Classic File menu : Command ์ฐฝ์—์„œ ํŽธ์ง‘ํ•œ SQL๋ฌธ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” Save as, ์ €์žฅ๋œ SQL๋ฌธ ์„ Command ์ฐฝ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” Open์„ ๋น„๋กฏํ•˜์—ฌ New, Exit ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Edit menu : Command ์ฐฝ์—์„œ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” Cut, Copy, Paste, Delete์™€ ์ ‘์†ํ•œ ์„œ๋ฒ„ ์˜ ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Insert Table ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.๋˜ํ•œ ๊ฐ๊ฐ์˜ ๋ฉ”๋‰ด์—๋Š” ๋‹จ ์ถ• ํ‚ค์™€ ๊ธฐ๋Šฅ ํ‚ค๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค Command menu : Command ์ฐฝ์—์„œ ํŽธ์ง‘ํ•œ SQL๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Execute, Command ์ฐฝ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•œ ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ดํ•˜๋Š” Recall, Previous Command, Next Command, ์ƒˆ๋กœ์šด ์ ‘์†์„ ์œ„ํ•œ Connect, ์ ‘์†์„ ๋Š๊ธฐ ์œ„ํ•œ Disconnect, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” Options ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Window menu : ์„œ๋ธŒ ์ฐฝ์˜ ๋ฐฐ์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” Tile, Always Tile, ์„ธ ๊ฐœ์˜ ์„œ๋ธŒ ์ฐฝ์„ ๊ฐ๊ฐ ํ™œ ์„ฑํ™” ์‹œํ‚ค๋Š” Data, Statistics, Command ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์— Help ๋ฉ”๋‰ด ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค
  • 26. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL Classic ์˜ต์…˜ ์„ค๋ช… : Command ๋ฉ”๋‰ด์— Options ์„œ๋ธŒ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐฝ์ด ์ƒˆ๋กœ ๋งŒ ๋“ค์–ด ์ง€๋ฉฐ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ์˜ต์…˜์€ SYBASE IQ์— ์ ‘์†์‹œ ์„œ ๋ฒ„์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ํ•ด๋‹น๋˜๋Š” ๊ฐ๊ฐ์˜ ์˜ต์…˜ ๊ฐ’์„ ์ฝ์–ด ๋“ค์—ฌ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • 27. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL Classic After Every Command : ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ๋‹จ์œ„ ๋ช…๋ น์–ด ๋’ค์— ์ž๋™์œผ๋กœ commit ๋ช…๋ น์–ด ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Auto_Commit ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ Off ์ž…๋‹ˆ ๋‹ค. When Exiting SQL : dbisqlc์˜ ์ ‘์†์„ ๋Š๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•  ๋•Œ์— commit ๋ช…๋ น์–ด ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Commit_on_Exit ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ On ์ž…๋‹ˆ๋‹ค. Automatic Window Refresh : Insert, Update, Delete์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์งˆ์˜ ๊ฒฐ ๊ณผ์— ๋ฐ˜์˜ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Auto_Refetch ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’ ์€ On ์ž…๋‹ˆ๋‹ค. Show Column Headings : ๊ฐ ์ปฌ๋Ÿผ์˜ ํ—ค๋”ฉ์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Headings ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ On ์ž…๋‹ˆ๋‹ค. Beep on Errors : ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ฒฝ๊ณ ์Œ์„ ๋ฐœ์ƒํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Bell ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ On ์ž…๋‹ˆ๋‹ค. Command Delimiter : ํ•œ ๋ฌธ์žฅ์˜ ์ข…๋ฃŒ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜ ๋Š” ์˜ต์…˜ ๋ช…์€ Command_Delimiter ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ ;(์„ธ๋ฏธ์ฝœ๋ก ) ์ž…๋‹ˆ๋‹ค
  • 28. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL Classic Show Null Value As : ๊ฐ ํ…Œ์ด๋ธ”์— ์ž…๋ ฅ๋œ ๊ฐ’ ์ค‘์— NULL ๊ฐ’์˜ ํ‘œํ˜„์„ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ์ œ์–ด ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Nulls ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ ๋ฌธ์ž์—ด NULL ์ž…๋‹ˆ๋‹ค. Log ISQL Commands to File : Command ์ฐฝ์—์„œ ํŽธ์ง‘๋œ SQL์ด ๊ธฐ๋ก๋˜๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„ ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Isql_Log ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ ๊ณต๋ฐฑ ๋ฌธ์ž ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๊ธฐ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Echo During Execution : SQL ๋ฌธ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— Echo ๋ ์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Echo ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ On ์ž…๋‹ˆ๋‹ค. When an Error Occurs : ์—ฌ๋Ÿฌ ๊ฐœ์˜ SQL๋ฌธ์„ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜๋กœ ์‹คํ–‰ ์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ On_Error ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ prompt ์ž…๋‹ˆ๋‹ค. Input Format, Output Format, Limit Output columns to : ํ˜„์žฌ ์ง€์›๋˜์ง€ ์•Š๋Š” ์˜ต์…˜์ž…๋‹ˆ ๋‹ค. Limit Display Columns To : ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋Š” ๊ฐ ์ปฌ๋Ÿผ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์— ์„œ ์ธ์‹ํ•˜๋Š” ์˜ต์…˜ ๋ช…์€ Truncation_Length ์ด๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ 30 ์ž…๋‹ˆ๋‹ค.
  • 29. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL Classic OK button : ํ˜„์žฌ ์„ธ์…˜์—์„œ๋งŒ ๋ณ€๊ฒฝ๋œ ์˜ต์…˜์˜ ํšจ๋ ฅ์ด ๋ฐœ์ƒํ•˜๋ฉฐ set temporary option ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Permanent button : ํ•ด๋‹น๋˜๋Š” ์‚ฌ์šฉ์ž์˜ ๋ณ€๊ฒฝ๋œ ์˜ต์…˜์˜ ํšจ๋ ฅ์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋ฉฐ set option๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ  dbisqlc ํ”„๋กœ๊ทธ๋žจ์€ ์งˆ์˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒํ•  ๋•Œ ESQL/C์˜ ์ปค์„œ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ปค์„œ๋ฅผ ์˜คํ”ˆํ•œ ํ›„์— ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ชจ๋‘ ์ „์†ก๋˜์ง€ ์•Š๊ณ  ํด ๋ผ์ด์–ธํŠธ ๋ฒ„ํผ ํฌ๊ธฐ ๋งŒํผ์˜ ์–‘๋งŒ ์ „์†ก๋˜๊ณ  ๋” ๋งŽ์€ ์–‘์„ ์กฐํšŒํ•  ๋•Œ ๊ทธ ๋•Œ ๋‹ค์‹œ ์ „์†ก๋˜๊ณ  ํ•ฉ ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์ปค์„œ๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡ ๊ฒŒ ์ปค์„œ๊ฐ€ ์—ด๋ ค์žˆ๋Š” ์ƒํƒœ์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด๋‚˜ Stored Procedure๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ DDL ๋ช… ๋ น์„ ์•„๋ž˜ ๋ฉ”์‹œ์ง€์ฒ˜๋Ÿผ ๋ธ”๋กํ‚นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํƒœ๋ฅผ ๋ฒ—์–ด๋‚˜๋ ค๋ฉด ๋˜ ๋‹ค๋ฅธ SQL ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ resume ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋ฉด ์ปค์„œ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  • 30. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. UNIX : dbisqlc Syntax : dbisqlc [-c โ€œkeyword=valueโ€ฆโ€ฆโ€ | -d โ€œdelimiterโ€ | -q | -x] ์—ฌ๊ธฐ์„œ โ€“q ๋Š” quite mode, -x๋Š” syntax check only ์˜ต์…˜์ด๋ฉฐ keyword์— ํ•ด๋‹น๋˜๋Š” ์ž์„ธ ํ•œ ๋ชฉ๋ก์€ ๋ฉ”๋‰ด์–ผ์„ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค GUI Mode : ๊ทธ๋ž˜ํ”ฝ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜์–ด ๋งˆ์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ ์„ ์ œ์™ธํ•˜๋ฉด Window ์šฉ๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด๋Š” dbisqlc ์ด๋ฉฐ ๋’ค์— ์ ‘์†์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ถ™์—ฌ์ค˜์•ผ ํ•˜๋Š”๋ฐ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐ€์ง€ ํ˜• ํƒœ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ ๊ธฐํ˜ธ์— ๋”ฐ๋ผ ์„ ํƒํ•˜์—ฌ ํ˜น์€ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. dbisqlc ์‹คํ–‰ํŒŒ์ผ์˜ ์œ„์น˜๋Š” $ASDIR/bin์— ์žˆ์Šต๋‹ˆ๋‹ค. Command Line์— ์ง์ ‘ ์ž…๋ ฅ : dbisqlc๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์ ‘์†์— ํ•„์š”ํ•œ ์˜ต์…˜์„ ๋ช…๋ น์–ด์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, dbisqlc์˜ ์‹คํ–‰์„ ์œ„ํ•œ path๊ฐ€ ์ ์ ˆํžˆ ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค % dbisqlc โ€“c โ€œuid=DBA;pwd=SQL;eng=asiqdemo;dbn=asiqdemoโ€ SQLCONNECT ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด์šฉ : ์ ‘์†์— ํ•„์š”ํ•œ ์˜ต์…˜์„ SQLCONNECT๋ผ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์„ค์ •ํ•˜๊ณ  ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ๋ช…๋ น์–ด๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. % dbisqlc .odbc.ini ์ด์šฉ : ์ ‘์†์— ํ•„์š”ํ•œ ์˜ต์…˜์„ .odbc.ini๋ผ๋Š” ํŒŒ์ผ์— data source name ์ด๋ผ๋Š” ๋Œ€ํ‘œ์ด๋ฆ„์„ ์ด์šฉํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ์ ‘์†ํ•  ๋•Œ ์ด ์ด๋ฆ„์„ ์˜ต์…˜์œผ๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. % dbisqlc โ€“c dsn=asiqdemo
  • 31. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. UNIX : dbisqlc Quite Mode : UNIX ํ™˜๊ฒฝ์˜ GUI ๋ชจ๋“œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ถˆํŽธํ•œ ์ ์ด ๋งŽ์€ ๊ด€๊ณ„๋กœ ์ž˜ ์‚ฌ์šฉ ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐฐ์น˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ SQL ๋ช…๋ น์–ด๋“ค์„ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์—ฌ ๋†“๊ณ  ์ด ํŒŒ์ผ์„ ์ž…๋ ฅ ํŒŒ ์ผ๋กœ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด ๋ฐ 3 ๊ฐ€์ง€์˜ ์‚ฌ ์šฉ ํ˜•ํƒœ๋Š” ๋ชจ๋‘ GUI ๋ชจ๋“œ์™€ ๊ฐ™๊ณ  ๊ฐ๊ฐ์˜ ๋’ค์— โ€œโ€“q filenameโ€ ์˜ต์…˜์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Command Line์— ์ง์ ‘ ์ž…๋ ฅ % dbisqlc โ€“c โ€œuid=DBA;pwd=SQL;eng=asiqdemo;dbn=asiqdemoโ€ โ€“q query.sql SQLCONNECT ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด์šฉ % dbisqlc โ€“q query.sql .odbc.ini ์ด์šฉ % dbisqlc โ€“c dsn=asiqdemo โ€“q query.sql
  • 32. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL JAVA Window ๊ณ„์—ด์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ JDBC๋ฅผ ํ‘œ์ค€ API๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ JDBC-ODBC API๋ฅผ ์˜ต์…˜์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ Interactive SQL JAVA๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค
  • 33. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL JAVA Identification ํƒญ์˜ ODBC data source name ์ฝค๋ณด ๋ฐ•์Šค์—์„œ ODBC ์„ค์ •์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค ์–ด ๋†“์€ ์ ‘์†์„ ์›ํ•˜๋Š” data source name์„ ์ž…๋ ฅ์ž…๋ ฅํ•œ ํ›„ OK ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ Advanced ํƒญ์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ์˜ต์…˜๊ณผ API๋กœ JDBC๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€ JDBC- ODBC bridge๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 34. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL JAVA SQL Statements, Messages, Results ์„ธ ๊ฐœ์˜ ์„œ๋ธŒ ์ฐฝ์„ ๊ฐ€์ง€ Interactive SQL JAVA ๋ฉ” ์ธ ํ™”๋ฉด์ด ๋‚˜์˜ค๊ณ  ์ด ์ƒํƒœ์—์„œ SQL Statements ์ฐฝ์„ ํ†ตํ•ด SQL๋ฌธ์„ ํŽธ์ง‘ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์กฐ ํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Results window Messages window SQL Statements window (Not connected) ์•„๋‹ˆ๋ฉด OK
  • 35. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL JAVA File menu : SQL Statements ์ฐฝ์—์„œ ํŽธ์ง‘ํ•œ SQL๋ฌธ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” Save as, ์ €์žฅ๋œ SQL๋ฌธ์„ SQL Statements ์ฐฝ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” Open์„ ๋น„๋กฏํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ฐฝ์„ ํ†ตํ•ด ์ ‘ ์†์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” New window, ์—ด๋ ค์žˆ๋Š” ํŠน์ • ์ฐฝ์„ ๋‹ซ๋Š” Close, SQL ๋ฌธ์„ ๋ฐ”๋กœ ์ฝ ์–ด ๋“ค์–ด ์‹คํ–‰ํ•˜๋Š” Run Script, Exit๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Edit menu : SQL Statements ์ฐฝ์—์„œ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” Redo, Undo, Cut, Copy, Paste, Delete์™€ ์ ‘์†ํ•œ ์„œ๋ฒ„์˜ ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Insert Table ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.๋˜ ํ•œ ๊ฐ๊ฐ์˜ ๋ฉ”๋‰ด์—๋Š” ๋‹จ์ถ• ํ‚ค์™€ ๊ธฐ๋Šฅ ํ‚ค๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์–ด ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค SQL menu : SQL Statements ์ฐฝ์—์„œ ํŽธ์ง‘ํ•œ SQL๋ฌธ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Execute, Execute Selection, ์‹คํ–‰์„ ์ทจ์†Œํ•˜๋Š” Stop, SQL Statements ์ฐฝ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•œ ๋ช…๋ น ์–ด๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ดํ•˜๋Š” History, Previous SQL, Next SQL, ์ƒˆ๋กœ์šด ์ ‘์†์„ ์œ„ํ•œ Connect, ์ ‘์†์„ ๋Š๊ธฐ ์œ„ํ•œ Disconnect, SQL๋ฌธ์˜ ๊ธฐ๋ก์„ ์‹œ์ž‘, ์ข…๋ฃŒํ•˜๋Š” Start Logging, Stop Logging ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Data menu : ํ˜„์žฌ ํˆด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ DB๋กœ ํ˜น์€ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ Import, Export ํ•ด ์ค๋‹ˆ๋‹ค. Import ์‹œ ์ฃผ์˜ํ•  ์ ์€ ๋ฐ์ดํ„ฐ๊ฐ€ insert into values ํ˜•ํƒœ๋กœ ํ•œ๊ฑด ํ•œ๊ฑด ๋“ค์–ด ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์ž‘์šฉ์„ ์ถฉ๋ถ„ํžˆ ์ˆ™์ง€ํ•œ ํ›„์— ์‚ฌ์šฉ ๋ฐ”๋ž๋‹ˆ๋‹ค. Window menu : ์„œ๋ธŒ ์ฐฝ ๋ชจ๋‘๋ฅผ ์ข…๋ฃŒํ•˜๋Š” Close all, ์„œ๋ธŒ ์ฐฝ์˜ ๋ฐฐ์น˜๋ฅผ ์ œ์–ดํ•˜๋Š”Cascade, Tile Horizontally, Tile Vertically, ์—ด๋ ค ์žˆ๋Š” ์„œ๋ธŒ ์ฐฝ์„ ๊ฐ๊ฐ ํ™œ์„ฑํ™” ์‹œํ‚ค๋Š” ๋ฉ”๋‰ด๋“ฑ์ด ์žˆ ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์— Help ๋ฉ”๋‰ด ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค
  • 36. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Win : Interactive SQL JAVA Tools menu : DB์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ์กฐํšŒ, ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Lookup Table Name, Stored Procedure๋ฅผ ์กฐํšŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” Lookup Procedure Name, ์„ค์ •์˜ ๋ณ€๊ฒฝ์„ ๊ฐ€ ๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” Options๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…˜ ์„ค๋ช… : ์˜ต์…˜์€ SYBASE IQ์— ์ ‘์†์‹œ ์„œ๋ฒ„์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ํ•ด๋‹น๋˜๋Š” ๊ฐ๊ฐ์˜ ์˜ต์…˜ ๊ฐ’ ์„ ์ฝ์–ด ๋“ค์—ฌ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์˜ต์…˜์€ Interactive SQL Classic์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • 37. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. UNIX : dbisql ์‹คํ–‰ ํŒŒ์ผ์€ $SYBASE/ASIQ-12_5/bin/dbisql ์ด๋ฉฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•์€ dbisqlc์™€ ์œ ์‚ฌํ•˜๊ณ  ์‹ค ํ–‰ ํ›„์˜ ๋‚ด์šฉ์€ Interactive SQL JAVA์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • 38. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. dbisql command clear : data window ํ˜น์€ results window์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง€์›๋‹ˆ๋‹ค. configure : dbisql ํˆด์˜ ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” option window๋ฅผ ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค. connect : ๊ธฐ์ˆ ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์—ฐ๊ฒฐ์ค‘์ด์—ˆ๋˜ ์ฑ„๋„์€ ์ข…๋ฃŒ๋˜์ง€ ์•Š ๊ณ  ๋น„ํ™œ์„ฑํ™” ๋˜๋ฉฐ ์ƒˆ๋กœ์šด ์ฑ„๋„์ด ํ™œ์„ฑํ™” ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜์˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฑ„๋„์„ ์—ด์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. connect [ to engine-name ] [ database database-name] [ as connection-name ] [ user ] userid [ identified by password ] connect using connect-string disconnect : ํ˜„์žฌ ํ™œ์„ฑ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์—ด๋ ค ์žˆ๋Š” ๋ชจ๋“  ์ฑ„๋„ ๊ณผ์˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋ ค๋ฉด all ์˜ต์…˜์„ ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Commit_On_Exit ์˜ต์…˜์˜ ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ ๋‹ค. disconnect [ { connection-name | current | all } ] exit, quit, bye : dbisql์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. Commit_On_Exit ์˜ต์…˜์˜ ์„ค์ • ๊ฐ’์— ๋”ฐ๋ผ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์˜ COMMIT ํ˜น์€ ROLLBACK์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. help : ASA์—์„œ๋งŒ ์˜จ๋ผ์ธ ๋„์›€๋ง ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • 39. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. dbisql command parameters : quite๋ชจ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” command file์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค. ์„ ์–ธ๋œ ์ดํ›„์— ์ฐธ์กฐ๋  ๋•Œ๋Š” { }๋กœ ์–‘์ชฝ์ด ๊ฐ์‹ธ์ ธ์•ผ ํ•˜๋ฉฐ ๋‚˜์ค‘์— read๋ช…๋ น์–ด๋ฅผ ํ†ต ํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. parameters param1 [,param2,โ€ฆโ€ฆ] read : command file์— ์„ ์–ธ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค. ์˜ˆ) parameter & read % dbisqlc โ€“c dsn=asiqdemo โ€“q read query.sql 50000 % vi query.sql set connection : connect ๋ช…๋ น์–ด์— ์˜ํ•ด ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฑ„๋„ ์ค‘์— ํ™œ์„ฑ ์ฑ„๋„์„ ์„ ํƒ ํ•ฉ๋‹ˆ๋‹ค. parameters param_salary; SELECT emp_lname FROM employee WHERE salary > {param_salary};
  • 40. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. dbisql command set : ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ค์ •๋œ ์˜ต์…˜ ๊ฐ’๋“ค์„ ๋ณ„๋„์˜ ์ฐฝ์— ์ถœ๋ ฅํ•ด ์ค๋‹ˆ๋‹ค. ๊ทธ ์™ธ์— start engine, stop engine, start database, stop database๋“ฑ์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ASA ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋“ค ์ž…๋‹ˆ๋‹ค. SYBASE IQ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž˜๋ชป ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์œผ ๋‹ˆ ์ฃผ์˜ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • 41. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ : Sybase Central SYBASE IQ์™€ ์—ฐ๊ฒฐํ•˜์—ฌ Admin ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋””ํดํŠธ ํˆด์ด๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ, ๋””๋ฐ”์ด์Šค ์ƒ์„ฑ ๋ฐ ์ œ๊ฑฐ ํ…Œ์ด๋ธ”, ๋ทฐ, ์ธ๋ฑ์Šค, Stored Procedure ์ƒ์„ฑ ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน์˜ ๊ถŒํ•œ๊ด€๋ฆฌ
  • 42. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. isql ASE์˜ ๊ธฐ๋ณธ SQL ํŽธ์ง‘ํˆด์ด๋ฉฐ UNIX์™€ Win ๋ชจ๋‘ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์—ฐ๊ฒฐ์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‹คํ–‰ ๋ช…๋ น์–ด์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค isql โ€“Udba โ€“Psql โ€“Sasiqdemo 1> sp_iqstatus 2> go . . . 1> exit ์ฐธ๊ณ  isql ๋ฐ Win ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” SQL Advantage์™€ ๊ฐ™์€ SYBASE Native Driver์ธ OCDK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํˆด๋“ค์€ SYBASE IQ์™€ ์ ‘์†ํ•  ๋•Œ ODBC ์—ฐ๊ฒฐ๊ณผ๋Š” ๊ธฐ๋ณธ ์„ค์ • ์˜ต์…˜๋“ฑ ์—ฌ ๋Ÿฌ ๊ฐ€์ง€๋ฉด์—์„œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ฌ์šฉ์„ ์ž์ œํ•˜์‹œ๊ณ  ๊ผญ ์‚ฌ์šฉํ•˜์‹ค ๋•Œ์—๋„ ์ด ์  ์ถฉ๋ถ„ํžˆ ์ˆ™์ง€ํ•˜์‹œ๊ณ  ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • 43. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Using WatcomSQL
  • 44. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. WatcomSQL WatcomSQL์€ ASA์—์„œ ์‚ฌ์šฉํ•˜๋Š” SQL์–ธ์–ด์ด๋ฉฐ ANSI ํ‘œ์ค€์— ์ถ”๊ฐ€์ ์œผ๋กœ Sybase์˜ ํ–ฅ ์ƒ๋˜์–ด์ง„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์งˆ์˜๋ฅผ ์œ„ํ•œ ๊ตฌ์กฐ์ ์ธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ์งˆ์˜๋ฅผ ์œ„ํ•œ SQL ๋ฌธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ œ์–ด๋ฌธ๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ๋„ ํฌํ•จํ•˜๋Š” ์ ˆ์ฐจ์  ์–ธ์–ด์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. T-SQL์€ Transact-SQL์˜ ์ค„์ž„๋ง๋กœ ASE์—์„œ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” SQL ์–ธ์–ด์ž…๋‹ˆ๋‹ค. SYBASE IQ์—์„œ๋Š” WatcomSQL ๋Œ€๋ถ€๋ถ„์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ASE์™€ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด T-SQL๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์„ ๊ณ ๋ คํ•˜์—ฌ SYBASE IQ์—์„œ๋Š” WatcomSQL ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ  : SYBASE IQ์—์„œ WatcomSQL ๋ชจ๋‘๋ฅผ ์ง€์›ํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ ์ด ๊ต์žฌ์—์„œ ์–ธ๊ธ‰ํ•˜๋Š” WatcomSQL์€ ASA๊ฐ€ ์•„๋‹Œ SYBASE IQ๋ฅผ ์œ„ํ•œ SQL ์ž„์„ ๊ธฐ๋ณธ ์ „์žฌ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํƒœ ์ƒ์ ์ธ ์ธ์—ฐ์œผ๋กœ ์ธํ•˜์—ฌ MS SQL Server์˜ Transact-SQL์€ SYBASE๊ฐ€ ๊ฐœ๋ฐœํ•˜๊ณ  ์ถ”ํ›„ MS๊ฐ€ ์ˆ˜์ •์„ ํ•œ SQL ์–ธ์–ด์ž„์„ ์ฐธ๊ณ ๋กœ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.
  • 45. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. WatcomSQL ์žฅ์  ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ด€๋ จ๋œ ๋ฌธ์žฅ๋“ค์„ ํ•˜๋‚˜์˜ ๋ธ”๋กํ˜•ํƒœ๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์„ ๋ชจ๋“ˆ ํ™”ํ•ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜ ๋“ฑ์˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. IF, LOOP, WHILE ๋“ฑ๊ณผ ๊ฐ™์€ ์ œ์–ด๋ฌธ ๋“ฑ์„ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ์ฐจ์ ์ธ ์–ธ์–ด ๊ตฌ์กฐ๋กœ ๋œ ํ”„๋กœ ๊ทธ๋žจ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์˜ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ SQL ๋ฌธ์žฅ์„ ๋ธ”๋ก์œผ๋กœ ๋ฌถ์–ด ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Stored Procedure์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์„œ๋ฒ„์ชฝ์— ๋‘๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด ์ˆ˜์— ๋Œ€ํ•œ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ†ต์‹ ๋Ÿ‰์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 46. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. compound statement ๊ตฌ์กฐ [ label;] // ์ด๋ฆ„ BEGIN [ ATOMIC ] // ์‹œ์ž‘ [ local-declaration ] // ์ง€์—ญ์„ ์–ธ๋ถ€ statement-list; // ์‹คํ–‰๋ถ€ [ exception ] // ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ถ€ END [ label ] // ์ข…๋ฃŒ BEGIN, END ๋ผ๋Š” keyword๋กœ SQL๋ฌธ์˜ ๋ธ”๋ก์„ ์ƒ์„ฑํ•˜๋ฉฐ ๊ทธ ์•ˆ์— ์ง€์—ญ์„ ์–ธ๋ถ€, ์‹คํ–‰๋ถ€, ์˜ˆ ์™ธ์ฒ˜๋ฆฌ๋ถ€์™€ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ง€์—ญ์„ ์–ธ๋ถ€์™€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ถ€๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ธ”๋ก์€ ์˜ต์…˜์œผ๋กœ ์ด๋ฆ„(LABEL)์„ ์ค„ ์ˆ˜๋„ ์žˆ๊ณ  ๋˜ํ•œ ํ•˜๋‚˜์˜ ๋ธ”๋ก ์„ ๋‹จ์ผ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ BEGIN ๋’ค์— ATOMIC ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋Ÿฌํ•œ BEGIN~END๋กœ ๋ฌถ์—ฌ์ง„ ๋ธ”๋ก๊ตฌ์กฐ๋ฅผ compound statement ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง€์—ญ์„ ์–ธ๋ถ€์—์„œ๋Š” ์ง€์—ญ๋ณ€์ˆ˜, ์ปค์„œ, EXCEPTION, ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ Object๋“ค์€ ๊ทธ compound statement ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ƒ ๋žต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ถ€์—์„œ๋Š” ์ง€์—ญ์„ ์–ธ๋ถ€์—์„œ ์„ ์–ธ๋˜์–ด์ง„ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฃจํ‹ด์ด ํฌํ•จ๋˜์ง€๋งŒ ๊ฒฝ์šฐ ์— ๋”ฐ๋ผ ์ƒ๋žต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ตฌ์กฐ๋Š” ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๊ณ  ํ”„๋กœ์‹œ์ ธ, ํ•จ์ˆ˜๋“ฑ์˜ ๋ชธ์ฒด๋กœ ์‚ฌ์šฉ๋˜์–ด ์ง€๋ฉฐ ๋ธ”๋ก๋‚ด์˜ ๋ชจ๋“  ๊ฐœ ๋ณ„ SQL๋ฌธ์€ ;๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. Compound Statement
  • 47. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. compound statement ๊ตฌ์กฐ ์ฐธ๊ณ  : compound statement ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด declare variable declare exception, exception handler case statement ( not case expression ) cursor for cursor ( declare cursor, open, fetch, close ) execute immediate (Dynamic SQL) signal โ€ฆโ€ฆ
  • 48. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์น˜ ๊ตฌ์กฐ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ SQL ๋ฌธ์žฅ ๋‹จ์œ„๋ฅผ ๋ฐฐ์น˜๋ผ๊ณ  ๋งํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜์—์„œ๋Š” ๊ฑฐ ์˜ ๋ชจ๋“  WatcomSQL๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ๋ฒ•์— ๋”ฐ๋ผ ์–ด๋–ค ๋ฌธ์žฅ์š”์†Œ๋Š” ํ•œ๋ฌธ์žฅ์ด ๋ฐ”๋กœ ๋ฐฐ์น˜๊ฐ€ ๋˜์–ด์•ผ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜๋ฅผ ์ด๋ฃจ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ๋ฐฐ์น˜์—์„œ syntax ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ทธ ๋ฐฐ์น˜ ์ „์ฒด๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ, ํ•ด๋‹น object๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” syntax ์˜ค๋ฅ˜๋กœ ๋ณด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. INSERT, UPDATE, DELETE, SELECT, COMMIT์™€ ๊ฐ™์€ ์งˆ์˜๋ฅผ ์œ„ํ•œ SQL ๊ธฐ๋ณธ ๋ฌธ์žฅ๋“ค ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ SQL๋ฌธ์„ ํ•˜๋‚˜๋กœ ๋ฐฐ์น˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งˆ์ง€๋ง‰ SQL ๋ฌธ์žฅ ๋’ค์— ์„ธ๋ฏธ์ฝœ๋ก  ์œผ๋กœ ๋ฌธ์žฅ์„ ๋ถ„๋ฆฌํ•˜๋ฉด ๋˜์ง€๋งŒ ๊ทธ ์™ธ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ์š”์†Œ๋“ค์€ ๋ฐ˜๋“œ์‹œ ํ•œ ๋ฌธ์žฅ์ด ํ•˜๋‚˜ ์˜ ๋ฐฐ์น˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) INSERT INTO department ( dept_id, dept_name ) VALUES ( 220, 'Eastern Sales' ) UPDATE employee SET dept_id = 220 WHERE dept_id = 200 AND state = 'MA' COMMIT; // 3 statement per 1 batch INSERT INTO department ( dept_id, dept_name ) VALUES ( 220, 'Eastern Sales' ); UPDATE employee SET dept_id = 220 WHERE dept_id = 200 AND state = 'MAโ€˜; COMMIT; // 1 statement per 1 batch
  • 49. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. local variable BEGIN ๋ฐ”๋กœ ๋‹ค์Œ์— DECLARE๋ฌธ์— ์˜ํ•ด compound statement ๋‚ด๋ถ€์—์„œ๋งŒ ์„ ์–ธ๋˜๋ฉฐ ๊ทธ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ BEGIN ~ END ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. ์ฝค๋งˆ์— ์˜ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ™์ด ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋งŒ์•ฝ ํ•„์š” ํ•˜๋‹ค๋ฉด ๋งค๋ฒˆ DECLARE๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๋””ํดํŠธ๋กœ ํŠน์ •ํ•œ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์‹œ์ž‘์€ ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด v_์™€ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋ฌธ์ž ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ ์žฅํ•˜๋ฉฐ ์ด ๋ฌธ์žฅ์˜ ๋์€ ๋ฐ˜๋“œ์‹œ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋‹ซ์•„์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์„ ์–ธ์ด ๋จผ์ € ๋˜์–ด์•ผ ํ•˜๊ณ  ์„ ์–ธ๋  ๋•Œ data type์— ๊ด€๊ณ„์—†์ด NULL ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค syntax DECLARE variable-name date-type; ์˜ˆ) BEGIN DECLARE v_max_sales INTEGER; DECLARE v_half_max NUMERIC(10,0); โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ.. END;
  • 50. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. connection level variable CREATE VARIABLE๋ฌธ์— ์˜ํ•ด compound statement ๋‚ด, ์™ธ๋ถ€์—์„œ ์„ ์–ธ๋˜๋ฉฐ ํ•ด๋‹น ์„ธ์…˜ ์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ DROP VARIABLE๋ฅผ ํ†ตํ•ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค ์ฝค๋งˆ์— ์˜ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ™์ด ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋งŒ์•ฝ ํ•„์š” ํ•˜๋‹ค๋ฉด ๋งค๋ฒˆ CREATE VARIABLE๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๋””ํดํŠธ๋กœ ํŠน์ •ํ•œ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์‹œ์ž‘์€ ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด v_์™€ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋ฌธ์ž ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ ์žฅํ•˜๋ฉฐ ์ด ๋ฌธ์žฅ์˜ ๋์€ ๋ฐ˜๋“œ์‹œ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋‹ซ์•„์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์„ ์–ธ์ด ๋จผ์ € ๋˜์–ด์•ผ ํ•˜๊ณ  ์„ ์–ธ๋  ๋•Œ data type์— ๊ด€๊ณ„์—†์ด NULL ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค syntax CREATE VARIABLE variable-name date-type; ์˜ˆ) CREATE VARIABLE v_max_sales INTEGER; CREATE VARIABLE v_half_max NUMERIC(10,0);
  • 51. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. variable-data type 8 19 20 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615 BIGINT UNSIGNED BIGINT 25-32,768 ~ 32,767SMALLINT 130 ~ 255TINYINT 4 10 11 -2,147,483,648 ~ 2,147,483,647 0 ~ 42,942,967,294 INTEGER UNSIGNED INT 256 + (n - 255)256 <= n <= 32K VARCHAR (n) CHARACTER VARYING (n) n1 <= n <= 255 VARCHAR (n) CHARACTER VARYING (n) n1 <= n <= 255 CHAR (n) CHARACTER (n) Storage (byte) Max Prec. RangeData Type
  • 52. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. variable-data type 10, 1, NULLBIT 64K โ€“1LONG BINARY 32K โ€“ 11 <= n <= (32k โ€“ 1)VARBINARY (n) 2561 <= n <= 255BINARY (n) 2 to 69126-10^38 ~ 10^38 โ€“ 1 DECIMAL (p,s) NUMERIC (p,s) 8152.22 (^308) ~ 1.79 (^308)DOUBLE 47Flatform-dependentREAL 4 or 816Flatform-dependentFLOAT (n) Storage (byte) Max Prec. RangeData Type
  • 53. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. variable-data type 800:00:00.000000 ~ 23:59.59.999999TIME 8 0001/01/01 00:00:00.000000 ~ 9999/12/31 23:59:59.999999 DATETIME SMALLDATETIME TIMESTAMP 40001/01/01 ~ 9999/12/31DATE Storage (byte) Max Prec. RangeData Type
  • 54. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์— ๊ฐ’ ํ• ๋‹นํ•˜๊ธฐ SET๋ฌธ์„ ํ†ตํ•ด์„œ CREATE PROCEDURE greater_proc ( IN v_a INT, IN v_b INT, OUT v_c INT ) BEGIN IF v_a > v_b THEN SET v_c = v_a; ELSE SET v_c = v_b; END IF; END single row SELECT๋ฌธ์„ ํ†ตํ•ด์„œ BEGIN DECLARE v_customer_id INT; DECLARE v_orders INT; SELECT COUNT(b.id) INTO v_orders FROM customer a, sales_order b WHERE a.id = b.id AND a.id = v_customer_id; END // ๋งŒ์•ฝ select ํ•œ ๊ฒฐ๊ณผ๊ฐ€ 2๊ฑด ์ด์ƒ์ด๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • 55. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. temporary table ํ”„๋กœ๊ทธ๋žจ๋ฐ ์–ธ์–ด์—์„œ ์ž„์‹œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์™”๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ SQL ์ด๋ž€ ์–ธ์–ด๋Š” ์ทจ๊ธ‰ํ•˜๋Š” ๋Œ€์ƒ์ด ํ•œ๊ฑด ํ•œ๊ฑด์˜ ๋ฐ์ดํ„ฐ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ง‘ํ•ฉ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ ์ด๊ธฐ ๋•Œ๋ฌธ ์— ์ด๋Ÿฐ ์ง‘ํ•ฉ ๋‹จ์œ„์˜ ์ž„์‹œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•œ๋ฐ ์ด๋ฅผ ์ถฉ์กฑํ•  ๋งŒํ•œ ๊ฒƒ์ด ์ž„์‹œ ํ…Œ์ด๋ธ” (in-line view ํฌํ•จ) ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์ด ์งˆ์˜๋ฅผ ์ปดํŒŒ์ผ ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•  ๋•Œ GROUP BY, ORDER BY, JOIN ๊ณผ ๊ฐ™์€ ์ž‘์—… ์—ญ์‹œ๋„ ํ•œ ๋ฒˆ์˜ ์ž‘์—…์œผ๋กœ ๊ทธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€์ ์œผ ๋กœ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž„์˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์—”์ง„์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ์ž„์‹œ ์ €์žฅ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ์ž„์‹œ ํ…Œ ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž„์˜์˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด์„œ ์–ป๋Š” ์ด์ ์€ ๊ทธ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ์ž„์‹œ ์ €์žฅ๋Ÿ‰์ด ๋งŽ์„ ๊ฒฝ์šฐ ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ๋ˆ„๊ฐ€ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋˜์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž‘์—…๋˜๋Š” ์˜์—ญ์€ IQ TEMPORARY STORE ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ  : In-line view vs. Temp table ์ผ๋ฐ˜์ ์œผ๋กœ FROM ์ ˆ์— ์ž„์‹œ ๊ณ„์‚ฐ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” In-line view ํ˜•ํƒœ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๊ฐ™ ์€ ์šฉ๋„๋กœ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ์ •๋„๋กœ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์ด ์‚ฐ์ถœ๋˜๋Š” ๊ฒฐ๊ณผ๋ผ๋ฉด ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค ์–ด ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๊ณผ์ •์ƒ ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.
  • 56. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. local temporary table compound statement ๋‚ด/์™ธ๋ถ€์—์„œ ๋งŒ๋“ค์–ด์ง€๋ฉฐ ๋งŒ๋“ค์–ด์ง„ ์˜์—ญ์„ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์„ธ์…˜์„ ๋งˆ์น˜ ๊ฑฐ๋‚˜ DROP TABLE๋ฌธ์„ ๋งŒ๋‚˜๋ฉด ์‚ญ์ œ๋˜๋‚˜ DROP TABLE ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. DECLARE LOCAL TEMPORARY TABLE ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ์„ธ์…˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ์ด ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ ๋ณธ์ ์œผ๋กœ COMMIT ์‹œ์— ์‚ญ์ œ๋˜์ง€๋งŒ ์˜ต์…˜์œผ๋กœ ์ €์žฅ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž„์‹œ ํ…Œ์ด๋ธ”์ด๋ผ๋„ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ์— ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋Š” ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ”„๋กœ์‹œ์ ธ ๋‚ด๋ถ€์—์„œ ๋งŒ๋“ ๋‹ค๋ฉด ์ž„์‹œ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์€ ๊ทธ ํ”„๋กœ์‹œ์ ธ์˜ ์ด๋ฆ„๊ณผ ์—ฐ๊ด€์ด ์žˆ ๋„๋ก ๋ช…๋ช…ํ•˜๋Š” ํŽธ์ด ๋””๋ฒ„๊น…์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค syntax DECLARE LOCAL TEMPORARY TABLE table-name ( { column-definition [ column-constraintโ€ฆ.] | table-constraint }, โ€ฆ) ON COMMIT { DELETE | PRESERVE } ROWS ]; ์˜ˆ) DECLARE LOCAL TEMPORARY TABLE customer_temp ( cust_id INT, cust_name char(20), cust_address char(255) ) ON COMMIT PRESERVE ROWS;
  • 57. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. global temporary table compound statement ๋‚ด/์™ธ๋ถ€์—์„œ ๋งŒ๋“ค์–ด์ง€๋ฉฐ DROP TABLE๋ฌธ์„ ๋งŒ๋‚˜๋ฉด ์‚ญ์ œ๋˜๋ฉฐ ์—ฐ ๊ฒฐ์ƒํƒœ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ํ…Œ์ด๋ธ” ์ •์˜๋Š” ๋ณด๊ด€๋ฉ๋‹ˆ๋‹ค. CREATE GLOBAL TEMPORARY TABLE ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ์„ธ์…˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ์ด ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž„์‹œ ํ…Œ ์ด๋ธ”์— ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ COMMIT ์‹œ์— ์‚ญ์ œ๋˜์ง€๋งŒ ์˜ต์…˜์œผ๋กœ ์ €์žฅ์ƒํƒœ๋ฅผ ์œ  ์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž„์‹œ ํ…Œ์ด๋ธ”์ด๋ผ๋„ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ์— ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๋Š” ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ ๋งŒ์•ฝ ํ”„๋กœ์‹œ์ ธ ๋‚ด๋ถ€์— ์„œ ๋งŒ๋“ ๋‹ค๋ฉด ์ž„์‹œ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์€ ๊ทธ ํ”„๋กœ์‹œ์ ธ์˜ ์ด๋ฆ„๊ณผ ์—ฐ๊ด€์ด ์žˆ๋„๋ก ๋ช…๋ช…ํ•˜๋Š” ํŽธ์ด ๋”” ๋ฒ„๊น…์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค syntax CREATE GLOBAL TEMPORARY TABLE table-name ( { column-definition [ column-constraintโ€ฆ.] | table-constraint }, โ€ฆ) ON COMMIT { DELETE | PRESERVE } ROWS ]; ์˜ˆ) CREATE GLOBAL TEMPORARY TABLE customer_temp ( cust_id INT, cust_name char(20), cust_address char(255) ) ON COMMIT PRESERVE ROWS;
  • 58. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ  DECLARE LOCAL TEMPORARY TABLE employee ( emp_id INT NOT NULL, lname CHAR(30) NOT NULL, fname CHAR(30) NOT NULL, salary UNSIGNED INT NOT NULL, dept_id INT NOT NULL ) IN SYSTEM ์œ„์˜ ํ…Œ์ด๋ธ”์€ SYBASE IQ Temporary Store ์˜์—ญ์— ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  ASA์˜ ์ž„์‹œ๊ณต๊ฐ„์ธ /tmp/.SQLAnywhere/์— ํœ˜๋ฐœ์„ฑ ํŒŒ์ผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ 2GB์˜ ํŒŒ์ผํฌ๊ธฐ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ ๋‹ค. ์ด ํ•œ๊ณ„ ๊ฐ’์— ๋„๋‹ฌํ•˜๋ฉด IQ Server๊ฐ€down๋˜๊ฑฐ๋‚˜ hang ์ƒํƒœ๊ฐ€ ๋˜๋Š”๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ถ€์ž‘ ์šฉ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.IQ์—์„œ ASA๋Š” ๋‹จ์ˆœํžˆ Catalog๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋“ค์˜ ์‚ฌ์šฉ์„ ๊ธˆ ํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค. local temporary table vs. global temporary table ETL ์ž‘์—…์—์„œ CDC ๋ฐ์ดํ„ฐ๋ฅผ ๋ณธ ํ…Œ์ด๋ธ”์— ๋ฐ˜์˜ํ•˜๊ธฐ ์ „์— ๋กœ๋”ฉํ•˜๊ธฐ ์œ„ํ•œ ์ž„์‹œ ํ…Œ์ด๋ธ” ํ˜•ํƒœ ์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋นˆ๋„๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ๋Š” global temporary table์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ์„œ๋ฒ„์—๊ฒŒ ํ…Œ์ด ๋ธ”์„ ๋งค๋ฒˆ ๋งŒ๋“œ๋Š” ๋ถ€๋‹ด์„ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 59. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. if ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์กฐ๊ฑด์ด TRUE ์ด๋ฉด THEN ~ ELSE ์‚ฌ์ด์˜ ๋ฌธ์žฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  FALSE, NULL ์ด๋ฉด ELSE ~ END IF ์‚ฌ์ด์˜ ๋ฌธ์žฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด IF ~ ELSE๋ฌธ์„ ์ค‘์ฒฉํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” IF ~ ELSEIF ~ ELSE๋‚˜ CASE ๋ฌธ์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žฅ ๊ตฌํ˜„์‹œ ELSEIF ๋ฌธ์˜ ์ŠคํŽ ๋ง๊ณผ ์ข…๋ฃŒ์‹œ์— END IF์˜ ์‚ฌ์šฉ์— ์ฃผ์˜ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์กฐ๊ฑด์ ˆ์—์„œ NULL ๊ฐ’์— ๋Œ€ํ•œ ๋น„๊ต๋Š” IS NULL ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. syntax IF search-condition THEN statement-list; [ ELSEIF search-condition THEN statement-list; ] [ ELSE statement-list; ] END IF;
  • 60. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. case(1) ์ค‘์ฒฉ๋œ IF๋ฌธ ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๊ฐ€ CASE ์ž… ๋‹ˆ๋‹ค. ์ด๋ฅผ CASE statement๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žฅ๊ตฌํ˜„ ์ข…๋ฃŒ์‹œ์— END CASE์˜ ์‚ฌ์šฉ์— ์ฃผ์˜ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. syntax CASE value-expression WHEN [ constant | NULL ] THEN statement-list; [ WHEN [ constant | NULL ] THEN statement-list; ] ELSE statement-list; END CASE; ์˜ˆ) BEGIN DECLARE prod_name CHAR(20); DECLARE type CHAR(10); SELECT name INTO prod_name FROM product WHERE id = 10; CASE prod_name WHEN โ€˜Tee Shirtโ€™ THEN SET type = โ€˜SHIRTโ€™ ELSE SET type = โ€˜Unknownโ€™ END CASE; END
  • 61. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. case(2) SELECT์ ˆ์˜ ํ˜น์€ ์ปฌ๋Ÿผ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ ˆ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ปฌ๋Ÿผ์˜ ๋ถ„๊ธฐ์กฐ๊ฑด ์ด ๋‚˜ํƒ€๋‚  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ CASE expression ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ์˜ WatcomSQL์—์„œ๋Š” SELECT ์ ˆ์— IF๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ์ปค์„œ์˜ ์‚ฌ์šฉ ๋นˆ ๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด CASE ํ‘œํ˜„์‹์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋ฉฐ ์ข…๋ฃŒ์‹œ์— END์˜ ์‚ฌ์šฉ์— ์ฃผ์˜ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. syntax CASE expression WHEN expression THEN expression [ ELSE expression ] END ์˜ˆ) SELECT id, SELECT name, ( case name ( case when โ€˜Tee Shirtโ€™ then โ€˜Shirtโ€™ when id=โ€˜1โ€™ then โ€˜Shirtโ€™ when โ€˜Sweatshirtโ€™ then โ€˜Shirtโ€™ when id=โ€˜2โ€™ then โ€˜Shirtโ€™ when โ€˜Baseball capโ€™ then โ€˜Hatโ€™ when id=โ€˜3โ€™ then โ€˜Hatโ€™ else โ€˜Unknownโ€™ else โ€˜Unknownโ€™ end ) as Type end ) as Type FROM product; FROM product;
  • 62. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. loop ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฃจํ”„๋กœ LOOP ~ END LOOP ์‚ฌ์ด์— ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์žฅ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ํƒˆ ์ถœ์กฐ๊ฑด์„ ์ œ์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌดํ•œ๋ฃจํ”„๊ฐ€ ๋˜์–ด ์‹œ์Šคํ…œ์— ๋งŽ์€ ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ํŠน ์ •ํ•œ ์กฐ๊ฑด์„ ์ฃผ๊ณ  LEAVE ๋ฌธ์„ ํ†ตํ•ด ๋ฃจํ”„๋ฅผ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. syntax [ statement-label : ] LOOP statement-list; END LOOP [ statement-label ] ์˜ˆ) โ€ฆโ€ฆโ€ฆ SET i = 1; insert_loop: LOOP INSERT INTO counter (number) VALUES (i); IF i >= 10 THEN LEAVE insert_loop; END IF; SET i = i + 1; END LOOP insert_loop // ์œ„ ์˜ˆ๋Š” ์˜ค์ง LOOP๋ฌธ์„ ์œ„ํ•œ ์˜ˆ๋กœ ์‹ค์ œ ์ด๋Ÿฐ ์ž…๋ ฅ๋ฌธ์˜ ์‚ฌ์šฉ์„ ์ž์ œ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • 63. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. while loop ์กฐ๊ฑด์ด TRUE ์ธ ๋™์•ˆ๋งŒ ์ผ๋ จ์˜ ๋ฌธ์žฅ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ์กฐ๊ฑด์€ ๋ฐ˜๋ณต์ด ์‹œ์ž‘๋  ๋•Œ ์ฒดํฌํ•˜๊ฒŒ ๋˜์–ด ๋ฃจํ”„๋‚ด์˜ ๋ฌธ์žฅ์ด ํ•œ๋ฒˆ๋„ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํ”„๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์กฐ๊ฑด์ด FALSE ์ด๋ฉด ๋ฃจํ”„๋ฅผ ํƒˆ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. syntax [ statement-label : ] WHILE search-condition LOOP statement-list; END LOOP [ statement-label ] ์˜ˆ) SET i = 1; insert_loop: WHILE i <= 10 LOOP INSERT INTO counter (number) VALUES (i); SET i = i + 1; END LOOP insert_loop // ์œ„ ์˜ˆ๋Š” ์˜ค์ง WHILE LOOP๋ฌธ์„ ์œ„ํ•œ ์˜ˆ๋กœ ์‹ค์ œ ์ด๋Ÿฐ ์ž…๋ ฅ๋ฌธ์˜ ์‚ฌ์šฉ์„ ์ž์ œ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • 64. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. cursor for loop ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” index counter๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ๊ฐ€๋ฉฐ ํŠน์ • ๋ฌธ์žฅ์„ ๋ฐ˜๋ณตํ•˜๋Š” FOR LOOP์™€ ๋‹ค๋ฅด๋ฉฐ ์˜ค์ง ์ปค์„œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ FETCH ๋กœ์ง์„ ์ปค์„œ์˜ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ž๋™์œผ๋กœ ์ปค์„œ๊ฐ€ close ๋˜๋Š” ๋“ฑ ํŽธ๋ฆฌํ•œ ๋ฉด์ด ์žˆ์Šต๋‹ˆ๋‹ค. BEGIN ~ END ์‚ฌ์ด์˜ compound statement ๋‚ด ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. syntax FOR for-loop-name AS cursor-name CURSOR FOR statement DO statement-list; END FOR ์˜ˆ) CREATE VARIABLE v_emp_name CHAR(30); FOR names AS curs CURSOR FOR SELECT emp_name FROM employee DO SET v_emp_name = emp_name; CALL search_for_name_proc ( v_emp_name ); END FOR;
  • 65. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. cursor SELECT ๋ฌธ์— ์˜ํ•ด ์‚ฐ์ถœ๋˜๋Š” ๋‹ค์ค‘ ํ–‰์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ปค์„œ์ž…๋‹ˆ๋‹ค ์งˆ์˜์— ์˜ํ•ด ์‚ฐ์ถœ๋œ ์ฒซ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ์ฒ˜๋ฆฌ๋˜๋Š” ํ–‰์˜ ํŠธ๋ž™์„ ์œ ์ง€ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠนํžˆ DW์™€ ๊ฐ™์ด ๋Œ€์šฉ๋Ÿ‰์ผ ๊ฒฝ์šฐ์—๋Š” ์ปค์„œ์˜ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ถ€๋‹ดํ•ด์•ผ ํ•˜๋Š” ๋น„์šฉ์ด ๋งค์šฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ปค์„œ ์‚ฌ์šฉ์„ ์ตœ์†Œ๋กœ ์ค„์—ฌ์ฃผ์‹ญ์‹œ์˜ค. ์ปค์„œ์˜ ํ๋ฆ„ DECLARE : ๋ช…์‹œ์ ์œผ๋กœ ์ปค์„œ๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด ์ปค์„œ๋ฅผ ์œ„ํ•œ SELECT์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค. DECLARE cursor-name [ no scroll | dynamic scroll | scroll ] CURSOR FOR select-statement; DECLARE OPEN FETCH CLOSEmore?
  • 66. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. cursor OPEN : ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋ชจ๋“  ํ–‰์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฐ๊ณผ ์…‹์„ ์ƒ์„ฑ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ์ดํ›„ ์ปค์„œ๋Š” ๊ฒฐ๊ณผ ์…‹์—์„œ ์ฒซ๋ฒˆ์งธ ํ–‰์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. OPEN cursor-name; FETCH : ๊ฒฐ๊ณผ ์…‹์—์„œ ํ•˜๋‚˜์˜ ํ–‰์„ ์ฝ๊ณ  ๊ทธ ํ›„์— ์ปค์„œ๋Š” ๊ฒฐ๊ณผ ์…‹์˜ ๋‹ค์Œ ํ–‰์œผ๋กœ ์ด๋™ ๋ณดํ†ต ์—ฌ๋Ÿฌ ๋ฒˆ์˜ FETCH๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ด€๊ณ„๋กœ LOOP๋ฌธ์—์„œ ์ฃผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. FETCH cursor-name INTO variable-list; CLOSE : ์ปค์„œ๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ํ•˜๊ณ  ๊ฒฐ๊ณผ ์…‹์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. CLOSE cursor-name; ์œ„ ์ฒ˜๋Ÿผ ์ปค์„œ๋ฅผ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  for loop์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” cursor for loop ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฃจํ”„๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ FETCH ๋˜๊ณ  ๋ชจ๋“  ํ–‰์ด ์ฒ˜๋ฆฌ๋˜๋ฉด ์ž๋™์œผ๋กœ ์ปค์„œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • 67. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. cursor ์˜ˆ) CREATE PROCEDURE cur_proc() BEGIN DECLARE err_not_found EXCEPTION FOR SQLSTATE โ€˜02000โ€™; DECLARE reg CHAR(20); DECLARE cyear CHAR(4); DECLARE sqty DECIMAL(12); DECLARE test_cur CURSOR FOR SELECT cust_reg, order_year, sum(order_qty) FROM customer a, order_detail b WHERE a.cust_id = b.cust_id GROUP BY cust_reg, order_year FOR READ ONLY; OPEN test_cur; curloop: LOOP FETCH test_cur INTO reg, cyear, sqty; IF SQLSTATE = err_not_found LEAVE curloop; END IF; END LOOP curloop; CLOSE test_cur; END
  • 68. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. resume dbisql๊ณผ ๊ฐ™์€ ํˆด์—์„œ๋Š” SELECT ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์ƒ์— ์ถœ๋ ฅํ•  ๋•Œ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ๋ฐ ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ๊ทธ ๊ฒฐ๊ณผ์˜ ์ผ๋ถ€๋ถ„๋งŒ์„ ๋จผ์ € ์ถœ๋ ฅํ•˜๋Š” ์ปค์„œํ˜•ํƒœ์˜ ๋ฐฉ์‹์„ ์  ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ปค์„œ๊ฐ€ OPEN๋œ ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น๋˜๋Š” ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์–ด๋– ํ•œ ์ข…๋ฅ˜์˜ DDL ๋ฌธ์„ ์ˆ˜ ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.์ด๋Ÿด๋•Œ ๊ทธ ์ปค์„œ๋ฅผ CLOSE ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ RESUME ์ž…๋‹ˆ ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ stored procedure๋„ ๋˜‘๊ฐ™์ด ์ ์šฉ์ด ๋˜์–ด ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” stored procedure๋„ RESUME๋ฅผ ํ•ด์ฃผ๊ธฐ ์ „๊นŒ์ง€๋Š” DROP ์ด๋‚˜ ALTER ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ) SELECT emp_name FROM employee SELECT name FROM product; dbisql๊ณผ ๊ฐ™์€ ํˆด์—์„œ ์œ„ ์ฒ˜๋Ÿผ ํ•œ ๋ฐฐ์น˜์—์„œ ๋‘ ๊ฐœ์˜ SELECT๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฒฐ ๊ณผ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์—ฌ์ง€๊ณ  RESUME ์„ ํ•ด์•ผ๋งŒ ๋‘ ๋ฒˆ์งธ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ  SELECT๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„์— RESUME ๋งŒ ์‹คํ–‰ํ•œ ์ƒํƒœ๋Š” CURSOR๊ฐ€ ๋‹ซํ˜€์žˆ๋Š” ์ƒํƒœ์ง€๋งŒ ์•„์ง ๊นŒ์ง€๋„ SELECTํ•œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ shared lock์„ releaseํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.์ด lock๊นŒ์ง€ ๋ฅผ release ํ•˜๋ ค๋ฉด RESUME ํ›„์— COMMIT์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • 69. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. set option ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚ด์— ๋””ํดํŠธ๋กœ ์„ ์–ธ๋˜์–ด์ง„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ์ด ๋˜ ๋Š” ์˜ต์…˜์—๋Š” IQ ์˜์—ญ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์˜ต์…˜, ASA ์˜์—ญ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์˜ต์…˜, dbisql ์˜์—ญ ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์˜ต์…˜, ESQLC ์˜์—ญ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ์˜ต์…˜ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฉ”๋‰ด์–ผ์„ ์ฐธ๊ณ  ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ค‘์ธ ์„ธ์…˜์—์„œ๋งŒ ๋ฐ”๊พธ๋ ค๋ฉด TEMPORARY๋ผ๋Š” keyword๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์ƒ๋žต์‹œ๋Š” PERMANENT ํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. user-name์„ ์ƒ๋žตํ•˜๋ฉด ํ˜„์žฌ ์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉ์ค‘์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋””ํดํŠธ์ด๋ฉฐ ๋ชจ๋“  ์‚ฌ์šฉ์ž์— ๊ฒŒ ์ ์šฉ์‹œ์—๋Š” PUBLIC์ด๋ผ๋Š” group-name์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. syntax SET [temporary] OPTION [user-name|public.]option-name = value; SET OPTION PUBLIC.Load_Memory_MB = 400; SET TEMPORARY OPTION Query_Plan = โ€˜Onโ€™; SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜/asiq/data/test.datโ€™;
  • 70. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์„ Double Hyphen(--) ํ•œ ์ค„์—์„œ ์ด ๋ฌธ์ž ๋’ค์˜ ๋ฌธ์ž๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค Double Slash(//) ํ•œ ์ค„์—์„œ ์ด ๋ฌธ์ž ๋’ค์˜ ๋ฌธ์ž๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. -- ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค Slash-Asterisk(/* */) /* ์™€ */ ์‚ฌ์ด์˜ ๋ชจ๋“  ๋ฌธ์ž๋Š” ์ค„์— ๊ด€๊ณ„์—†์ด ์ฃผ์„์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค Percent sign(%) Percent_as_comment ์˜ต์…˜์˜ ๊ฐ’์ด ON ์ด๋ฉด โ€“ ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค
  • 71. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. dynamic SQL SQL keyword๋‚˜ object์˜ ์ด๋ฆ„์„ ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ์‹คํ–‰์‹œ์— ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์ƒˆ๋กœ์šด SQL๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. EXECUTE IMMEDIATE ๋ฌธ์— ์‚ฌ์šฉ๋˜์–ด์ง„ ๋ณ€์ˆ˜๋“ค์€ string ํ˜•ํƒœ์—ฌ์•ผ ํ•˜๋ฉฐ 2๊ฑด ์ด์ƒ์˜ ๊ฒฐ ๊ณผ ์…‹์„ returnํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. BEGIN ~ END ์‚ฌ์ด์˜ compound statement ๋‚ด ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. syntax EXECUTE IMMEDIATE string-expr; ์˜ˆ) CREATE PROCEDURE CreateTable_proc( in v_tablename char(30) ) BEGIN EXECUTE IMMEDIATE โ€˜CREATE TABLE โ€˜ || v_tablename || โ€˜ ( column1 int,โ€ฆโ€ฆโ€ฆโ€ฆ)โ€™; END
  • 72. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. message ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ณณ์„ CONSOLE๊ณผ LOG๋กœ ์ง€์ •ํ•˜ ๋ฉด server log ํŒŒ์ผ์ด๊ณ  CLIENT๋กœ ์ง€์ •ํ•˜๋ฉด dbisql๊ณผ ๊ฐ™์€ ์œˆ๋„์šฐ๋ฅผ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธ ํŠธ์ž…๋‹ˆ๋‹ค. ๋‹จ, server log = $SYBASE/ASIQ-12_5/logfiles/srvname.xxx.srvlog ๋˜ํ•œ MESSAGE TYPE์„ INFO, STATUS๋ผ ํ•˜๋ฉด Message Window์—, ACTION, WARNING์ด๋ผ ํ•˜๋ฉด Message Box์— ํ•ด๋‹น ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. syntax MESSAGE expression [ TYPE { INFO | ACTION | WARNING | STATUS } ] [ TO { CONSOLE | CLIENT | LOG } ] ์˜ˆ) MESSAGE โ€˜The current date and time: โ€™, Now() TYPE INFO TO CLIENT; ์ฐธ์กฐ : SQL์‚ฌ์šฉ ์ค‘์— UNIX ๋ช…๋ น์–ด ์‚ฌ์šฉํ•˜์—ฌ Message ์ถœ๋ ฅ CREATE VARIABLE MsgText VARCHAR(255); CREATE VARIABLE CurrTime VARCHAR(30); SET CurrTime = CAST(NOW() AS VARCHAR(30)); SET MsgText = โ€˜echo the message you want to send to the file ' || ' at ' || CurrTime || โ€˜ >> /tmp/outputfile.txt'; CALL xp_cmdshell(MsgText); // OS ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” SP
  • 73. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. exception EXCEPTION ์ด๋ž€ compound statement ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ด๋Ÿฐ EXCEPTION์€ SYBASE IQ ์—”์ง„์— ์˜ํ•ด ์ƒ์„ฑ๋  ์ˆ˜๋„ ์žˆ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜์ ์œผ๋กœ ๋งŒ๋“ค์–ด ๋ฐœ์ƒ ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. compound statement ์ˆ˜ํ–‰์‹œ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ์‹œ์ ์—์„œ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ๊ด€๋ จ๋œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ ๋ถ€๋ถ„์œผ๋กœ ์ œ์–ด๋ฅผ ์˜ฎ๊ฒจ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋งˆ์ง€๋ง‰ ์กฐ์น˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ ๋Š” ๊ตฌ์กฐ๊ฐ€ exception handler ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ exception handler๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฏธ๋ฆฌ ์ž๋™์œผ๋กœ ์ •์˜๋œ ์˜ˆ์™ธ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜์ ์œผ๋กœ DECLARE ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ์„ ์–ธํ•˜์—ฌ์•ผ ํ•˜๋ฉฐ ๋˜ํ•œ ์„ ์–ธ๋œ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์„ EXCEPTION๋ฌธ์— ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ SQLCODE, SQLSTATE ๋‘ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜ ์ฝ”๋“œ ๋ฐ ์ƒ ํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. syntax DECLARE exception-name EXCEPTION FOR SQLSTATE sqlstate-number; EXCEPTION [ WHEN exception-name THEN statement-list; โ€ฆโ€ฆ] [ WHEN exception-name THEN statement-list; โ€ฆโ€ฆ] WHEN OTHER THEN statement-list;
  • 74. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. exception ์˜ˆ) BEGIN DECLARE column_not_found EXCEPTION FOR SQLSTATE โ€˜52003โ€™; // ์˜ˆ์™ธ์„ ์–ธ MESSAGE โ€˜Hello !!!โ€™ TO CLIENT; SIGNAL column_not_found; // ์˜ˆ์™ธ๋ฐœ์ƒ MESSAGE โ€˜Line following signal !!!โ€™ TO CLIENT; // ์ˆ˜ํ–‰์•ˆ๋จ EXCEPTION // ์˜ˆ์™ธ์ฒ˜๋ฆฌ WHEN column_not_found THEN // 52003 ์˜ˆ์™ธ์ด๋ฉด MESSAGE โ€˜52003 handling. (SQLSTATE = โ€™, SQLSTATE, โ€˜)โ€™ TO CLIENT; WHEN others THEN // ๊ทธ ์™ธ ์˜ˆ์™ธ์ด๋ฉด MESSAGE โ€˜Others handling. (SQLSTATE = โ€™, SQLSTATE, โ€˜)โ€™ TO CLIENT; END
  • 75. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. exception ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜์˜ ์˜ˆ์™ธ(SQLSTATE) ๊ฒฝ์šฐ๋ฅผ ๋งŒ๋“ค์–ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๋•Œ ์ฃผ ์˜ ํ•  ์ ์€ ์„ ์–ธ ๊ฐ€๋Šฅํ•œ SQLSTATE ๋ฒˆํ˜ธ๋Š” 99000 ~ 99999 ์ด๋ผ๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ทธ ์™ธ์˜ ๋ฒˆํ˜ธ๋Š” ์‹œ์Šคํ…œ์ด ์˜ˆ์•ฝํ•œ ๋ฒˆํ˜ธ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ) BEGIN DECLARE my_exception EXCEPTION FOR SQLSTATE โ€˜99000โ€™; // ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์„ ์–ธ MESSAGE โ€˜User-Defind Exception test !!!โ€™ TO CLIENT; // ์—ฌ๊ธฐ์— ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“œ๋Š” ์กฐ๊ฑด์ ˆ์„ ์ž…๋ ฅ SIGNAL my_exception; // ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋ฐœ์ƒ MESSAGE โ€˜Line following signal !!!โ€™ TO CLIENT; // ์ˆ˜ํ–‰์•ˆ๋จ EXCEPTION // ์˜ˆ์™ธ์ฒ˜๋ฆฌ WHEN my_exception THEN // ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ์ด๋ฉด MESSAGE โ€˜my_exception handling. (SQLSTATE = โ€™, SQLSTATE, โ€˜)โ€™ TO CLIENT; WHEN others THEN // ๊ทธ ์™ธ ์˜ˆ์™ธ์ด๋ฉด MESSAGE โ€˜Others handling. (SQLSTATE = โ€™, SQLSTATE, โ€˜)โ€™ TO CLIENT; END
  • 76. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. signal ์‹œ์Šคํ…œ์—์„œ ์ œ๊ณต๋œ SQLSTATE ํ˜น์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  SQLSTATE๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” compound statement ๋‚ด ์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋จผ์ € DECLARE๋ฌธ์— ์˜์— sqlstate-number์— ํ•ด๋‹นํ•˜๋Š” exception-name์„ ์„ ์–ธํ•œ ํ›„์— ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” SQLSTATE ๋ฒˆํ˜ธ๋Š” 99000 ~ 99999 ์ž… ๋‹ˆ๋‹ค. syntax DECLARE exception-name EXCEPTION FOR SQLSTATE sqlstate-number; SIGNAL exception-name; ์˜ˆ) BEGIN DECLARE column_not_found EXCEPTION FOR SQLSTATE โ€˜52003โ€™; SIGNAL column_not_found; END
  • 77. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. traceback compound statement ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ์ง€์ ํ•ด ์ค๋‹ˆ๋‹ค.๋‹จ, syntax ์˜ค๋ฅ˜๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. syntax TRACEBACK(*) ์˜ˆ) BEGIN . . . SELECT prod_name FROM employee; . END SELECT traceback(*);
  • 78. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐํƒ€ SELECT statement INSERT statement UPDATE statement DELETE statement GRANT statement REVOKE statement CREATE TABLE | PROCEDURE | FUNCTION | INDEX statement BEGIN TRANSACTION statement COMMIT, ROLLBACK statement SAVEPOINT statement RELEASE SAVEPOINT statement LOAD TABLE statement โ€ฆโ€ฆ.. ์œ„ ๋‚ด์šฉ๋“ค์€ ๊ณ„์†ํ•ด์„œ ์ง„ํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ์žฅ์—์„œ ์–ธ๊ธ‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • 79. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Selecting data from a table
  • 80. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. overview syntax SELECT select-list // select ์ ˆ [ FROM table-expression ] // from ์ ˆ [ ON join-condition ] // on ์ ˆ [ WHERE search-condition ] // where ์ ˆ [ GROUP BY column-list ] // group by ์ ˆ [ HAVING search-condition ] // having ์ ˆ [ ORDER BY column-list ] // order by ์ ˆ SELECT ๋ฌธ์— ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” SQL Keyword๋Š” ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ณ„์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ฌธ์ž๋กœ ๋งŽ์ด ํ‘œํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. SELECT๋ฌธ์„ ํ˜•์„ฑํ•˜๋Š” SELECT, FROM, WHERE ์ ˆ๊ณผ ๊ฐ™์€ ๊ฐ ์ ˆ์€ ๋ผ์ธ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ ๊ธฐ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช…๊ณผ ๊ฐ™์€ Identifier๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„์„ ํ•˜์ง€ ์•Š์ง€๋งŒ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋‚˜ string๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ์‹œ์˜ ์˜ต์…˜์— ์˜ํ•ด ๊ตฌ๋ณ„ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ Object ์ฐธ์กฐ์‹œ ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด owner ๋ช…๊ณผ ๊ฐ™์€ qualifier๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 81. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. select ์ ˆ select-list๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌ๋œ ์•ก์„ธ์Šค๋ฅผ ์›ํ•˜๋Š” ์ปฌ๋Ÿผ, ์‚ฐ์ˆ ์‹, aggregate ํ•จ์ˆ˜, ํ˜น์€ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์ง€์นญํ•˜๋Š” *๋กœ ๊ตฌ์„ฑ๋˜์–ด ์ง‘๋‹ˆ๋‹ค. ์งˆ์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋Š” ๊ฐ ์ปฌ๋Ÿผ์˜ ํ—ค๋”ฉ์€ select-list์— ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” expression์„ ๋””ํดํŠธ ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ํ—ค๋”ฉ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ alias๋ฅผ ์‚ฌ์šฉ ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. SELECT column-name AS alias SELECT column-name alias SELECT alias = column-name alias์— space ๋˜๋Š” keyword๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด โ€œ๋กœ ์–‘์ชฝ์„ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. SELECT dept_id AS โ€œintegerโ€ FROM โ€ฆ select-list์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์‚ฌ์น™์—ฐ์‚ฐ๊ณผ ๊ฐ™์€ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฐ์ˆ  ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SELECT name, ( quantity * unit_price ) โ€“ 5 FROM โ€ฆ concatenation ์—ฐ์‚ฐ์ž || ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด๋“ค์„ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SELECT f_name || l_name โ€œ์„ฑ๋ช…โ€ FROM โ€ฆ
  • 82. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. select ์ ˆ select-list์— ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌํ„ฐ๋Ÿด์€ alias๋‚˜ ์ปฌ๋Ÿผ๋ช…์ด ์•„๋‹Œ select ์ ˆ์— ํฌํ•จ๋œ ๋ฌธ์ž, ํ‘œํ˜„์‹, ์ˆซ์ž์ด์ง€๋งŒ ์ปฌ๋Ÿผ๊ณผ ๊ฐ™์ด ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ๋‚ ์งœ์™€ ๋ฌธ์ž ๋ฆฌํ„ฐ๋Ÿด์€ ๋‹จ์ผ ์ธ์šฉ๋ถ€ํ˜ธ(โ€˜ โ€˜)๋กœ ์—์›Œ์‹ธ๋ฉฐ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์€ ๊ทธ๋ƒฅ ์ˆซ์ž๋งŒ ํ‘œํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค SELECT l_name || l_name || โ€˜โ€˜ โ€™โ€™ || title โ€œ์ง์›โ€ // space FROM โ€ฆ NULL์ด๋ž€ 0์ด๋‚˜ space์™€ ๋‹ฌ๋ฆฌ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๋˜๋Š” ์ ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์˜๋ฏธํ•˜๋ฉฐ ์ด๋Ÿฌํ•œ NULL๊ฐ’์„ ํ‘œํ˜„ํ•œ ์‚ฐ์ˆ ์‹์˜ ๊ฒฐ๊ณผ๋Š” NULL ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ select-list์— ๋„๊ฐ’ ๋Œ€์‹ ์— ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ COALESCE๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. SELECT f_name || l_name, salary * COALESCE(comm,0)/100 FROM โ€ฆ SELECTํ•œ ๊ฒฐ๊ณผ๋กœ ๋ถ€ํ„ฐ ์ค‘๋ณต๋œ ํ–‰์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒ์ ์œผ๋กœ DISTINCT keyword ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ NULL๊ฐ’์€ ์‹ค์ œ SELECTํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ช‡๊ฑด์ธ์ง€์— ๊ด€๊ณ„์—†์ด ํ•œ ๊ฑด์œผ๋กœ ์ทจ ๊ธ‰ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ DISTINCT๋ผ๋Š” keyword๋Š” ํ•ญ์ƒ SELECT ๋ฐ”๋กœ ๋’ค์— ๊ธฐ์ˆ ํ•˜๋ฉฐ ๊ทธ ๋’ค์— ์—ฌ ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ธฐ์ˆ ํ–ˆ๋‹ค๋ฉด ๋‚˜ํƒ€๋‚˜๋Š” ๋กœ์šฐ๋Š” ์ปฌ๋Ÿผ์˜ ์กฐํ•ฉ๋“ค์ด ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. SELECT DISTINCT city FROM โ€ฆ
  • 83. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. first, top ์งˆ์˜์˜ ๊ฒฐ๊ณผ๋กœ ๋ถ€ํ„ฐ ์ฒซ๋ฒˆ์งธ ํ˜น์€ ๊ธฐ์ˆ ๋œ ์ˆ˜๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. FIRST์€ ํ•œ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ TOP์€ 1~32767 ๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ORDER BY ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด์•ผ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์ง€ ๋งŒ์•ฝ์— ORDER BY์ ˆ ์—†์ด ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋งค ์งˆ์˜์‹œ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์งˆ์˜์˜ ์ œ์ผ ๋ฐ”๊นฅ์ชฝ SELECT๋ฌธ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•˜๋ฏ€๋กœ derived table์ด๋‚˜ VIEW์˜ ์ƒ์„ฑ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. FIRST๋Š” ROW_COUNT๋ผ๋Š” ์˜ต์…˜์˜ ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•˜๊ณ , TOP n ์€ ROW_COUNT ์˜ต์…˜์„ n์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์งˆ์˜ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TOP n์—์„œ n์˜ ๋ฒ”์œ„๋Š” 1~32767์ด์ง€๋งŒ ROW_COUNT์—์„œ๋Š” ๊ทธ๋Ÿฐ ์ œ์•ฝ์ด ์—†์Šต๋‹ˆ๋‹ค. syntax SELECT [ FIRST | TOP number-of-rows ] select-list
  • 84. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. from ์ ˆ select ์ ˆ์˜ select-list์— ์ปฌ๋Ÿผ์˜ ๊ธฐ์ˆ ์ด ์ „ํ˜€ ์—†๊ณ  ๋‹จ์ง€ ์‚ฐ์ˆ  ํ‘œํ˜„์‹๋งŒ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค๋ฉด from ์ ˆ ์ดํ•˜๋Š” ์ƒ๋žต๋˜๊ฑฐ๋‚˜ sys.dummy ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SELECT 24 * 60 * 60 [FROM sys.dummy]; ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ทฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ SELECT ํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋ฉฐ ์ฝค๋งˆ๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ…Œ ์ด๋ธ” ํ˜น์€ derived table์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SELECT โ€ฆ FROM employee | ( SELECT โ€ฆ โ€ฆ ) b ํ…Œ์ด๋ธ”์ด๋ฆ„์ด๋‚˜ ๋ทฐ ์ด๋ฆ„์€ ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด owner ๋ช…๊ณผ ๊ฐ™์€ qualifier๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SELECT โ€ฆ FROM dba.employee ํƒ€์ดํ•‘์˜ ์ˆ˜๊ณ ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ” ๋ช…์— ๋‹ค๋ฅธ correlation name์„ ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋’ค์— ์‚ฌ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋ ‡๊ฒŒ correlation name์ด ํ•œ ๋ฒˆ ์‚ฌ์šฉ๋˜์–ด์ง„ ํ›„์— ๊ทธ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ํ‘œํ˜„์œผ๋กœ๋Š” ๋ฐ˜๋“œ์‹œ correlation name์ด ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. SELECT d.dept_id, d.dept_name //d ๋Œ€์‹ ์— department ์‚ฌ์šฉ๋ถˆ๊ฐ€ FROM department d
  • 85. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. where ์ ˆ where์ ˆ์—๋Š” SELECT ํ•˜๋Š” ๋กœ์šฐ๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•œ search condition์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ qualification ํ˜น์€ predicate๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์ ˆ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค Comparison operator : =, > , <, <=, >=, !=, !>, !< SELECT emp_lname FROM employee WHERE salary > 50000 Range operator : BETWEEN, NOT BETWEEN SELECT emp_lname FROM employee WHERE salary BETWEEN 40000 AND 50000 List operator : IN, NOT IN SELECT company_name, state FROM customer WHERE state IN (โ€˜ONโ€™, โ€˜PQโ€™, โ€˜MBโ€™)
  • 86. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. where ์ ˆ Character match : LIKE, NOT LIKE SELECT company_name, phone FROM customer WHERE phone LIKE โ€˜415%โ€™ Unknown value : IS NULL, IS NOT NULL SELECT dept_name FROM department WHERE dept_head_id is NOT NULL Combination : AND, OR, NOT SELECT emp_fname, emp_lname FROM employee WHERE saraly > 50000 AND emp_fname like โ€˜A%โ€™
  • 87. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Summarizing, Grouping, Sorting
  • 88. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. group by ์ ˆ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๋ณด๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ aggregate ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. select ์ ˆ์— ๋‚˜ํƒ€๋‚œ ์–ด๋– ํ•œ ์ปฌ๋Ÿผ์ด๋‚˜ ํ‘œํ˜„์‹๋„ aggregate ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” group by์ ˆ์— ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. group by ์ ˆ ์—†์ด aggregate ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด ์ „ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ๊ทธ์— ๋Œ€ํ•œ ํ•œ๊ฑด์˜ ๊ฒฐ๊ณผ๋งŒ์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ select-list์—๋Š” aggregation ํ•จ์ˆ˜๋งŒ ๊ธฐ์ˆ  ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. aggregate ํ•จ์ˆ˜๋Š” select ์ ˆ๊ณผ having ์ ˆ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  NULL ๊ฐ’์€ COUNT(*)๋ฅผ ์ œ ์™ธํ•œ ์—ฐ์‚ฐ์—์„œ ์ œ์™ธ๋˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค AVG(numeric-expr) SUM(numeric-expr) COUNT(*) COUNT(column-name) MAX(expr), MIN(expr) VARIANCE (numeric-expr), STDDEV(numeric-expr) ์˜ˆ) SELECT order_reg, order_prod, SUM(order_qty) FROM order_detail WHERE order_date >= โ€˜1999/01/01โ€™ GROUP BY order_reg, order_prod
  • 89. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. rollup ROLLUP์€ GROUP BY์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋’ค์— ๋‚˜์˜ค๋Š” (์ปฌ๋Ÿผ์ˆ˜ โ€“ 1) ๊ฐœ ๊นŒ์ง€์˜ ๊ทธ๋ฃน๋ณ„ ์†Œ๊ณ„์™€ ์ด๊ณ„๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๊นŒ์ง€๋Š” COUNT DISTINCT, SUM DISTINCT๋Š” ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ์œผ๋ฉฐ sub-query์—์„œ ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. syntax SELECT [ GROUPING (column-name)โ€ฆ] โ€ฆ GROUP BY ROLLUP expression [,โ€ฆ..] ์˜ˆ) SELECT year, model, sum(qty) FROM sales GROUP BY ROLLUP year, model 6 ์„ธํƒ๊ธฐ ๋ƒ‰์žฅ๊ณ  ๊ณ„ 1997 1998 1999 2000 ์ด๊ณ„ 16 26 36 5 15 25 35 11 31 51 71 164
  • 90. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. cube ROLLUP์€ GROUP BY์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ rollup ๊ธฐ๋Šฅ์— ํ๋ธŒ ํ˜•ํƒœ์˜ ๊ทธ๋ฃน๋ณ„ ์†Œ๊ณ„์™€ ์ด ๊ณ„๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๊นŒ์ง€๋Š” COUNT DISTINCT, SUM DISTINCT๋Š” ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ์œผ๋ฉฐ sub-query์—์„œ ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. syntax SELECT [ GROUPING (column-name)โ€ฆ] โ€ฆ GROUP BY CUBE expression [,โ€ฆ..] ์˜ˆ) SELECT year, model, sum(qty) FROM sales GROUP BY CUBE year, model 6 ์„ธํƒ๊ธฐ ๋ƒ‰์žฅ๊ณ  ๊ณ„ 1997 1998 1999 2000 ์ด๊ณ„ 16 26 36 84 5 15 25 35 80 11 31 51 71 164
  • 91. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. having ์ ˆ where ์ ˆ์—์„œ SELECT ํ•˜๊ธฐ ์œ„ํ•œ ๋กœ์šฐ๋ฅผ ์ œํ•œ ํ•˜๋“ฏ์ด GROUP BY ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œํ•œํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ aggregation ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ œํ•œ์€ ๋ฌธ๋ฒ•์ƒ where์ ˆ์— ๊ธฐ์ˆ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ œํ•œ์€ where์ ˆ์ด ์•„๋‹Œ having์ ˆ์— ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT order_reg, order_prod, SUM(order_qty) FROM order_detail WHERE order_date >= โ€˜1999/01/01โ€™ GROUP BY order_reg,order_prod HAVING SUM(order_qty) > 200
  • 92. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. order by ์ ˆ SELECTํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ค ํŠน์ • ์ปฌ๋Ÿผ์— ์˜ํ•ด ์ •๋ ฌํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์„ ํƒํ•ด์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ASC๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ, DESC๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ ์œผ๋ฉฐ ASC ํ˜น์€ DESC๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋””ํดํŠธ๋กœ๋Š” asc ์ž…๋‹ˆ๋‹ค ํ•˜๋‚˜ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๋•Œ order by์ ˆ์˜ ์ปฌ๋Ÿผ์€ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ปฌ๋Ÿผ ๋Œ€์‹  ๋ณ„๋ช…์ด๋‚˜ select ์ ˆ์—์„œ ๊ธฐ์ˆ ๋œ ์ปฌ๋Ÿผ์˜ ์œ„์น˜์ˆœ์„œ๋ฅผ ๊ธฐ์ˆ ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ RDBMS์—์„œ๋Š” GROUP BY์˜ ๊ฒฐ๊ณผ๋กœ group by์ ˆ์— ๊ธฐ์ˆ ๋œ ์ปฌ๋Ÿผ ์ˆœ์œผ ๋กœ ์ž๋™์œผ๋กœ ์ •๋ ฌํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์ปฌ๋Ÿผ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ ์ž ํ–ˆ์„ ๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” order by์ ˆ์„ ์ƒ๋žตํ•˜์ง€๋งŒ SYBASE IQ์—์„œ๋Š” order by ์ ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋– ํ•œ ์ข… ๋ฅ˜์˜ ์งˆ์˜๋„ ๊ฒฐ์ฝ” ์ •๋ ฌํ•ด์„œ ๋ณผ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ) SELECT id, name, quantity FROM product WHERE name like โ€˜%shirt%โ€™ ORDER BY name, quantity desc ํ˜น์€ ORDER BY 2, 3 desc;
  • 93. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„ํ˜• ํ•จ์ˆ˜ ์ „์ฒด ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ˆœ์œ„๋ฅผ ๋‚ด์ฃผ๋Š” ์ˆœ์œ„ํ˜• ํ•จ์ˆ˜์—๋Š” DENSE_RANK, PERCENT_RANK, RANK๊ฐ€ ์žˆ์œผ๋ฉฐ ์ˆœ์œ„์— ๋Œ€ํ•œ ๊ธฐ์ค€์ด ๋˜๋Š” OVER ( ORDER BY ) ์ ˆ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ DENSE_RANK์™€ RANK๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ฆ‰ RANK ํ•จ์ˆ˜๋Š” ๊ฐ™์€ ์ˆœ์œ„๊ฐ€ ์กด์žฌํ•˜๋ฉด ์กด์žฌํ•˜๋Š” ์ˆ˜๋งŒํผ์˜ ๊ณต๋ฐฑ ์ˆœ์œ„๊ฐ€ ์กด์žฌํ•˜๋‚˜ DENSE_RANK๋Š” ๊ณต๋ฐฑ์ˆœ์œ„๋ฅผ ์ธ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PERCENT_RANK ํ•จ์ˆ˜๋Š” ์ˆœ์œ„ ๋ฐฑ๋ถ„์œจ์„ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉฐ NTILE ํ•จ์ˆ˜๋Š” ๋ถ„์œ„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด ์ค ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์˜ PERCENT_CONT, PERCENT_DISC๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ํ•จ์ˆ˜๋“ค์€ sub-query์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ทธ๋ฃน๋ณ„๋กœ ๋ณ„๋„์˜ ์ˆœ์œ„๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์˜ต์…˜ ์ธ PARTITION BY ๊ฐ€ ํ˜„์žฌ ๊นŒ์ง€๋Š” ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. syntax SELECT DENSE_RANK | PERCENT_RANK | RANK OVER ( ORDER BY expr [ ASC | DESC ] ) SELECT NTILE (expr1) OVER ( ORDER BY expr2 [ ASC | DESC ] ) SELECT PERCENT_CONT | PERCENT_DISC (expr1) WITHIN GROUP ( ORDER BY expr2 [ ASC | DESC ] )
  • 94. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„ํ˜• ํ•จ์ˆ˜ ์ฐธ๊ณ  : PARTITION BY ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํ•˜๊ธฐ SELECT district, grade, AVG(math_score), rank() over (partition by district order by avg(math_score) desc) as rank_d FROM math_report GROUP BY district, grade ORDER BY district; SELECT district, grade, avg(math_score), rank() over (order by avg(math_score) desc) as rank_d FROM math_report WHERE district = 'essex' GROUP BY district, grade UNION ALL SELECT district, grade, avg(math_score), rank() over (order by avg(math_score) desc) as rank_d FROM math_report WHERE district = 'middlesex' GROUP BY district, grade UNION ALL SELECT district, grade, avg(math_score), rank() over (order by avg(math_score) desc) as rank_d FROM math_report WHERE district = 'suffolk' GROUP BY district, grade ORDER BY 1,2;
  • 95. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Retrieving data from several tables
  • 96. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. overview syntax SELECT select-list // select ์ ˆ [ FROM table-expression ] // from ์ ˆ [ ON join-condition ] // on ์ ˆ [ WHERE search-condition ] // where ์ ˆ [ GROUP BY column-list ] // group by ์ ˆ [ HAVING search-condition ] // having ์ ˆ [ ORDER BY column-list ] // order by ์ ˆ FROM table-name [ KEY | NATURAL [ INNER | FULL [ OUTER ] | LEFT [ OUTER ] | RIGHT [ OUTER ] JOIN | CROSS JOIN table-name ON join-condition
  • 97. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. join ์กฐ์ธ์€ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜์˜ select statement์— ํฌํ•จํ•˜์—ฌ ์› ํ•˜๋Š” ์ •๋ณด๋ฅผ ์‚ฐ์ถœํ•˜๋Š” SQL ์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ PK์™€ FK๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€ ๋ถ„์ด์ง€๋งŒ ๋•Œ๋กœ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐ’๋“ค์˜ ์—ฐ๊ด€์œผ๋กœ ์กฐ์ธํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ where์ ˆ์— ์กฐ์ธ ์กฐ๊ฑด์„ ๊ธฐ์ˆ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€๋งŒ WatcomSQL๊ณผ ANSI์—์„œ๋Š” from์ ˆ์— ์กฐ์ธ์˜ ๋ฐฉ๋ฒ•์„ on์ ˆ์— ์กฐ์ธ์˜ ์กฐ๊ฑด์„ ๊ธฐ์ˆ ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์กฐ์ธํ•  ๋•Œ ๋˜‘๊ฐ™์€ ์ปฌ๋Ÿผ ์ด๋ฆ„์ด ์กด์žฌํ•˜๊ฑฐ๋‚˜ ๋ฌธ์žฅ์˜ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ์ปฌ๋Ÿผ ์ด๋ฆ„ ์•ž ์— ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด๋‚˜ ํ˜น์€ correlation name์„ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ N๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋ ค๋ฉด N-1๊ฐœ์˜ ์กฐ์ธ ์กฐ๊ฑด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ  ์กฐ์ธ์— ํ•ด๋‹น๋˜๋Š” ์ปฌ๋Ÿผ์€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฐ ๊ธธ์ด๊ฐ€ ๊ฐ™์•„์•ผ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ SYBASE IQ์—์„œ๋Š” ์กฐ์ธ์— ํ•ด๋‹น๋˜๋Š” ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ int ๊ณ„์—ด ํŠนํžˆ unsigned int ๊ณ„ ์—ด๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.
  • 98. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. equijoin vs. non-equijoin equijoin์€ ์กฐ์ธ ์กฐ๊ฑด์—์„œ =์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’๋“ค์ด ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ธ ์„ ๋งํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„ PK์™€ FK์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค. equijoin์€ ๋‹ค๋ฅธ ๋ง๋กœ inner- join ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT * FROM sales_order a JOIN customer b ON a.cust_id = b.id JOIN sales_order_items c ON a.id = c.id ์กฐ์ธ ์กฐ๊ฑด์—์„œ ์—ฐ์‚ฐ์ž๋กœ =์ด ์•„๋‹Œ BETWEEN ~ AND ๋“ฑ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฌ์šฉ๋˜์–ด ์ง„๋‹ค ๋ฉด ์ด๋ฅผ non-equijoin ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT e.emp_id, e.emp_lname, e,salary, s.low_salary, s.high_salary FROM salary_grade s JOIN employee e ON e.salary BETWEEN s.low_salary AND s.high_salary;
  • 99. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. inner-join vs. outer-join equijoin์€ ์กฐ์ธ ์กฐ๊ฑด์—์„œ =์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’๋“ค์ด ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ธ ์„ ๋งํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„ PK์™€ FK์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค. equijoin์€ ๋‹ค๋ฅธ ๋ง๋กœ inner- join ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT * FROM sales_order a JOIN customer b ON a.cust_id = b.id JOIN sales_order_items c ON a.id = c.id ์ผ๋ฐ˜์ ์ธ inner join์—์„œ๋Š” ํ…Œ์ด๋ธ”๋“ค ์‚ฌ์ด์— ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋กœ์šฐ๋งŒ์„ ๊ฒฐ๊ณผ๋กœ ์‚ฐ์ถœ ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋กœ์šฐ๋ผ๋„ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ์กฐ ์ธ์„ outer join์ด๋ผ๊ณ  ๋งํ•˜๋ฉฐ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ํ…Œ์ด๋ธ”์„ outer, ๊ทธ ๋ฐ˜๋Œ€์ชฝ์„ inner ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ „๋ถ€ ์ถœ๋ ฅ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ์œ„์น˜์— ๋”ฐ๋ผ LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ) SELECT lname, order_date, city FROM customer LEFT OUTER JOIN sales_order ON customer.id = sales_order.cust_id WHERE customer.state = โ€˜NYโ€™;
  • 100. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. key join ํ…Œ์ด๋ธ”๋“ค๊ฐ„์˜ ์กฐ์ธ์€ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด์ง„ PK, FK์— ์˜ํ•ด ์กฐ์ธ ์กฐ๊ฑด์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ON์ ˆ์ด ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ์‚ฌ์ „์— ์กฐ์ธ๋˜์–ด์ง€๋Š” ํ…Œ์ด๋ธ”์— PK, FK๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ์˜ˆ) SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FRO M customer a KEY JOIN order_detail b WHERE a.cust_reg = โ€˜Seoulโ€™ AND b.order_proc = โ€˜101โ€™ SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a, order_detail b WHERE a.cust_id = b.cust_id AND a.cust_reg = โ€˜Seoulโ€™ AND b.order_proc = โ€˜101โ€™
  • 101. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. natual join ํ…Œ์ด๋ธ”๋“ค๊ฐ„์˜ ์ด๋ฆ„์ด ๊ฐ™์€ ์ปฌ๋Ÿผ๋“ค๋กœ ์กฐ์ธ ์กฐ๊ฑด์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ON์ ˆ์ด ์ƒ๋žต๋ฉ๋‹ˆ ๋‹ค. ํ…Œ์ด๋ธ”๋“ค๊ฐ„์˜ ์ด๋ฆ„์ด ๊ฐ™์€ ์ปฌ๋Ÿผ์ด ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์ด ์กด์žฌํ•ด์•ผ ํ•˜๋ฉฐ ๋งŒ์•ฝ ์ผ์น˜ํ•˜๋Š” ์ด ๋ฆ„์ด ์—†๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a NATURAL JOIN order_detail b WHERE a.cust_reg = โ€˜Seoulโ€™ AND b.order_proc = โ€˜101โ€™ SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a, order_detail b WHERE a.cust_id = b.cust_id AND a.cust_reg = โ€˜Seoulโ€™ AND b.order_proc = โ€˜101โ€™
  • 102. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. general join ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ํ˜•ํƒœ๋กœ ์กฐ์ธ ๊ด€๋ จ๋œ ์ปฌ๋Ÿผ ์ •๋ณด๋ฅผ on์ ˆ์— ์ง์ ‘ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค ์˜ˆ) SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a JOIN order_detail b ON a.cust_id = b.cust_id WHERE a.cust_reg = โ€˜Seoulโ€™ AND b.order_proc = โ€˜101โ€™ SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a, order_detail b WHERE a.cust_id = b.cust_id AND a.cust_reg = โ€˜Seoulโ€™ AND b.order_proc = โ€˜101โ€™
  • 103. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. cross join(cartesian product) ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋Œ€๋‹จํžˆ ๋งŽ์€ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•˜๋ฉฐ ํ…Œ์ด๋ธ”๋“ค ์‚ฌ์ด์˜ ์กฐ์ธ์ ˆ์ด ๊ธฐ ์ˆ ๋˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์กฐ์ธ ์กฐ๊ฑด์„ ์ƒ๋žตํ•œ ๊ฒฝ์šฐ๋‚˜ ์กฐ์ธ ์กฐ๊ฑด์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒ๋˜๋ฉฐ ์ฒซ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰ ์ด ๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰๊ณผ ์กฐ์ธ์ด ๋ฉ๋‹ˆ๋‹ค ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๊ฑฐ์˜ ์œ ์šฉํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ Max_Cartesian_Result ๋ผ๋Š” ์˜ต์…˜์„ ํ†ตํ•ด ํ†ต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ) SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a CROSS JOIN order_detail b SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a , order_detail b
  • 104. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. self join ๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ์กฐ์ธ์— ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ˜๋“œ์‹œ correlation name์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) ๋™๋ช…์ด์ธ์„ ์ฐพ๋Š” self join SELECT a.cust_id, a.cust_name, a.cust_addr FROM customer a JOIN customer b ON a.cust_name = b.cust_name WHERE a.cust_id != a.cust_id
  • 105. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. outer join ์ผ๋ฐ˜์ ์ธ inner join์—์„œ๋Š” ํ…Œ์ด๋ธ”๋“ค ์‚ฌ์ด์— ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋กœ์šฐ๋งŒ์„ ๊ฒฐ๊ณผ๋กœ ์‚ฐ์ถœ ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋กœ์šฐ๋ผ๋„ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ์กฐ ์ธ์„ outer join์ด๋ผ๊ณ  ๋งํ•˜๋ฉฐ ์ „๋ถ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ํ…Œ์ด๋ธ”์„ outer, ๊ทธ ๋ฐ˜๋Œ€์ชฝ์„ inner ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์˜ํ•  ์ ์€ inner ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋‹ค๋ฉด ์ด ์กฐ๊ฑด์€ ๋ฐ˜๋“œ์‹œ where์ ˆ์ด ์•„๋‹Œ on์ ˆ์— ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ where ์ ˆ์— ์ด ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ธฐ์ˆ ํ•˜๋ฉด OUTER JOIN์ด ์•„ ๋‹Œ INNER JOIN์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.์ด๋Š” ANSI ๊ทœ์•ฝ์ด๋ฉฐ outer ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์€ ์–ด๋””์— ๊ธฐ์ˆ ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a left outer join order_detail b ON a.cust_id = b.cust_id AND b.order_qty > 10 // ์ฃผ์˜ WHERE a.cust_reg = โ€˜seoulโ€™ SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a , order_detail b WHERE a.cust_id *= b.cust_id AND a.cust_reg = โ€˜seoulโ€™ AND b.order_qty > 10
  • 106. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. derived table join from์ ˆ์—์„œ ๋ทฐํ˜•ํƒœ์˜ ์ค‘๊ฐ„ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ ํ›„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ์„ ํ•˜๋Š” ํ˜•ํƒœ๋กœ ํŽธ์ง‘ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, select์ ˆ ์—์„œ์˜ ์‚ฌ์šฉ์€ ์›๋ž˜ ASA์˜ WatcomSQL์—์„œ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ SYBASE IQ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Oracle์—์„œ๋Š” In-line-view ๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ) SELECT a.cust_fname, a.cust_lname, b.order_unit, b.order_qty FROM customer a , (SELECT cust_id, order_unit, order_qty FROM order_detail WHERE order_prod = โ€˜101โ€™) b WHERE a.cust_id = b.cust_id AND a.cust_reg = โ€˜Seoulโ€™ ์ฐธ๊ณ  derived table์˜ ๊ฒฐ๊ณผ๋กœ ๋งŽ์€ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฐ์ถœ๋œ๋‹ค๋ฉด ์ด๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์กฐ์ธ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ž„์‹œ ํ…Œ์ด๋ธ” ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ์ง‘ํ•  ๋•Œ ๋ถˆํŽธํ•œ ์ ์ด ์กฐ๊ธˆ์€ ์žˆ์„์ง€ ๋ชจ๋ฅด์ง€๋งŒ ์„ฑ๋Šฅ์ƒ์—๋Š” ๋งŽ์€ ์ด์ ์ด ์žˆ์Šต ๋‹ˆ๋‹ค.
  • 107. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sub-query sub-query๋Š” ์—ฌ๋Ÿฌ ์ ˆ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ SELECT ๋ฌธ์žฅ ์•ˆ์— ๊ธฐ์ˆ ๋œ SELECT ๋ฌธ์žฅ์ž…๋‹ˆ ๋‹ค. sub-query๋Š” main query์ด์ „์— ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋˜๋ฉฐ sub-query์˜ ๊ฒฐ๊ณผ๋ฅผ main query ์— ์˜ํ•ด ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. sub-query๋Š” ๊ด„ํ˜ธ๋กœ ์–‘์ชฝ์„ ๋ฌถ์–ด์•ผ ํ•˜๊ณ  ์—ฐ์‚ฐ์ž์˜ ์˜ค๋ฅธ์ชฝ์— ๋‚˜ํƒ€๋‚˜์•ผ ํ•˜๋ฉฐ order by ์ ˆ ์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ select-list์— ๋‹จ์ง€ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿฌ๋งŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. sub-query์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฐ์ถœํ•œ๋‹ค๋ฉด ๋‹จ์ผ ํ–‰ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ 2๊ฑด ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฐ์ถœํ•œ๋‹ค๋ฉด ๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ํ–‰ ์—ฐ์‚ฐ์ž : =, >, <, >=, <=, != ๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ์ž : IN, EXISTS (์ฐธ๊ณ  : ANY, ALL์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค) sub-query๋Š” where์ ˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ having์ ˆ, from์ ˆ์—์„œ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํŠนํžˆ from์ ˆ ์— ์„œ ์‚ฌ์šฉํ•˜๋Š” sub-query๋Š” derived-table์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. syntax SELECT select-list FROM table-expression WHERE expression operator ( SELECT select-list FROM table-expression WHERE search-condition )
  • 108. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sub-query ์˜ˆ) SELECT cust_fname, cust_lname FROM customer WHERE cust_id in ( SELECT cust_id FROM order_detail WHERE order_proc = โ€˜101โ€™) AND cust_reg = โ€˜Seoulโ€™ SELECT c.cust_fname, c.cust_lname FROM customer c, order_detail o WHERE c.cust_id in = o.cust_id AND o.order_proc = โ€˜101โ€™ AND c.cust_reg = โ€˜Seoulโ€™
  • 109. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. union ์—ฐ์‚ฐ์ž ์–‘์ชฝ์˜ ์งˆ์˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ํ•ฉํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ์—ฐ์‚ฐ์ž๋กœ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ณด์—ฌ์ค„ ๋•Œ๋Š” ALL ์ด๋ผ๋Š” Keyword๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ง๋ถ™์—ฌ ์ง‘๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž ์–‘์ชฝ์—์„œ ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ์ˆ˜ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž ์–‘์ชฝ์˜ ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋”ฐ์ ธ๋ณผ ๋•Œ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‹ค์ œ ์—ฐ์‚ฐํ•  ๋•Œ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ๊ณผ์ •์„ ์ƒ๋žตํ•˜๋ฏ€๋กœ UNION ALL์ด ์„ฑ๋Šฅ์— ์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค. UNION ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ด์„œ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด UNION ์—ฐ์‚ฐ์ž์˜ ์•„๋ž˜ ์ชฝ์˜ ์งˆ์˜์— order by ์ ˆ์„ ์ถ”๊ฐ€ ๊ธฐ์ˆ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ปฌ๋Ÿผ ์ด๋ฆ„์ด ์•„๋‹ˆ๊ณ  ์ปฌ๋Ÿผ์˜ ์œ„์น˜์ˆœ์„œ๋ฅผ ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT cust_name,cust_city,cust_phone FROM a_customer UNION [ALL] SELECT cust_name,cust_city,cust_phone FROM b_customer ORDER BY 1, 2;
  • 110. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. minus, intersect MINUS์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ž๋Š” ์ง์ ‘ ์ œ๊ณต๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์˜ ๋ณด๊ธฐ์ฒ˜๋Ÿผ ์งˆ์˜๋ฅผ ์ง ์ ‘ ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT product_id FROM ( SELECT a.product_id, b.product_id as b_product_id FROM inventories a LEFT OUTER JOIN order_item b ON a.product_id = b.product_id ) tmp WHERE b_product_id IS NULL; INTERSECT์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์ž๋„ ์—ญ์‹œ ์ง์ ‘ ์ œ๊ณต๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์˜ ๋ณด๊ธฐ์ฒ˜ ๋Ÿผ ์งˆ์˜๋ฅผ ์ง์ ‘ ๊ธฐ์ˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) SELECT a.product_id FROM inventories a JOIN order_item b ON a.product_id = b.product_id;
  • 111. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sp_iqcolumn syntax sp_iqcolumn table-name;
  • 112. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Adding, Changing, and Deleting data
  • 113. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. insert ํ•œ ํ…Œ์ด๋ธ”์— insert๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ์„ ๋•Œ ์–ด๋–ค ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋„ ๊ทธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด write ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ write ์ด์ „ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ read ํ•  ์ˆ˜ ๋Š” ์žˆ์Šต๋‹ˆ๋‹ค. syntax1 INSERT [INTO] [owner.]table-name [(column-name[,โ€ฆ])] VALUES (expression โ€ฆ) syntax2 INSERT [INTO] [owner.]table-name [(column-name[,โ€ฆ])] insert-load-option select-statement syntax3 INSERT [INTO] [owner.]table-name [(column-name[,โ€ฆ])] insert-load-option [LOCATION โ€˜server-name.db-nameโ€™] {select-statement}
  • 114. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. insert-manually insert ์ฃผ์–ด์ง„ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”์— ํ•œ๊ฑด ํ•œ๊ฑด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉฐ ์ฃผ๋กœ OLTP์˜ ์šด์˜ํ™˜ ๊ฒฝ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. SYBASE IQ ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์— ์ด๋Ÿฐ ์‹์˜ INSERT๋Š” ์ž…๋ ฅ๋˜๋Š” ์†๋„๋„ ๋А๋ฆด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„œ๋ฒ„์— ์ฃผ๋Š” ๋ถ€๋‹ด๋„ ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ์ด๋Ÿฐ INSERT๋Š” ์ž์ œํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ๋งŒ์•ฝ ์‚ฌ์šฉ์‹œ์—๋„ ์ปฌ๋Ÿผ๊ณผ ๊ฐ’์— ๋Œ€ํ•œ ๋งคํ•‘์„ ๋ช…์‹œ์ ์œผ๋กœ ํ•˜์‹ญ์‹œ์˜ค ์˜ˆ) INSERT INTO department (dept_id, dept_name) VALUES (230, โ€˜Eastern Salesโ€™);
  • 115. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. insert-inserting from IQ main store ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋ณด๋“ฏ์ด SELECTํ•˜๋Š” ํ…Œ์ด๋ธ”๋„ SYBASE IQ์˜ main store์— ์กด์žฌํ•˜๊ณ  INSERT ํ•˜๋Š” ํ…Œ์ด๋ธ”๋„ SYBASE IQ main store์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ETL ๊ณผ์ • ์ค‘์— ๋งŽ์ด ๋ฐœ์ƒ๋˜๋Š” ํ˜•ํƒœ์˜ ์ž…๋ ฅ ๋ฐฉ๋ฒ• ์ด๋ฉฐ ๋‹ค์ค‘ ์“ฐ๋ ˆ๋“œ๋กœ ๋™์ž‘๋˜๋Š” LOAD์™€ ๋‹ฌ ๋ฆฌ ํ•œ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋งก์•„์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๊ณ  ๋งค์šฐ ์ค‘์š”ํ•œ ํŠธ๋žœ์žญ์…˜์ด๋ผ๋ฉด ๊ฒฝ์šฐ์— ๋”ฐ๋ผ SAM ํŒŒ์ผ๋กœ UNLOAD ํ•œ ํ›„์— ๊ทธ ํŒŒ์ผ์„ ๋‹ค์‹œ LOAD ํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์˜ˆ) INSERT INTO dept_head ( name, dept ) SELECT emp_lname || โ€˜ โ€˜ || emp_fname as name, dept_name FROM employee JOIN department ON emp_id = dept_head_id;
  • 116. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. insert-inserting directly from a foreign db ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๋ณด๋“ฏ์ด ํ˜„์žฌ ์ ‘์†ํ•˜๊ณ  ์žˆ๋Š” SYBASE IQ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ DB์˜ ํ…Œ์ด๋ธ”์„ ์ฝ์–ด ์„œ ํ˜„์žฌ ์ ‘์†ํ•˜๊ณ  ์žˆ๋Š” SYBASE IQ์˜ ํ…Œ์ด๋ธ”์— ์ž…๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ DB๋กœ๋Š” ๋˜ ๋‹ค๋ฅธ SYBASE IQ, ASE, Oracle, Informix ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ SYBASE ์ œํ’ˆ์ด ์•„๋‹Œ Oracle, Informix๋“ฑ์€ ์ค‘๊ฐ„์— SYBASE์˜ Gateway ์ œํ’ˆ์ด ์žˆ ์–ด์•ผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ๋˜๋Š” SYBASE IQ์ชฝ์— OCDK๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ ์ชฝ interfaces file์— SELECT ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๋‹ค๋ฅธ DB์— ๋Œ€ํ•œ ๋ชฉ๋ก์ด ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) INSERT INTO customer ( customer_id, cust_type ) LOCATION โ€˜prod.asedbโ€™ { SELECT customer_id, cust_type FROM customer } ;
  • 117. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. insert-partial width insert ํ•œ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์„œ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์—…๋ฌด์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ ํŠน์ •ํ•œ ์ปฌ๋Ÿผ์„ ์ฒจ๊ฐ€ ํ–ˆ์„ ๋•Œ ๋‹ค๋ฅธ RDBMS ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ์žฌ๋กœ๋“œ ์—†์ด ์ด ์ฒจ๊ฐ€๋œ ์ปฌ๋Ÿผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ SYBASE IQ๋Š” ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ๋Š” ์ปฌ๋Ÿผ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ ์— ์ปฌ๋Ÿผ ๋‹จ์œ„์˜ ์ฒ˜๋ฆฌ์— ๋งค์šฐ ๊ฐ•ํ•œ ํŠน์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ) INSERT INTO lineitem ( colC, colD ) START ROW ID 1 LOCATION โ€˜ase_srv1.part_dbโ€™ { SELECT colC, colD FROM lineitem } ;
  • 118. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. update 12.4 ์ดํ•˜์˜ ๋ฒ„์ „์—์„œ๋Š” SYBASE IQ์—์„œ UPDATE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ œ์•ฝ ์‚ฌํ•ญ์ด ์กฐ๊ธˆ ์žˆ์—ˆ์ง€ ๋งŒ ์ง€๊ธˆ์€ ๋ชจ๋“  ์ œ์•ฝ ์‚ฌํ•ญ์ด ์ œ๊ฑฐ ๋˜์—ˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์กฐ์ธ์„ ์ด์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ™• ์žฅ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. SYBASE IQ๋Š” ์ปฌ๋Ÿผ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ช‡ ๊ฐœ์˜ ์ปฌ๋Ÿผ๋งŒ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ RDBMS์— ๋น„ํ•ด ์›”๋“ฑํžˆ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. syntax UPDATE [owner.]table-name SET [column-name = expression, โ€ฆ [ FROM table-expression, ] [ WHERE search-condition [, join-condition ]] โ€ฆโ€ฆ ์˜ˆ) UPDATE employee SET dept_id = 400 WHERE emp_id = 129; UPDATE employee SET emp.salary = emp.salary + dept.bonus FROM employee emp, department dept WHEREWHERE empemp..deptnumdeptnum = dept.= dept.deptnumdeptnum;;
  • 119. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. delete ํŠน์ • ํ…Œ์ด๋ธ”์— ์กฐ๊ฑด์„ ์ฃผ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ์„ ํ•˜์—ฌ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ฑด ์—†์ด ์ „ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œ์‹œ๋Š” TRUNCATE TABLE ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋กœ๊ทธ๋ฅผ ์  ๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. syntax DELETE [ FROM ] [owner.]table-name [ FROM table-list ] [ WHERE search-condition ] ์˜ˆ) DELETE employee WHERE emp_id = 105; DELETE contact FROM contact, customer WHERE contact.last_name = customer.WHERE contact.last_name = customer.lnamelname ANDAND contact.first_name = customer.contact.first_name = customer.fnamefname; TRUNCATE TABLE employee;
  • 120. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Using procedure
  • 121. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. procedure ์ ˆ์ฐจ์ ์ธ SQL ์–ธ์–ด์— ์˜ํ•ด ์ž‘์„ฑ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚ด์— ์ €์žฅ๋˜๋ฉฐ ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ๋“ฑ ์ œ์–ด๋ฌธ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ CALL๋ฌธ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ฃผ ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ํ”„๋กœ์‹œ์ ธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์— SELECT์˜ ๊ฒฐ๊ณผ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋˜ ๋‹ค๋ฅธ ํ”„ ๋กœ์‹œ์ ธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…๋ฅ˜ User-Defined Stored Procedure System-Defined Stored Procedure ์žฅ์  ๋ฐ˜๋ณต์ ์ธ ์ผ์„ ๋‹จ์ˆœํ™”/ํ‘œ์ค€ํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค โ€ฆโ€ฆ
  • 122. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. creating stored procedure resource ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ CREATE PROCEDURE ๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ALTER PROCEDURE ๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์‹œ์ ธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต ๋‹ˆ๋‹ค ํ”„๋กœ์‹œ์ ธ์˜ ๋ชธ์ฒด๋Š” BEGIN๊ณผ END๋กœ ์ด๋ฃจ์–ด์ง„ compound statement ์ด๋ฉฐ ๊ฐ ๋ฌธ์žฅ์€ ์„ธ ๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๋๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์‹œ์ ธ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•˜๋”๋ผ๊ณ  ( )๋Š” ๋ฌธ๋ฒ•์ƒ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ ๋‹ˆ๋‹ค. syntax CREATE PROCEDURE procedure_name ( [parameter][,โ€ฆโ€ฆ] ) [ RESULT (result-column,โ€ฆ) ] BEGIN // Business Logic END; Compound statement
  • 123. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. declaring parameter ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ˜ธ์ถœ๋ฐ›๋Š” ํ”„๋กœ์‹œ์ ธ ์‚ฌ์ด์— ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด ์ •์˜๋˜์–ด ์žˆ์œผ ๋ฉฐ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ํ˜ธ์ถœ๋ฐ›๋Š” ์ชฝ์œผ๋กœ ์ •๋ณด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด์„œ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ๊ทธ ์ค‘์— ํ•˜๋‚˜๊ฐ€ ์—ญ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ต ํ•ด์„œ ์ด๋ฉฐ ์ด๋Ÿฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” CREATE PROCEDURE๋ฌธ์˜ ๊ด„ํ˜ธ์•ˆ์— ์„ ์–ธํ•˜๋ฉฐ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌ ๋ฉ๋‹ˆ๋‹ค ์ปฌ๋Ÿผ์ฒ˜๋Ÿผ ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์„ ์–ธ๊ณผ ๋™์‹œ์— DEFAULT ์„ ์–ธ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ด๋Ÿฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์•ž์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3์ข…๋ฅ˜์˜ Keyword๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. IN : ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ํ”„๋กœ์‹œ์ ธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ OUT : ํ”„๋กœ์‹œ์ ธ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ INOUT : IN ์—ญํ• ๊ณผ OUT ์—ญํ• ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ syntax CREATE PROCEDURE procedure-name ( IN | OUT | INOUT parameter-name data-type [ DEFAULT expression ],โ€ฆโ€ฆ) ์˜ˆ) CREATE PROCEDURE ProductType ( IN product_id INT, OUT type CHAR(10) ) BEGIN โ€ฆโ€ฆโ€ฆโ€ฆ..
  • 124. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. checking parameter NULL๊ณผ ์ƒ์ˆ˜๊ฐ’๋“ฑ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋””ํดํŠธ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ํ”„๋กœ์‹œ์ ธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์— ํŒŒ๋ผ ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š์•˜์„ ๋•Œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ๊ฒ€์€ ๋…ผ ๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ) CREATE PROCEDURE CustomerProducts_proc ( IN v_customer_id INT DEFAULT NULL ) BEGIN IF v_customer_id IS NULL THEN // ๋งŒ์•ฝ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด RETURN โ€“99000; ELSE SELECT a.id, SUM(b.quantity) FROM product a, sales_order_items b, sales_order c WHERE c.cust_id = v_customer_id AND c.order_id = b.id AND b.prod_id = a.id GROUP BY a.id; END IF; END;
  • 125. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. calling stored procedure ํ”„๋กœ์‹œ์ ธ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜น์€ ๋‹ค๋ฅธ ํ”„๋กœ์‹œ์ ธ์—์„œ CALL ๋ฌธ์— ์˜ํ•ด ๋ถˆ๋ ค์งˆ ์ˆ˜ ์žˆ์Šต ๋‹ˆ๋‹ค. ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ทธ ํ”„๋กœ์‹œ์ ธ์— ๋Œ€ํ•ด ์‹คํ–‰ ๊ถŒํ•œ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค ํ”„๋กœ์‹œ์ ธ์˜ ์‹คํ–‰์ด ๋๋‚ฌ์„ ๋•Œ OUT, INOUT์œผ๋กœ ์„ ์–ธ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์ด ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ด๋‚˜ ํ”„๋กœ์‹œ์ ธ๋กœ ๋˜๋Œ๋ ค ์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์‹œ์ ธ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ƒํƒœ ๊ฐ’์„ ๋ฐ›์•„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ ์Šต๋‹ˆ๋‹ค. Syntax [variable=] CALL procedure_name ( [parameter][,โ€ฆโ€ฆ] ); ์˜ˆ1) CALL customer_list_proc(); ์˜ˆ2) CREATE VARIABLE v_returnval INT; v_returnval = CALL integer_proc ( arg1 = val1, โ€ฆโ€ฆ );
  • 126. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. passing parameter creator CREATE PROCEDURE Sample_proc ( IN v_var1 INT DEFAULT NULL, IN v_var2 INT DEFAULT NULL, IN v_var3 INT DEFAULT NULL) BEGIN โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ END; caller : ์œ„์น˜์— ์˜ํ•œ ๋ฐฉ๋ฒ• CREATE VARIABLE v_loc1 INT; CREATE VARIABLE v_loc2 INT; CREATE VARIABLE v_loc3 INT; SET v_loc1 = 100; SET v_loc2 = 200; SET v_loc3 = 300; CALL Sample_proc ( v_loc1, v_loc2, v_loc3 ); caller : ์ด๋ฆ„์— ์˜ํ•œ ๋ฐฉ๋ฒ• CREATE VARIABLE v_name1 int; CREATE VARIABLE v_name2 int; CREATE VARIABLE v_name3 int; SET v_name1 = 100; SET v_name2 = 200; SET v_name3 = 300; CALL Sample_proc ( v_var3=v_name3, v_var2=v_name2, v_var1=v_name1 );
  • 127. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. returning results : case1 ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ”„๋กœ์‹œ์ ธ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ OUT ํ˜น์€ INOUT์œผ๋กœ ์„ ์–ธ๋˜์–ด์ง„ ํŒŒ๋ผ๋ฏธ ํ„ฐ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ณ„์ ์ธ ๊ฐ’์„ ๋ฐ›์•„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ) - creator CREATE PROCEDURE AverageSalary_proc ( OUT v_avgsal NUMERIC (20,3) ) BEGIN SELECT AVG(salary) INTO v_avgsal FROM employee; END; - caller CREATE VARIABLE v_average NUMERIC(20,3); CALL AverageSalary_proc(v_average); SELECT v_average;
  • 128. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. returning results : case2 ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ”„๋กœ์‹œ์ ธ์—์„œ SELECT ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์˜ˆ) - creator CREATE PROCEDURE SalaryList_proc ( IN v_dept_id INT ) BEGIN SELECT emp_id, salary FROM employee WHERE dept_id = v_dept_id; END - caller CALL SalaryList_proc(100); ์ฐธ๊ณ  Interactive SQL์‚ฌ์šฉ์‹œ ํ•ด๋‹น๋˜๋Š” ํ”„๋กœ์‹œ์ ธ์˜ ์ข…๋ฃŒ ํ›„์— RESUME๊ณผ ๊ฐ™์€ ์ปค์„œ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์•ผ๋งŒ ํ•ด๋‹น๋˜๋Š” ํ”„๋กœ์‹œ์ ธ๊ฐ€ DROP ๋˜๊ฑฐ๋‚˜ ALTER ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ”„๋กœ์‹œ์ ธ์—์„œ SELECT ๋Œ€์ƒ์ด ๋˜๋Š” ํ…Œ์ด๋ธ”๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค
  • 129. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. returning results : case3 ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ”„๋กœ์‹œ์ ธ์˜ RETURN๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ ์ˆซ์ž ์ƒํƒœ ๊ฐ’์„ ๊ฒฐ๊ณผ๋กœ ๋ฐ› ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. syntax RETURN [(expr)] ์˜ˆ) - creator CREATE PROCEDURE SalaryList_proc ( IN v_dept_id INT DEFAULT NULL) BEGIN IF v_dept_id IS NULL THEN RETURN โ€“99000; ELSE SELECT emp_id, salary FROM employee WHERE dept_id = v_dept_id; END IF; END - caller CREATE VARIABLE ret_value INT; ret_value = CALL SalaryList_proc(100); SELECT ret_value;
  • 130. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. result option Embedded SQL๋‚˜ ODBC์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ RESULT ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ SELECT ๊ฒฐ ๊ณผ์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ) - creator CREATE PROCEDURE SalaryList_proc ( IN v_dept_id INT DEFAULT NULL) RESULT ( โ€œEmployee IDโ€ INT, Salary NUMERIC(20,3)) BEGIN IF v_dept_id IS NULL THEN return โ€“99000; ELSE SELECT emp_id, salary FROM employee WHERE dept_id = v_dept_id; END IF; END
  • 131. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. dropping stored procedure ํ”„๋กœ์‹œ์ ธ์˜ ์ƒ์„ฑ์ž๋‚˜ ํ˜น์€ dba ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ DROP PROCEDURE ๋ผ๋Š” ๋ช…๋ น์–ด ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ํ”„๋กœ์‹œ์ ธ๋Š” ์‚ญ์ œ๋  ์ˆ˜ ์—†์ง€๋งŒ ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ ํ›„์— ์ปค์„œ๊ฐ€ ์—ด ๋ ค ์žˆ๋Š” ์ƒํƒœ๋กœ ๋œ ํ”„๋กœ์‹œ์ ธ๋„ ์—ญ์‹œ ์‚ญ์ œ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. syntax DROP PROCEDURE procedure_name; ์˜ˆ1) DROP PROCEDURE customer_list_proc; ์˜ˆ2) IF EXISTS ( SELECT 1 FROM sysprocedure WHERE proc_name = โ€˜proc_nameโ€™ ) THEN DROP PROCEDURE procedure_name; END IF; CREATE PROCEDURE โ€ฆโ€ฆ
  • 132. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. creating function resource ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ CREATE FUNCTION ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ALTER FUNCTION ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ํ•จ์ˆ˜์˜ ๋ชธ์ฒด๋Š” BEGIN๊ณผ END๋กœ ์ด๋ฃจ์–ด์ง„ compound statement ์ด๋ฉฐ ๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” IN ์ด๊ธฐ ๋•Œ๋ฌธ์— IN, OUT, INOUT ๊ณผ ๊ฐ™์€ keyword๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค return๋˜๋Š” ๋ฐ์ดํ„ฐํƒ€์ž…์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ RETURNS์ ˆ์ด ๊ผญ ํ•„์š”ํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋˜๋Œ๋ ค ์ฃผ๊ธฐ ์œ„ํ•œ RETURN๋ฌธ๋„ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค Syntax CREATE FUNCTION function_name ( [parameter][,โ€ฆโ€ฆ] ) RETURNS data_type BEGIN // Business Logic RETURN (return_value); END; Compound statement
  • 133. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. calling function ์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” non-aggregation ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์ด๋ฉด ์–ด๋””๋‚˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ทธ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์‹คํ–‰๊ถŒํ•œ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค syntax SELECT function_name ( [parameter][,โ€ฆโ€ฆ] ), โ€ฆโ€ฆ FROM table_name; ์˜ˆ) SELECT fullname ( emp_fname, emp_lname) FROM employee; SELECT fullname ( โ€˜Janeโ€™, โ€˜Smithโ€™ );
  • 134. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. returning function result RETURN๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์˜ˆ) - creator CREATE FUNCTION fullname ( v_fname CHAR(30), v_lname CHAR(30) ) RETURNS CHAR(61) BEGIN DECLARE name CHAR(61); SET name = v_fname || โ€˜ โ€˜ || v_lname; RETURN ( name ); END; - caller SELECT fullname (emp_fname, emp_lname) FROM employee; ์ฐธ๊ณ  INSERT โ€ฆ SELECT๋ฌธ์—์„œ ์‚ฌ์šฉ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 1๊ฑด์”ฉ ์ž…๋ ฅ์ด ์ˆ˜ํ–‰๋˜์–ด ์„ฑ๋Šฅ์— ์ง€๋Œ€ ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฉฐ EXTRACT ํ•  ๋•Œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
  • 135. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. dropping function ํ•จ์ˆ˜์˜ ์ƒ์„ฑ์ž๋‚˜ ํ˜น์€ dba ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ DROP FUNCTION ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ ์šฉํ•ด์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค syntax DROP FUNCTION function_name; ์˜ˆ1) DROP FUNCTION customer_list_proc; ์˜ˆ2) IF EXISTS ( SELECT 1 FROM sysprocedure WHERE proc_name = โ€˜func_nameโ€™ ) THEN DROP FUNCTION function_name; END IF; CREATE FUNCTION โ€ฆโ€ฆ
  • 136. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. permission dba๋‚˜ ํ˜น์€ resource ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋งŒ์ด ํ”„๋กœ์‹œ์ ธ๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค GRANT resource TO user_name; ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ๊ทธ ํ”„๋กœ์‹œ์ ธ๋‚˜ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์‹คํ–‰๊ถŒํ•œ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค GRANT execute ON procedure_name TO user_name; ํ”„๋กœ์‹œ์ ธ๋‚˜ ํ•จ์ˆ˜์˜ ์ƒ์„ฑ์ž ํ˜น์€ dba ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ์‹œ์ ธ๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • 137. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sp_helptext syntax sp_helptext procedure-name;
  • 138. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. tip stored procedure ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์€ ํ•ด๋‹น stored procedure ์˜ ์ด๋ฆ„๊ณผ ์—ฐ๊ด€์„ฑ ์žˆ๊ฒŒ ๋ช…๋ช…ํ•ด์•ผ ๋””๋ฒ„๊น…์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. stored procedure์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น๋˜๋Š” ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๋™ ์ผํ•˜๊ฒŒ ์„ ์–ธํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค. stored procedure์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋Š” v_์™€ ๊ฐ™์€ ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ˆ„๊ฐ€ ์–ธ์ œ ๋ณด์•„๋„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์–ด์•ผ ์ฝ๊ธฐ์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. stored procedure๋Š” ๋งŒ๋“ค์–ด์ง€๋Š” ์‹œ์ ์— ๊ธฐ๋ณธ์ ์ธ ์˜ค๋ฅ˜ ์ ๊ฒ€๋งŒ ํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์˜ค๋ฅ˜๋Š” ์‹ค ํ–‰์‹œ์— ์ ๊ฒ€๋˜์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑ ํ›„์— ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค. T-SQL๊ณผ ํ˜ผ์šฉํ•˜์ง€ ๋ง๊ณ  SYBASE IQ์˜ ๊ธฐ๋ณธ SQL์ธ WatcomSQL์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ํ•˜์‹ญ์‹œ์˜ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต๊ตฌ๋ถˆ๋Šฅ๊ณผ ๊ฐ™์€ ๋งŒ์•ฝ์˜ ์‚ฌํƒœ์— ๋Œ€๋น„ํ•˜์—ฌ ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์˜ script๋ฅผ ๋”ฐ๋กœ ๋ณด๊ด€ํ•˜๋ฉฐ ๋•Œ์— ๋”ฐ๋ผ์„œ๋Š” ์ด๋Ÿฐ script์˜ version ๊ด€๋ฆฌ๋„ ์ง์ ‘ ํ•˜์‹ญ์‹œ์˜ค.
  • 139. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. System function
  • 140. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žํ•จ์ˆ˜ ASCII(string_expr) : string_expr ์ฒซ ๋ฒˆ์งธ๋ฌธ์ž์˜ ์•„์Šคํ‚ค ๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค SELECT ASCII(โ€˜Aโ€™) -> 65 CHAR(integer_expr) : integer_expr์„ character๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค SELECT CHAR(65) -> โ€˜Aโ€™ INSERTSTR(integer_expr, string_expr1, string_expr2) : string2_expr2๋ฅผstring_expr1 ์˜ integer_expr๋ฒˆ ์งธ์— ๋ผ์›Œ ๋„ฃ์Šต๋‹ˆ๋‹ค SELECT INSERTSTR(3,โ€™ABCFGโ€™,โ€™DEโ€™) -> โ€˜ABCDEFGโ€™ LCASE(string_expr) : string_expr๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค(lower์™€ ๋™์ผ) LEFT(string_expr, integer_expr) : string_expr์˜ ์™ผ์ชฝ๋ถ€ํ„ฐ integer_expr ์ž๋ฆฌ๋งŒํผ ์„ ํƒ ํ•ฉ๋‹ˆ๋‹ค SELECT LEFT(โ€˜ABCDEFโ€™,3) -> โ€˜ABCโ€™ LENGTH(string_expr) : string_expr์˜ character์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค LOCATE(string_expr1, string_expr2) : string_expr2๊ฐ€ string_expr1์˜ ๋ช‡ ๋ฒˆ์งธ ์œ„์น˜ํ•˜ ๋Š”๊ฐ€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
  • 141. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žํ•จ์ˆ˜ LTRIM(string_expr) : string_expr์˜ ์™ผ์ชฝ blank๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค RIGHT(string_expr, integer_expr) : string_expr์˜ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ integer_expr ์ž๋ฆฌ ๋งŒํผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค SELECT RIGHT(โ€˜ABCDEFโ€™,3) -> โ€˜DEFโ€™ RTRIM(string_expr) : string_expr์˜ ์˜ค๋ฅธ์ชฝ blank๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค SIMILAR(string_expr1, string_expr2) : string_expr1๊ณผ string_expr2์˜ ์œ ์‚ฌ์„ฑ์ด ๋ช‡ % ์ธ๊ฐ€๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค STRING(string1, [string2,โ€ฆโ€ฆ..string99]) : ๋‚˜์—ด๋œ string์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ( || ๊ฐ€๋Šฅ) STUFF(string_expr1, start, length, string_expr2) : string_expr1์˜ start ๋ถ€ํ„ฐ length ๋งŒ ํผ ๋ฒ„๋ฆฌ๊ณ  ๊ทธ์ž๋ฆฌ์— string_expr2๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค SUBSTR(string_expr, start, length) : string_expr์—์„œ start ๋ฒˆ์งธ ๋ถ€ํ„ฐ length ๋งŒํผ ์ž˜๋ผ ์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค
  • 142. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์žํ•จ์ˆ˜ TRIM(string_expr) : string_expr์˜ ์ฒ˜์Œ๊ณผ ๋์˜ blank๋ฅผ ์ œ์™ธ์‹œํ‚ต๋‹ˆ๋‹ค UCASE(string_expr) : string_expr๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค(UPPER์™€ ๋™์ผ) ๊ทธ ์™ธ โ€ฆโ€ฆ
  • 143. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์žํ•จ์ˆ˜ ABS(numeric_expr) : ์ ˆ๋Œ€๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค CEILING(numeric_expr) : ์†Œ์ˆ˜์ ์ด ์žˆ์„ ๋•Œ ๊ฐ€์žฅ ํฐ integer ๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค FLOOR(numeric_expr) : ์†Œ์ˆ˜์ ์ด ์žˆ์„ ๋•Œ ๊ฐ€์žฅ ์ž‘์€ integer ๊ฐ’์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค MOD(dividend, divisor) : dividend๋ฅผ divisor๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค POWER(numeric_expr1, numeric_expr2) : numeric_expr1์— numeric_expr2 ์ œ๊ณฑํ•œ ๊ฒฐ ๊ณผ๋ฅผ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค RAND(integer_expr) : ์†Œ์ˆ˜์  ์ดํ•˜ 15์ž๋ฆฌ ๋‚œ์ˆ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค ROUND(numeric_expr, integer_expr) : numeric_expr์„ integer_expr ์ž๋ฆฌ๋กœ ๋ฐ˜์˜ฌ๋ฆผ ํ•ฉ ๋‹ˆ๋‹ค TRUNCATE(numeric_expr, integer_expr) : numeric_expr์—์„œ ์†Œ์ˆ˜์  integer_expr ์ž ๋ฆฌ ๋ฏธ๋งŒ์„ ์ž๋ฆ„ ๊ทธ ์™ธ acos, asin, atan, logโ€ฆโ€ฆ
  • 144. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‚ ์งœํ•จ์ˆ˜ DATE(expr) : expr์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋…„์›”์ผ๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค DATEFORMAT(date_expr, string_expr) : date_expr๋ฅผ string_expr ํ˜•์œผ๋กœ ๋ณ€ํ™˜ SELECT DATEFORMAT(โ€˜1999-01-01โ€™,โ€™mm dd, yyyyโ€™) -> 01 01, 1999 DAY(date_expr) : date_expr์˜ ๋‚ ์งœ๋ฅผ ์ˆ˜๋กœ ํ‘œํ˜„ (1~31) ํ•ฉ๋‹ˆ๋‹ค DAYNAME(date_expr) : date_expr์˜ ์š”์ผ์„ ์˜๋ฌธ์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค DAYS(date_expr1, date_expr2) : date_expr1์—์„œ date_expr2 ๊นŒ์ง€์˜ ๋‚ ์งœ ์ˆ˜ DOW(date_expr) : date_expr์˜ ์š”์ผ์„ ์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. (1=Sunday, 2=Monday, โ€ฆโ€ฆ7=Saturday) MONTH(date_expr) : date_expr์˜ ์›”์„ ์ˆ˜๋กœ ํ‘œํ˜„(1~12)ํ•ฉ๋‹ˆ๋‹ค MONTHNAME(date_expr) : date_expr์˜ ์›”์„ ์˜๋ฌธ์œผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค MONTHS(date_expr1, date_expr2) : date_expr1์—์„œ date_expr2 ๊นŒ์ง€์˜ ์ด ๊ฐœ์›” ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
  • 145. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‚ ์งœํ•จ์ˆ˜ QUARTER(date_expr) : date_expr์˜ ๋ถ„๊ธฐ๋ฅผ ์ˆ˜๋กœ ํ‘œํ˜„(1~4)ํ•ฉ๋‹ˆ๋‹ค WEEKS(date_expr1, date_expr2) : date_expr1์—์„œ date_expr2๊นŒ์ง€์˜ ์ด ์ฃผ YEAR(date_expr) : date_expr์˜ ๋…„๋„๋ฅผ ์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค YEARS(date_expr1, date_expr2) : date_expr1์—์„œ date_expr2 ๊นŒ์ง€์˜ ์ด ๋…„ YMD(year_num, month_num, day_num) : year_num์˜ ๋…„๋„์— month_num์˜ ๊ฐœ์›”์„ ๋” ํ•˜๊ณ  day_num์„ ๋”ํ•œ ์ผ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค NOW(*) : ํ˜„์žฌ ์ผ์ž์™€ ์‹œ๊ฐ„, ๋ถ„, ์ดˆ,Millisecond๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค TODAY(*) : ์‹œ๊ฐ„, ๋ถ„, ์ดˆ,Millisecond๋ฅผ ์ œ์™ธํ•œ ํ˜„์žฌ ์ผ์ž๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
  • 146. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‚ ์งœํ•จ์ˆ˜ ๋‚ ์งœ์—ฐ์‚ฐ SELECT YEARS(DATE(โ€˜2001-05-24โ€™), 1) : 2002-05-24 00:00:00.000 SELECT MONTHS(DATE(โ€˜2001-05-24โ€™), 1) : 2001-06-24 00:00:00.000 SELECT DAYS(DATE(โ€˜2001-05-24โ€™), 1) : 2001-05-25 00:00:00.000 ๋‚ ์งœ๋น„๊ต SELECT YEARS(DATE(โ€˜2001-05-24โ€™), DATE(โ€˜2004-05-26โ€™)) : 3 SELECT MONTHS(DATE(โ€˜2001-05-24โ€™), DATE(โ€˜2001-06-26โ€™)) : 1 SELECT DAYS(DATE(โ€˜2001-05-24โ€™), DATE(โ€˜2001-05-26โ€™)) : 2 ๋‚ ์งœ์ถ”์ถœ SELECT YEAR( โ€˜2001-05-24โ€™) : 2001 SELECT MONTH( โ€˜2001-05-24โ€™) : 05 SELECT MONTHNAME( โ€˜2001-05-24โ€™) : May SELECT DAY( โ€˜2001-05-24โ€™) : 24 SELECT DAYNAME( โ€˜2001-05-24โ€™) : Thursday ๊ธฐํƒ€ SELECT NOW() ํ˜น์€ SELECT TODAY() : ํ˜„์žฌ์ผ์„ ๊ตฌํ•จ SELECT DATEFORMAT( DATE(โ€˜2001-05-24โ€™), โ€˜yyyy/mm/ddโ€™) : 2001/05/24 SELECT DATE( โ€˜2001-05-24โ€™) : string โ€˜2001-05-24โ€™๋ฅผ ๋‚ ์งœ 2001-05-24๋กœ ๋ณ€๊ฒฝ
  • 147. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ํ•จ์ˆ˜ HOUR(datetime_expr) : datetime_expr์˜ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(0~23) HOURS(datetime_expr1, datetime_expr2) : datetime_expr1์—์„œ datetime_expr2๊นŒ์ง€ ์˜ ์ด ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค MINUTE(datetime_expr) : datetime_expr์˜ ๋ถ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(0~59) MINUTES(datetime_expr1, datetime_expr2) : datetime_expr1์—์„œ datetime_expr2๊นŒ ์ง€์˜ ์ด ๋ถ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค SECOND(datetime_expr) : datetime_expr์˜ ์ดˆ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(0~59) SECONDS(datetime_expr1, datetime_expr2) : datetime_expr1์—์„œdatetime_expr2๊นŒ ์ง€์˜ ์ด ์ดˆ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
  • 148. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐํƒ€ํ•จ์ˆ˜ NUMBER(*) : result set์˜ ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ผ๋ จ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค ROWID(table_name) : ๊ฐ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋  ๋•Œ ์ž…๋ ฅ๋˜๋Š” ์ˆœ์„œ์— ์˜ํ•ด ๊ฐ๊ฐ์˜ ID ๊ฐ€ ์ผ๋ จ ๋ฒˆํ˜ธ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ฒˆํ˜ธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋œ ํ…Œ ์ด๋ธ”์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์—ฌ derived table(in-line view) ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. COALESCE(expr1, expr2) : ์—ฌ๊ธฐ์„œ expr1์€ null ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’ ์ด๊ฑฐ๋‚˜ ํ‘œํ˜„์‹ ์ž…๋‹ˆ๋‹ค. expr2๋Š” null ๊ฐ’์„ ์ „ํ™˜์‹œ ๋Œ€์น˜ํ•  ๊ฐ’์ž…๋‹ˆ๋‹ค. IFNULL(expr1, expr2 [,expr3]) : expr1์˜ ๊ฐ’์ด NULL ์ด๋ฉด expr2๋ฅผ, ์•„๋‹ˆ๋ฉด expr3์„ ๋ฐ˜ํ™˜ ํ•ฉ๋‹ˆ๋‹ค. NULLIF(expr1, expr2) : expr1๊ณผ expr2๊ฐ€ ๊ฐ™์œผ๋ฉด NULL์„, ์•„๋‹ˆ๋ฉด expr1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • 149. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œํ•จ์ˆ˜ CURRENT DATE : ํ˜„์žฌ์ผ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค. CURRENT TIME : ํ˜„์žฌ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค. CURRENT TIMESTAMP: ํ˜„์žฌ์ผ์ž์™€ ํ˜„์žฌ์‹œ๊ฐ„์„ ์กฐํ•ฉํ•˜์—ฌ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค. CURRENT USER : ํ˜„์žฌ connection ๋˜์–ด ์žˆ๋Š” ์‚ฌ์šฉ์ž์˜ ID, ์ฆ‰ ์ž๊ธฐ์˜ ID ์ž…๋‹ˆ๋‹ค. SQLCODE : ํ˜„์žฌ์˜ SQLCODE๊ฐ’ ์ž…๋‹ˆ๋‹ค. SQLSTATE : ํ˜„์žฌ์˜ SQLSTATE๊ฐ’ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 26501๊ฐ’์€ โ€˜SQL statement errorโ€™ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค CONNECTION_PROPERTY(expr) : expr์˜ connection property ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. expr ๊ฐ’์€ sa_conn_properties์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. DB_PROPERTY(expr) : expr์˜ db property ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. expr ๊ฐ’์€ sa_db_properties์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. PROPERTY(expr) : expr์˜ server property ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. expr ๊ฐ’์€ sa_eng_properties์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • 150. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…๋ณ€๊ฒฝํ•จ์ˆ˜ CAST (expr AS data_type) : expr์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ data_type์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค SELECT CAST(โ€˜ABCDEโ€™ AS char(2)) : โ€˜ABโ€™ DATE(expr) : expr์„ DATE ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. SELECT DATE(20030301) : 2003-03-01 DATETIME(expr) : expr์„ DATETIME ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. SELECT DATETIME(โ€˜20030301โ€™) : 2003-03-01 00:00:00.000
  • 151. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Creating table and index
  • 152. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table syntax CREATE [ GLOBAL TEMPORARY ] TABLE [owner].table-name ( column-definition [column-constraint], column-definition [column-constraint], . . . . . . . . [table-constraint], [table-constraint], . . . . . . . . ) [IN dbspace-name] // system์ด๋ฉด catalog ์˜์—ญ, ์‚ฌ์šฉ์ž์ œ [ON COMMIT DELETE | PRESERVE ROWS] // global temporary table์ผ ๊ฒฝ์šฐ๋งŒ column-definition : column-name data-type [ [not] null ] column-constraint : unique, primary key, references, iq unique table-constraint : unique, primary key, foreign key
  • 153. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-column definition column-name, data-type, property๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ property์—๋Š” NULL๊ณผ NOT NULL๋ฅผ ์„  ํƒํ•  ์ˆ˜ ์žˆ๊ณ  ์ƒ๋žตํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ข…๋ฅ˜์— ๋”ฐ๋ผ NULL๊ณผ NOT NULL์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ์— ๋ฐ˜๋“œ์‹œ ํ‘œํ˜„ํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ์˜ˆ) CREATE TABLE employee ( emp_id INT NOT NULL, lname CHAR(30) NOT NULL, fname CHAR(30) NOT NULL, salary UNSIGNED INT NOT NULL, dept_id INT NOT NULL ) ์ฐธ๊ณ  NULL, NOT NULL ์ƒ๋žต์‹œ isql ์—์„œ๋Š” NOT NULL, dbisqlc์—์„œ๋Š” NULL์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
  • 154. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-constraint IQ UNIQUE ๋””ํดํŠธ ์ธ๋ฑ์Šค์ธ FP ์ธ๋ฑ์Šค์˜ ํƒ€์ž…์„ ์ปฌ๋Ÿผ์˜ ์นด๋””๋‚ ๋ฆฌํ‹ฐ์— ๋”ฐ๋ผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด Flat FP ์ธ๋ฑ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์นด๋””๋‚ ๋ฆฌํ‹ฐ๊ฐ€ 255 ์ดํ•˜์ด๋ฉด FFP ์ธ๋ฑ์Šค๊ฐ€, 256~65536 ์ด๋ฉด FFFP ์ธ๋ฑ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ ‡๊ฒŒ IQ UNIQUE๋ฅผ ์ ์šฉํ•˜๋ฉด ๋” ์ข‹์€ ์••์ถ•๋ฅ ๊ณผ ๋” ์ข‹์€ ์‹คํ–‰ ๊ณ„ํš์„ ์‚ฐ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„ ์™€์ค๋‹ˆ๋‹ค. ์ฐธ๊ณ  SYBASE IQ์˜ cost-based ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹คํ–‰ ๊ณ„ํš์„ ์ž‘์„ฑํ•  ๋•Œ catalog๋กœ ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๊ฐ€ ์ง€ ์ •๋ณด๋ฅผ ์ทจํ•ฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ธ์ž์ค‘์˜ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๊ฐ ์ปฌ๋Ÿผ์˜ ์นด๋””๋‚ ๋ฆฌํ‹ฐ์ž… ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์นด๋””๋‚ ๋ฆฌํ‹ฐ ์ •๋ณด๋Š” HG, LF ์ธ๋ฑ์Šค์™€ IQ UNIQUE์— ์˜ํ•ด์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค
  • 155. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-constraint UNIQUE unique HG ์ธ๋ฑ์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์˜ตํ‹ฐ๋งˆ์ด์ ธ์—๊ฒŒ ๋ณด๋‹ค ๋งŽ์€ ์ •๋ณด๋ฅผ ์ฃผ์–ด ์ข‹์€ ์‹คํ–‰๊ณ„ํš์„ ์ƒ์„ฑํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๊ด€๋ฆฌ์ƒ ๊ฐ€๋Šฅํ•˜๋ฉด CREATE INDEX๋กœ ์‚ฌ์šฉํ•˜์‹œ๋Š” ํŽธ์ด ์ข‹์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. PRIMARY KEY unique HG ์ธ๋ฑ์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ 2๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์œ ์ผ์„ฑ ์ฒดํฌ์™€ ์˜ตํ‹ฐ๋งˆ์ด์ ธ์—๊ฒŒ ๋ณด๋‹ค ๋งŽ์€ ์ •๋ณด๋ฅผ ์ฃผ์–ด ์ข‹์€ ์‹คํ–‰๊ณ„ ํš์„ ์ƒ์„ฑํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ์กฐํ•ฉ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ ๊ฐ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋Š” ๋ณ„๋„๋กœ ๋‹ค์‹œ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฉ˜์…˜ ํ…Œ์ด๋ธ”์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์กฐํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ธ ์งˆ์˜ ์‹คํ–‰ ์‹œ ์ธ๋ฑ์Šค๋กœ์„œ ๊ธฐ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, PK, FK์˜ ์„ ์–ธ์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋ฉฐ ์กฐํ•ฉ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋œ ๋ชจ๋“  ์ปฌ๋Ÿผ์ด Equal ์งˆ์˜๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. FOREIGN KEY non-unique HG ์ธ๋ฑ์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ 2๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ FK๊ฐ€ ์ƒ์„ฑ๋˜์–ด์ง€๋ฉด ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, Disable_RI_Check ์˜ต์…˜์ด Off ์ผ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. CHECK, ROLE, DEFAULT์™€ ๊ฐ™์€ CONSTRAINT๋Š” SYBASE IQ์—์„œ๋Š” ์ œ๊ณต๋˜์ง€ ์•Š์Šต ๋‹ˆ๋‹ค.
  • 156. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. referential integrity ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ๊ทœ์น™์€ 12.5 ๋ฒ„์ „๋ถ€ํ„ฐ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. FK๋ฅผ ํฌํ•จํ•œ ํ…Œ์ด๋ธ”์— INSERT/UPDATE๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด FK ๋ฐ์ดํ„ฐ๋ฅผ PK์™€ ๋น„๊ตํ•˜์—ฌ ์œ„๋ฐ˜๋˜๋ฉด ROLLBACKํ•˜๊ณ  ์•„๋‹ˆ๋ฉฐ INSERT/UPDATE๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. PK๋ฅผ ํฌํ•จํ•œ ํ…Œ์ด๋ธ”์— DELETE๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ด ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” FK ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด ROLLBACKํ•˜๋ฉฐ ์ด ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์œผ๋กœ์˜ UPDATE๋„ ์—ญ์‹œ ROLLBACK ํ•ฉ ๋‹ˆ๋‹ค. ๋‹จ, CASCADE DELETE์™€ FK ๊ฐ’์„ NULL๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ์€ ํ–ฅํ›„ ์ œ๊ณต ์˜ˆ์ •์ž…๋‹ˆ ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์— ALTER TABLE ADD FOREIGN KEY ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ RI ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. LOAD TABLE ํ•  ๋•Œ RI ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๋ฉด ์˜ต์…˜์— ๋”ฐ๋ผ ROLLBACK ํ˜น์€ ์žฌ์ฒ˜๋ฆฌ ํŒŒ์ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์žฌ์ฒ˜๋ฆฌ ํŒŒ์ผ๋กœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ธฐ๋Šฅ์€ 12.5 ์ด์ƒ์˜ ๊ธฐ๋Šฅ์ด๋ฉฐ ์ถ”ํ›„ ํ™•์ธ ๊ณผ์ •์„ ๊ฑฐ์ณ ์žฌ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. BASE TABLE๋ฅผ ์ฐธ์กฐํ•˜๋Š” FK๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜ ๋Š” FK ์—ญ์‹œ BASE TABLE์— ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ RI ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ 5% ์ •๋„์˜ ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ€ ์กด์žฌํ•˜๊ณ  M:M ์กฐ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ ์ด์ ๋„ ์žˆ์œผ๋ฏ€๋กœ ์ƒํ™ฉ์— ๋”ฐ ๋ผ ์ ์ ˆํžˆ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • 157. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-data type 8 19 20 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0 ~ 18,446,744,073,709,551,615 BIGINT UNSIGNED BIGINT 25-32,768 ~ 32,767SMALLINT 130 ~ 255TINYINT 4 10 11 -2,147,483,648 ~ 2,147,483,647 0 ~ 42,942,967,294 INTEGER UNSIGNED INT 256 + (n - 255)256 <= n <= 32K VARCHAR (n) CHARACTER VARYING (n) n1 <= n <= 255 VARCHAR (n) CHARACTER VARYING (n) n1 <= n <= 255 CHAR (n) CHARACTER (n) Storage (byte) Max Prec. RangeData Type
  • 158. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-data type 10, 1, NULLBIT 64K โ€“1LONG BINARY 32K โ€“ 11 <= n <= (32k โ€“ 1)VARBINARY (n) 2561 <= n <= 255BINARY (n) 2 to 69126-10^38 ~ 10^38 โ€“ 1 DECIMAL (p,s) NUMERIC (p,s) 8152.22 (^308) ~ 1.79 (^308)DOUBLE 47Platform-dependentREAL 4 or 816Platform-dependentFLOAT (n) Storage (byte) Max Prec. RangeData Type
  • 159. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-data type 800:00:00.000000 ~ 23:59.59.999999TIME 8 0001/01/01 00:00:00.000000 ~ 9999/12/31 23:59:59.999999 DATETIME SMALLDATETIME TIMESTAMP 40001/01/01 ~ 9999/12/31DATE Storage (byte) Max Prec. RangeData Type
  • 160. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-data type ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์„ ํƒํ•  ๋•Œ INT ๊ณ„์—ด์„ ์ตœ์šฐ์„  ์ˆœ์œ„๋กœ ๊ณ ๋ คํ•  ๊ฒƒ์„ ์ ๊ทน ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ( INT ๊ณ„์—ด : TINYINT, SMALLINT, INT, UNSIGNED INT, BININT, UNSIGNED BIGINT ) CHAR/VARCHAR : VARCHAR, CHAR์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ๊ทธ ๋’ค์— ์›๋ž˜ ์ƒ์„ฑ์‹œ์— ๊ธฐ ์ˆ ํ•œ ํฌ๊ธฐ ๋งŒํผ์˜ ๊ณต๋ฐฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฑ„์›Œ์ ธ ๊ธฐ์กด ์‹œ์Šคํ…œ์˜ VARCHAR๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์ €์žฅ๊ณต ๊ฐ„ ์ ˆ์•ฝ์ด๋ผ๋Š” ์ด์ ์€ ์‚ฌ๋ผ์ง€๊ณ  ์˜คํžˆ๋ ค ๊ฐ€๋ณ€๊ธธ์ด์ค‘ ์‹ค ๋ฐ์ดํ„ฐ ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๋Š” ์ถ”๊ฐ€ 1Byte๋ผ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 255 Byte์ดํ•˜๋Š” CHAR ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ ๋‹ค. ๋‚ ์งœ : ์ผ๋ฐ˜์ ์œผ๋กœ CHAR(8)๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š”๋ฐ DATE ํ˜•ํƒœ๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ด SYBASE IQ์˜ ํŠน์„ฑ์ƒ ์ธ๋ฑ์Šค์˜ ๊ฒ€์ƒ‰์†๋„๋ฅผ ํ–ฅ์ƒ ์‹œํ‚ค๋ฏ€๋กœ ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†์œผ๋ฉด DATE๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ 12.5 ์ด์ƒ์—์„œ ์†Œ๊ฐœ๋œ DATE INDEX์˜ ์„ฑ๋Šฅ์€ ๊ทธ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด DATE ์ผ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ๋กœ์„œ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ํ‘œํ˜„์ด ํ•„์š”์—†๊ณ  ๋‚  ์งœ์— ๋Œ€ํ•œ ํ‘œํ˜„๋งŒ ํ•„์š”ํ•˜๋‹ค๋ฉด 8Byte์˜ DATETIME ๋ณด๋‹ค๋Š” 4Byte์˜ DATE์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ ์ด ๊ณต๊ฐ„ ์ ˆ์•ฝ์ธก๋ฉด์—์„œ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์†Œ์ˆ˜์  ์ดํ•˜๊ฐ€ ์—†๋Š” ์ˆซ์ž ํƒ€์ž…์€ NUMERIC/DECIMAL๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค INT ํ˜•ํƒœ๋กœ ์„  ์–ธํ•˜๋Š” ๊ฒƒ์ด ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰ ์†๋„ ๋ฐ ์กฐ์ธ ์†๋„๋ฅผ ํ–ฅ์ƒ ์‹œํ‚ต๋‹ˆ๋‹ค. ํŠนํžˆ ์กฐ์ธ ์ปฌ๋Ÿผ์€ TINYINT, SMALLINT, UNSIGNED INT, UNSIGNED BIGINT๊ฐ€ ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.
  • 161. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-data type NUMERIC(p,s) ์˜ precision : ์•„๋ž˜ ํ‘œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ™•์žฅ์„ฑ ๊ณ ๋ คํ•ด ์ถฉ๋ถ„ํ•œ precision ์ •์˜ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. DECIMAL์€ NUMERIC๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ  ๋Œ€์šฉ๋Ÿ‰์„ ์ทจ๊ธ‰ํ•˜๋Š” ํŒฉํŠธ์™€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์—์„œ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ํฌ๊ธฐ ์„ ํƒ์ด ๋””์Šคํฌ ์ ˆ๊ฐ์— ์ง€๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1,000๋งŒ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ํŒฉํŠธ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ์„ INT์—์„œ TINYINT ๋‚˜ SMALLINT๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? 4 + 2 * (int(((prec โ€“ scale) + 3) / 4) + int((scale + 3) / 4) + 1)19 ์ด์ƒ 810 โ€“ 18 45 โ€“ 9 21 โ€“ 4 Length(byte)Precision
  • 162. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-data type IQ UNIQUE ์ ์šฉ ์ตœ์šฐ์„  ์ˆœ์œ„4Date๋‚ ์งœ Precision์€ 4,9,18 rule์— ์ ์šฉ๋จNumeric(p,s)์†Œ์ˆ˜์  ์ดํ•˜ ์ˆซ์ž ์†Œ์ˆ˜์  ์ดํ•˜ ์—†๋Š” ์ˆ˜Tinyint, Smallint, Int, unsigned int, Unsigned bigint ๊ธฐํƒ€ ์ˆซ์ž ์นผ๋Ÿผ Y=1/N=01Tinyint์—ฌ๋ถ€ ์—ฐ๋ น, ๊ฐ€์กฑ์ˆ˜ ๋“ฑ1Tinyint์ˆซ์ž 255์ดํ•˜ Int : 999,999,999 ์ง€์›4 2,1 Unsigned Int, Smallint,tinyint ์ผ์ˆ˜/๊ฑด์ˆ˜ ๋‹จ, ์ˆซ์žํ˜•ํƒœ๋กœ ๋œ ์ฝ”๋“œ๋Š” int ํ˜•์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ€๋Šฅํ•˜ ๋ฉด ์ฝ”๋“œ ๊ฐ’์€ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. Char์ฝ”๋“œ Index์‚ฌ์šฉ ์•ˆํ•จ256์ด์ƒVarcharLong String 4 8 1~30 4 Bytes ์ด์œจ, 0% ~ 999%Numeric(9,6)Ratio ๊ธˆ์•ก, ์ด์ž, ์„ธ๊ธˆ ๋“ฑ ์†Œ์ˆ˜์  ์ดํ•˜ ์—†๋Š” ์ˆ˜ Bigint : 999,999,999,999,999,999 ์ง€์› [Unsigned]BigintAmount 30 Bytes๊นŒ์ง€ Concatenate ๊ถŒ์žฅ 0 ~ 42์–ต ๋น„๊ณ  Unsigned intSystemKey (Dummy Sequence) CharBusiness Key Concatenation DataTypeColumn ๋ฒ”์ฃผ
  • 163. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create domain ์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” built-in ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ทผ๊ฐ„์œผ๋กœ ํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ๋งŒ๋“  ๋‹จ์ˆœํ•œ ํ˜• ํƒœ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ผ์น˜์„ฑ ํ–ฅ์ƒ ๋ฐ ํŽธ์ด์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. syntax create domain domain-name data-type [ [ not ] null ]; ์˜ˆ) create domain street_address char(35) ; create table twocol ( id int, street street_address ); ํ•ด๋‹นํ•˜๋Š” ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•œ object ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ํ•œํ•ด์„œ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. syntax drop domain domain-name; ์˜ˆ) drop domain street_address;
  • 164. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table in system ์˜ˆ) CREATE TABLE employee ( emp_id INT NOT NULL, lname CHAR(30) NOT NULL, fname CHAR(30) NOT NULL, salary UNSIGNED INT NOT NULL, dept_id INT NOT NULL ) IN SYSTEM ์ฐธ๊ณ  ์œ„์˜ ํ…Œ์ด๋ธ”์€ IQ Main Store ์˜์—ญ์— ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  Catalog Store์— ์ƒ์„ฑ๋˜๋ฉฐ 2GB์˜ ํŒŒ์ผํฌ๊ธฐ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•œ๊ณ„ ๊ฐ’์— ๋„๋‹ฌํ•˜๋ฉด IQ Server๊ฐ€ down๋˜๊ฑฐ๋‚˜ hang ์ƒํƒœ๊ฐ€ ๋˜๋Š”๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ถ€์ž‘์šฉ์ด ๋งŽ์Šต๋‹ˆ๋‹ค.SYBASE IQ์—์„œ ASA๋Š” ๋‹จ์ˆœํžˆ Catalog๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋“ค์˜ ์‚ฌ์šฉ์„ ๊ธˆํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค.
  • 165. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table ์˜ˆ) CREATE TABLE employee ( emp_id INT NOT NULL, lname CHAR(30) NOT NULL IQ UNIQUE(20000), fname CHAR(30) NOT NULL IQ UNIQUE(20000), salary UNSIGNED INT NOT NULL IQ UNIQUE(20000), dept_id INT NOT NULL IQ UNIQUE(50), PRIMARY KEY (emp_id), FOREIGN KEY (dept_id) REFERENCES dept(dept_id) )
  • 166. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create table-partition 12.5 ์ด์ƒ ๋ฒ„์ ผ์—์„œ๋Š” ๋งค์šฐ ํฐ ํŒฉํŠธ ํ…Œ์ด๋ธ”์„ UNION ALL VIEW๋ฅผ ํ†ตํ•ด ํŒŒํ‹ฐ์…˜ ์ฒ˜๋ฆฌํ•˜์—ฌ ์งˆ์˜ ๋ฐ ๋กœ๋”ฉ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ด ๋•Œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋Š” DBA๊ฐ€ ๋ชจ๋‘ ์ˆ˜๋™์œผ๋กœ ์ž‘์—…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์งˆ์˜๋Š” ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๋ทฐ๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•˜๊ณ  ์งˆ์˜ ์‹คํ–‰์‹œ ๊ฐ ํŒŒํ‹ฐ์…˜๋ณ„๋กœ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํŒŒํ‹ฐ์…˜๋œ ํŒฉํŠธ ํ…Œ์ด๋ธ”๋“ค์€ ๋””๋ฉ˜์…˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ FK ์„ ์–ธ์ด ์„ ํ–‰๋˜ ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ์ปค๋‹ค๋ž€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋กœ๋”ฉ ์ž‘์—…์‹œ ๋ฐœ์ƒํ•˜๋˜ HG ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ์†Œ์‹œ ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. t1 t2 t3 PartitionedBig Fact Table CREATE VIEW bigtable AS SELECT * FROM t1 UNION ALL SELECT * FROM t2 UNION ALL SELECT * FROM t3 UNION ALL VIEW
  • 167. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. alter table syntax ALTER TABLE [owner.]table-name {ADD column-definition [column-constraint]โ€ฆ | ADD table-constraint | MODIFY column-name [not] null | DROP column-name | DROP unique | DROP primary key | DROP foreign key | RENAME new-table-name | RENAME old-column-name TO new-column-name} ์˜ˆ) ALTER TABLE employee ADD OFFICE CHAR(20) NOT NULL; // ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ vs. ์—†์„ ๋•Œ ALTER TABLE employee MODIFY office NULL; // ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ vs. ์—†์„ ๋•Œ ALTER TABLE employee DROP office;
  • 168. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. drop table syntax DROP TABLE [owner.]table-name ์ด ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ด€๋˜์–ด์ง„ JOIN INDEX๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๋จผ์ € DROP ํ•˜๊ณ  ๊ทธ ํ›„์— DROP TABLE์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์•ก์„ธ์Šค ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. User โ€˜xxx_userโ€™ has the row in โ€˜xxx_tableโ€™ locked
  • 169. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. comment ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ทฐ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค object์— ๋Œ€ํ•ด ์‹œ์Šคํ…œ ์นด๋‹ค๋กœ๊ทธ๋‚ด์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ € ์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค syntax COMMENT ON { COLUMN [owner.]table-name.column-name | FOREIGN KEY [owner.]table-name.role-name | INDEX [owner.]index-name | PROCEDURE [owner.]procedure-name | TABLE [owner.]table-name โ€ฆ. IS comment; ์˜ˆ) COMMENT ON TABLE employee is โ€œEmployee Informationโ€; COMMENT ON TABLE employee is null; ์ฐธ๊ณ  ์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ์ •๋ณด๋Š” sp_iqtable์ด๋‚˜ sp_iqcolumn๋“ฑ๊ณผ ๊ฐ™์€ stored procedure ๊ฒฐ๊ณผ์˜ remarks ์ปฌ๋Ÿผ์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
  • 170. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sp_iqtable syntax sp_iqtable table-name;
  • 171. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sp_iqcolumn syntax sp_iqcolumn table-name;
  • 172. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sp_iqtablesize syntax sp_iqtablesize โ€˜[owner.]table-nameโ€™;
  • 173. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create view ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€๋Š” ์•Š์œผ๋ฉด์„œ ๋งˆ์น˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ๋ทฐ๊ฐ€ ์ฐธ์กฐ๋˜๋Š” ์‹œ์ ์— ์นด๋‹ค๋กœ๊ทธ๋กœ ๋ถ€ํ„ฐ ๋ทฐ์˜ ์ •์˜๋ฅผ ์ฝ์–ด ๋ทฐ๋ฅผ ํ˜•์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์ด ์ฐธ ์กฐํ•ฉ๋‹ˆ๋‹ค. syntax CREATE VIEW view-name [ (column-name,โ€ฆ) ] AS select-statement-without-order-by [ with check option ]; ์˜ˆ) CREATE VIEW emp_dept AS SELECT emp_lname, emp_fname, dept_name FROM employee e, department d WHERE e.dept_id = d.dept_id;
  • 174. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. drop view syntax DROP VIEW view-name; ์˜ˆ) DROP VIEW emp_dept;
  • 175. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sp_iqview syntax sp_iqview view-name;
  • 176. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create index syntax CREATE [ UNIQUE ] [index-type] INDEX index-name ON [owner.]table-name(column-name) [notify interger] index-type : CMP, HG, HNG, LF, WD, DATE, TIME, DTTM UNIQUE๋ฅผ ์ƒ๋žตํ•˜๋ฉด NON_UNIQUEํ•œ ์ธ๋ฑ์Šค๊ฐ€, index-type์„ ์ƒ๋žตํ•˜๋ฉด HG ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. FP์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•œ ๊ฐ ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์ ์žฌ ์ „/ํ›„์— ๋งŒ๋“ค์–ด ์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ ๋ฐ์ดํ„ฐ ์ ์žฌ ์ „์— ์ธ๋ฑ์Šค๋ฅผ ๋จผ์ € ๋งŒ๋“ค๊ณ  ๊ทธ ํ›„์— ๋กœ๋”ฉํ•˜๋Š” ํŽธ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•œ ํ›„์— ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋Š” UNIQUE/NON_UNIQUE HG ์ธ๋ฑ์Šค์ธ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ํ˜„์žฌ ๋ฒ„์ „๊นŒ์ง€ ๋Š” ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฉฐ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋กœ HG ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๊ทธ ๋ณตํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑ ํ•˜๋Š” ๊ฐœ๋ณ„ ์ปฌ๋Ÿผ ๋˜ํ•œ ์ธ๋ฑ์Šค ์ƒ์„ฑ ์กฐ๊ฑด์— ๋งž์ถฐ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. FP ์ธ๋ฑ์Šค๋Š” CREATE INDEX ๋ฅผ ํ†ตํ•ด์„œ๋Š” ๊ฒฐ์ฝ” ๋งŒ๋“ค ์ˆ˜ ์—†๊ณ  CREATE TABLE๋ฅผ ํ†ตํ•ด์„œ ๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค PRIMARY KEY constraint์™€ UNIQUE constraint์— ์˜ํ•ด์„œ UNIQUE HG ์ธ๋ฑ์Šค๊ฐ€ ์ž ๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ง€๋ฉฐ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ธ๋ฑ์Šค๋Š” DROP INDEX์— ์˜ํ•ด ์‚ญ์ œ๋  ์ˆ˜ ์—†๊ณ  ALTER TABLE์„ ํ†ตํ•ด์„œ๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • 177. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create index-LF index ์นด๋””๋‚ ๋ฆฌํ‹ฐ๊ฐ€ ๋น„๊ต์  ๋‚ฎ์€(1500 ์ดํ•˜) ์ปฌ๋Ÿผ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ธ๋ฑ์Šค๋กœ ์กฐ์ธ, ๊ทธ๋ฃน, ๋ฒ”์œ„์™€ ๊ฐ™์€ ๋ชจ๋“  ์—ฐ์‚ฐ์— ๊ฐ€์žฅ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ธ๋ฑ์Šค ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ Bit-Map์œผ๋กœ ์ €์žฅ ํ•˜๋ฉฐ ์ฒ˜๋ฆฌ ๋˜ํ•œ Bit Processing์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ HG ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ๊ฐ€์žฅ ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„ ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ์นด๋””๋‚ ๋ฆฌํ‹ฐ 10,000๊นŒ์ง€ ์ง€์› ๊ฐ€๋Šฅ ํ•˜๋‚˜ 1,500 ์ดํ•˜์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ์ดํ„ฐ์˜ 70%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
  • 178. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create index-HG index ์นด๋””๋‚ ๋ฆฌํ‹ฐ๊ฐ€ 1,500 ์ด์ƒ์ด๊ณ  ์กฐ์ธ, ๊ทธ๋ฃน, ๋ฒ”์œ„ ๊ทธ๋ฆฌ๊ณ  ํŠน์ •์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ ํ•˜๋Š” ์ปฌ๋Ÿผ์— ์ด์šฉํ•˜๋Š” ์ธ๋ฑ์Šค๋กœ B-Tree๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธ๋ฑ์Šค ์ž…๋‹ˆ๋‹ค. ์œ ์ผ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” UNIQUE HG๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ ์ดํ„ฐ์˜ 120%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ์ ์žฌ ์ž‘์—…์‹œ์— ๋งŽ์€ ๋ถ€๋‹ด์„ ์ฃผ๋Š” ์ธ๋ฑ์Šค์ด๋ฏ€๋กœ ํ•œ ํ…Œ์ด๋ธ”์— ๋„ˆ๋ฌด ๋งŽ์€ HG ์ธ๋ฑ์Šค๊ฐ€ ๋งŒ๋“ค์–ด ์ง€์ง€ ์•Š๋„๋ก ์ฃผ์˜ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฒฝํ—˜์ƒ ํ…Œ์ด๋ธ”๋‹น 4~5๊ฐœ์˜ HG ์ธ๋ฑ์Šค๊ฐ€ ์ ๋‹นํ•ฉ๋‹ˆ๋‹ค. CREATE TABLE์˜ UNIQUE๋‚˜ PRIMARY KEY constraint์— ์˜ํ•ด ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค
  • 179. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create index-HNG index SUM(), AVG()์™€ ๊ฐ™์€ aggregate ํ•จ์ˆ˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ์ˆ˜์น˜ ์ปฌ๋Ÿผ์ด๋‚˜ ๋ฒ”์œ„ ์งˆ์˜์— ์‚ฌ์šฉ๋˜ ๋Š” ์ปฌ๋Ÿผ์— ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ฑ์Šค๋กœ ์นด๋””๋‚ ๋ฆฌํ‹ฐ์™€ ๋ฌด๊ด€ํ•˜๋ฉฐ ์„ ํ˜ธํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ INT ๊ณ„์—ด ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ DATE ๊ณ„์—ด์˜ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๋ฒ”์œ„ ์งˆ์˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด HNG๋ณด๋‹ค๋Š” DATE ์ธ๋ฑ ์Šค์˜ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ LF ํ˜น์€ HG์™€ ๊ฐ™์€ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ปฌ๋Ÿผ์ด๋ผ๊ณ  ํ•ด๋„ ๊ทธ ์ปฌ๋Ÿผ์ด ์œ„์™€ ๊ฐ™์€ ์กฐ๊ฑด์— ๋งŒ์กฑ๋˜๋ฉด ์ƒ์„ฑํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ์ดํ„ฐ์˜ 70%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
  • 180. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create index-CMP, WD index CMP ์ธ๋ฑ์Šค๋Š” ์นด๋””๋‚ ๋ฆฌํ‹ฐ์™€ ๋ฌด๊ด€ํ•˜๊ณ  ์ปฌ๋Ÿผ ๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค๋กœ ๋™ ์ผํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ฐ„์˜ ๋น„๊ต๋ฅผ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ์ธ๋ฑ์‹ฑ ๊ธฐ๋ฒ•์ด๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ์ดํ„ฐ ์˜ 70%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. WD ์ธ๋ฑ์Šค๋Š” ์นด๋””๋‚ ๋ฆฌํ‹ฐ์™€ ๋ฌด๊ด€ํ•˜๋ฉฐ ์ฃผ์†Œ๋‚˜ ์„ค๋ช…๊ณผ ๊ฐ™์ด long varchar ์ปฌ๋Ÿผ์— ํŠน์ • ๋ฌธ ์ž๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๋ฑ์‹ฑ ๊ธฐ๋ฒ•์œผ๋กœ ์ปฌ๋Ÿผ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ ์–ด๋ ค ์šด ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์ปฌ๋Ÿผ์„ ์œ„ํ•œ ์ธ๋ฑ์Šค ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์›์‹œ ๋ฐ์ดํ„ฐ์˜ 120%๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • 181. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. create index-DATE, TIME, DTTM DATE ๊ณ„์—ด์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋Ÿผ์„ ์œ„ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ๋ฑ์Šค๋กœ ๋‚ ์งœ๊ด€๋ จ ํ•จ์ˆ˜ ์ ์šฉ์‹œ ๊ธฐ์กด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ ์Šต๋‹ˆ๋‹ค. ( DATE ๊ณ„์—ด : DATE, DATETIME, TIME ) ์นด๋””๋‚ ๋ฆฌํ‹ฐ์™€ ๋ฌด๊ด€ํ•˜๋ฉฐ UNIQUE๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†๊ณ  ์˜ค์ง DATE ๊ด€๋ จ๋œ ์ปฌ๋Ÿผ์—๋งŒ ์ ์šฉ ๊ฐ€ ๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๋ฒ”์œ„ ์งˆ์˜, datepart ์งˆ์˜์— ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฒ”์œ„ ์งˆ์˜์—์„œ๋Š”HNG ์ธ๋ฑ์Šค ๋ณด ๋‹ค ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์ด๋‚˜ EQUALITY ์งˆ์˜๋Š” LF/HG ๋ณด๋‹ค ๋А๋ฆฝ๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ์งˆ์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. datepart ํ•จ์ˆ˜: Month, Day, Week, Quarter, Yearโ€ฆ ๋ฒ”์œ„ : >, >=, <, <=, <>, =, between ์ง€์›๋˜์ง€ ์•Š๋Š” ์งˆ์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Aggregate ํ•จ์ˆ˜ : sum, avg, min, max
  • 182. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. begin parallel IQ syntax BEGIN PARALLEL IQ create-index-statement-list; END PARALLEL IQ SYBASE IQ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ์†๋„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•œ ํ›„ ์ธ๋ฑ ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์†๋„๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ ์žฌ ์ „์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ํ•„์š”์„ฑ์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด create-index-statement-list์— ๊ธฐ์ˆ ๋œ ๋ช…๋ น์–ด๋Š” ๊ธฐ ๋ณธ์ ์œผ๋กœ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” create-index-statement-list ์ „์ฒด์— ๋Œ€ํ•œ ์–ด๋–ค ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋กค๋ฐฑ๋˜๋Š” ATOMIC ํ˜•ํƒœ๋กœ ๋™์ž‘๋˜๋ฉฐ ํ•œ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ง๋ ฌ๋กœ ์ฒ˜๋ฆฌ ๋ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ  create-index-statement-list์˜ ์ ์ • ์ˆ˜์น˜๋Š” CPU์ˆ˜ โ€“ 1 ์ด๋ฉฐ ์ด ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰์ค‘์ธ ๋™์•ˆ ์— ๋ฐœ์ƒํ•˜๋Š” ์–ด๋–ค DDL๋„ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • 183. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. drop index syntax DROP INDEX [[owner.]table-name.] index-name FP ์ธ๋ฑ์Šค์™€ PRIMARY KEY, UNIQUE constraint์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์ง„ HG ์ธ๋ฑ ์Šค๋Š” ์ด ๋ช…๋ น์–ด์— ์˜ํ•ด ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ  CREATE INDEX์— ์˜ํ•ด ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ์นด๋””๋‚ ๋ฆฌํ‹ฐ ์ •๋ณด๊ฐ€ ์นด๋‹ค๋กœ๊ทธ์— ์ €์žฅ๋˜์–ด ์‹คํ–‰๊ณ„ํš ์ž‘์„ฑ์‹œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ HG์™€ LF ์ธ๋ฑ์Šค๋งŒ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์นด๋””๋‚ ๋ฆฌํ‹ฐ ์ •๋ณด๋Š” sp_iqcolumn์˜ cardinality ์ปฌ๋Ÿผ์— ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค.
  • 184. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sp_iqindex syntax sp_iqindex table-name;
  • 185. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. sp_iqindexsize syntax sp_iqindexsize index-name;
  • 186. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Loading and Extracting data
  • 187. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load DW ๋Š” OLTP์‹œ์Šคํ…œ๊ณผ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๋ฐฉ๋ฒ•์ด ์‹ค์‹œ๊ฐ„์ด ์•„๋‹ˆ๋ผ ์—…๋ฌด์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ผ ์ • ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๊ณ  bulk๋กœ ์ ์žฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. SYBASE IQ๋„ ๋ฐ์ดํ„ฐ๋ฅผ bulk๋กœ ์  ์žฌํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋ณธ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์žฌ๋ฅผ ์œ„ํ•œ ์›์‹œ ๋ฐ์ดํ„ฐ๋Š” ์ผ์ •ํ•œ ํฌ๋งท์„ ๊ฐ–์ถ”๊ณ  flat file ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋ฉฐ ํฌ๋งทํ˜•ํƒœ์— ๋”ฐ ๋ผ binary file๊ณผ ascii file๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. ํ•œ ํ…Œ์ด๋ธ”์— ์ ์žฌ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ์„ ๋•Œ ์–ด๋–ค ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋„ ๊ทธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ถŒ ํ•œ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ฝ๊ธฐ๋Š” snapshot versioning ์ด๋ผ๋Š” ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ์–ด๋–ค ์‚ฌ์šฉ์ž๋„ ๊ฐ€ ๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ ์žฌ ๋Œ€์ƒ์ด ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์กด์žฌ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ฅผ replace ํ•˜๋Š” UPSERT ๊ธฐ๋Šฅ์€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. LOAD ๋ช…๋ น์–ด๋Š” ์˜ต์…˜์— ๋”ฐ๋ผ ์ ์žฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘๋‹ค ์ž…๋ ฅ๋˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์ „ํ˜€ ์ž…๋ ฅ๋˜ ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ LOAD ๋ช…๋ น์–ด๋Š” ์˜ต์…˜์— ๋”ฐ๋ผ ์ ์žฌ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ์™€ ์˜ค๋ฅ˜ ์›์ธ์— ๋Œ€ํ•ด ํŒŒ์ผ ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ž„์‹œ ํ…Œ์ด๋ธ”๋„ ์ผ๋ฐ˜ ๋‹ค๋ฅธ ์˜๊ตฌ์ ์ธ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์ ์žฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • 188. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load syntax LOAD TABLE [owner.] table-name [ ( column-name [column-spec] | filler (filler-type) ) ] FROM โ€˜file-nameโ€™[, . . . . . . ] // ์›์‹œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์ด๋ฆ„ [ FORMAT โ€˜asciiโ€™ | โ€˜binaryโ€™ ] // ์›์‹œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ํฌ๋งท [ DELIMITED BY โ€˜stringโ€™ ] // ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ ๊ตฌ๋ถ„์ž [ QUOTES OFF ] // off [ ESCAPES OFF ] // off [ WITH CHECKPOINT ON | OFF ] // checkpoint ์‹คํ–‰์—ฌ๋ถ€ [ ROW DELIMITED BY โ€˜stringโ€™ ] // row ๋ถ„๋ฆฌ ๊ตฌ๋ถ„์ž [ LIMIT number-of-rows ] // ์ด ์ž…๋ ฅ ๊ฑด์ˆ˜ ์ œํ•œ [ NOTIFY number-of-rows ] // message display ๊ฑด์ˆ˜ [ ON FILE ERROR rollback | finish | continue ] // multi-file์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ [ SKIP number-of-row ] // ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ช‡ ๊ฑด์„ ์ƒ๋žต [ START ROW ID number-of-row ] // ๋ช‡ ๋ฒˆ์งธ row ๋ถ€ํ„ฐ ์ž…๋ ฅ [ BLOCK FACTOR number | block size number ] // block๋‹น row ์ˆ˜ [ IGNORE CONSTRAINT constraint-type [,โ€ฆ]] // ์ œ์•ฝ์‚ฌํ•ญ ์œ„๋ฐ˜ ํšŸ์ˆ˜ ์ •์˜ [ MESSAGE LOG โ€˜file-nameโ€™ // ์˜ค๋ฅ˜ ๊ธฐ๋ก ํŒŒ์ผ ์ •์˜ ROW LOG โ€˜file-nameโ€™ // ์˜ค๋ฅ˜๋ฐ์ดํ„ฐ ๊ธฐ๋ก ํŒŒ์ผ ์ •์˜ [ONLY LOG log-what, [โ€ฆ]] // ์˜ค๋ฅ˜ ์ •์˜ [ LOG DELIMITED BY โ€˜stringโ€™ ] // ์˜ค๋ฅ˜ ๋ฐ์ดํ„ฐ ํ•„๋“œ ๋ถ„๋ฆฌ์ž . . . . . .
  • 189. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-column spec FROM์ ˆ์— ๊ธฐ์ˆ ํ•œ ์†Œ์ŠคํŒŒ์ผ์˜ ํ•„๋“œ ํฌ๋งท๊ณผ LOAD TABLE์ ˆ์—์„œ ๊ธฐ์ˆ ํ•œ ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. column-name : ์ ์žฌ๋ฅผ ์œ„ํ•œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„ ascii(numer-of-byte) : number-of-byte ํฌ๊ธฐ์˜ ํ•„๋“œ ๊ฐ’์„ ๋Œ€์ƒ ์ปฌ๋Ÿผ๊ณผ ๋งคํ•‘ โ€˜field delimiterโ€™ : field delimiter ์ „ ๊นŒ์ง€์˜ ๊ฐ’์„ ๋Œ€์ƒ ์ปฌ๋Ÿผ๊ณผ ๋งคํ•‘ date(format) : format ํ˜•ํƒœ์˜ ํ•„๋“œ ๊ฐ’์„ ๋Œ€์ƒ ์ปฌ๋Ÿผ์˜ DATE ํƒ€์ž…๊ณผ ๋งคํ•‘ nulls ( blanks | zeros | โ€˜literalโ€™ [,โ€™literalโ€™] . . . ) : ๊ด„ํ˜ธ์•ˆ์˜ ๋‚ด์šฉ์„ NULL๋กœ ๋ณ€ํ™˜ filler(number-of-byte) : number-of-byte ๋งŒํผ์˜ ๊ธธ์ด๋ฅผ ๊ฑด๋„ˆ ๋œ€ ์˜ˆ) LOAD TABLE sales ( l_orderkey โ€˜|โ€™, l_quantity ascii(4) null(blanks, zeros, โ€˜9999โ€™), filler(1), l_shipdate date(โ€˜YYYY/MM/DDโ€™) null(blanks, zeros, โ€™0000/00/00โ€™) ) FROM . . . . . . . 0001|100002003/10/15 0002|200000000/00/00 0003|999902003/10/15 0004|100002003/10/11 โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ. file format
  • 190. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-from clause ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†Œ์ŠคํŒŒ์ผ์„ ์ฝค๋งˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํ•˜๋‚˜์˜ FROM์ ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†Œ์ŠคํŒŒ์ผ์„ ํ•˜๋‚˜์˜ LOAD ๋ช…๋ น์–ด๋กœ ์ ์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†Œ์ŠคํŒŒ์ผ์„ ํ†ตํ•ด ์ ์žฌ์ž‘์—… ์ˆ˜ํ–‰ํ•  ๋•Œ ์—ฐ๊ด€์žˆ๋Š” ์˜ต์…˜์œผ๋กœ๋Š” ON FILE ERROR ๋ผ๊ณ  ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ์ ์žฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด ๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ๊ธฐ์ˆ ํ•ด ์ฃผ๋Š” ์˜ต์…˜ ์ž…๋‹ˆ๋‹ค. ๋‹จ, ์—ฌ๊ธฐ์„œ์˜ ์˜ค๋ฅ˜๋Š” ํ•ด๋‹น๋˜๋Š” ํŒŒ์ผ์ด ์—†๋‹ค๊ฑฐ๋‚˜ ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์—†์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋งŒ์„ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค. ON FILE ERROR ROLLBACK : ๋””ํดํŠธ ์˜ต์…˜์œผ๋กœ์„œ ์ ์žฌ ์ „์ฒด๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค ON FILE ERROR FINISH : ํ˜„์žฌ๊นŒ์ง€ ์ˆ˜ํ–‰๋˜์–ด์ง„ ํŒŒ์ผ๊นŒ์ง€๋งŒ ์ ์žฌ์ž‘์—…์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค ON FILE ERROR CONTINUE : ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋œ ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋›ฐ์–ด ์ž‘์—…์„ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค ์˜ˆ) LOAD TABLE sales ( l_orderkey โ€˜|โ€™, l_quantity ascii(4) null(blanks, zeros, โ€˜9999โ€™), filler(1), l_shipdate date(โ€˜YYYY/MM/DDโ€™) null(blanks, zeros, โ€™0000/00/00โ€™) ) FROM โ€˜/data/sales1.datโ€™,โ€™/data/sales2.datโ€™,โ€™/data/sales3.datโ€™ ON FILE ERROR FINISH . . . . . .
  • 191. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-delimited by option column-spec์— ์ปฌ๋Ÿผ๋‹น ๊ทธ ์ปฌ๋Ÿผ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ„๋ฆฌ์ž๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๊ณ  ์ ์žฌํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž์˜ ๋””ํดํŠธ๋Š” ์ฝค๋งˆ์ด๋ฉฐ row delimited by ์˜ต์…˜๊ณผ ๋ณ‘ํ–‰ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ ๋’ค์—๋„ ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ ๋’ค์— ๋ฐ˜๋“œ์‹œ ํ–‰ ๋ถ„๋ฆฌ ์ž๊ฐ€ ํ‘œํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ˆ˜๋ฌธ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค tab : x09, newline : x0a, carriage return : x0d, null : x00 ์˜ˆ) LOAD TABLE sales ( l_orderkey, l_quantity, l_shipdate ) FROM โ€˜/data/sales.datโ€™ DELIMITED BY โ€˜|โ€™ ROW DELIMITED BY โ€˜nโ€™ . . . . . . sales.dat 0001|1000|20031015| 0002|2000|20031012| 0003|9999|20031015| 0004|1000|20031011| โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ.
  • 192. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-row delimited by option column-spec์— ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ„๋ฆฌ์ž๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๊ณ  ์ ์žฌํ•˜๋Š” ํ…Œ ์ด๋ธ”์˜ ํ–‰ ๋ถ„๋ฆฌ์ž๋ฅผ ์˜ต์…˜์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค 12.4.2 ๋ถ€ํ„ฐ ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  newline ์œผ๋กœ ํ–‰ ๋ถ„๋ฆฌ์ž๋ฅผ ์„ ์–ธํ•ด์•ผ๋งŒ ๋ณ‘๋ ฌ์ ์žฌ๊ฐ€ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋งˆ์ง€๋ง‰ ์ปฌ๋Ÿผ ๋’ค์—๋„ ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ ๋’ค์— ๋ฐ˜๋“œ์‹œ ํ–‰ ๋ถ„๋ฆฌ ์ž๊ฐ€ ํ‘œํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ˆ˜๋ฌธ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค tab : x09, newline : x0a, carriage return : x0d, null : x00 ์˜ˆ) LOAD TABLE sales ( l_orderkey, l_quantity, l_shipdate ) FROM โ€˜/data/sales.datโ€™ DELIMITED BY โ€˜|โ€™ ROW DELIMITED BY โ€˜nโ€™ . . . . . . sales.dat 0001|1000|20031015| 0002|2000|20031012| 0003|9999|20031015| 0004|1000|20031011| โ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆโ€ฆ.
  • 193. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-ignore constraint option ์ง€์ •๋œ constraint์— ๋Œ€ํ•œ ์œ„๋ฐ˜์ด ์ง€์ •๋œ ํšŸ์ˆ˜๋ณด๋‹ค ๋งŽ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋กค๋ฐฑ๋˜๋ฉฐ ์œ„๋ฐ˜๋œ ๋ฐ์ด ํ„ฐ๋Š” ์ ์žฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ฐ constraint์— ๋Œ€ํ•œ ์œ„๋ฐ˜ ํšŸ์ˆ˜๋ฅผ 0์œผ๋กœ ํ•œ๋‹ค๋ฉด ์œ„๋ฐ˜๋œ ๋ณด ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ ์žฌ๋˜์ง€ ์•Š๊ณ  ๋กค๋ฐฑ๋„ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ MESSAGE LOG ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ์ œ์•ฝ์‚ฌํ•ญ์ด ์œ„๋ฐ˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๋กœ ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ์ด ๋˜๋Š” constraint ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. UNIQUE : ์œ ์ผ์„ฑ์ด ์œ„๋ฐ˜๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€ NULL : NOT NULL ์ปฌ๋Ÿผ์— NULL ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€ FOREIGN KEY : ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„๋ฐ˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€ DATA VALUE : ์„ ์–ธ๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ์œ„๋ฐ˜๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€ ALL : UNIQUE, NULL, FOREIGN KEY, DATA VALUE์˜ ์กฐํ•ฉ ์˜ˆ) LOAD TABLE sales โ€ฆโ€ฆโ€ฆโ€ฆ. โ€ฆโ€ฆโ€ฆโ€ฆ. IGNORE CONSTRAINT NULL 50, UNIQUE 100, ALL 125 // 51๋ฒˆ ์ด์ƒ์˜ NULL ๊ฐ’ ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ 101๋ฒˆ ์ด์ƒ์˜ UNIQUE ๊ฐ’ ์œ„๋ฐ˜์ด ๋ฐœ์ƒ // ํ•˜๊ฑฐ๋‚˜ 1๋ฒˆ ์ด์ƒ์˜ FOREIGN KEY ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์กฐํ•ฉํ•ด์„œ ์ด 126๋ฒˆ ์ด์ƒ์˜ // ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•˜๋ฉด ๋กค๋ฐฑ๋ฉ๋‹ˆ๋‹ค.
  • 194. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-message log option ์ง€์ •๋œ ์œ„๋ฐ˜ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•˜๋Š” ํŒŒ์ผ๊ณผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํŒŒ์ผ์„ ๊ธฐ์ˆ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ถ”ํ›„์— ์ด ๋‘๊ฐœ์˜ ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. MESSAGE LOG์— ๊ธฐ์ˆ ํ•˜๋Š” ํŒŒ์ผ์—๋Š” ์œ„๋ฐ˜ ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•˜๋ฉฐ ROW LOG์— ๊ธฐ์ˆ ํ•˜๋Š” ํŒŒ ์ผ์—๋Š” ํ•„๋“œ ๋ถ„๋ฆฌ์ž๋กœ ๊ตฌ๋ถ„๋œ ์˜ค๋ฅ˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ ๋ถ„๋ฆฌ์ž๋Š” ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์ฝค๋งˆ ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  LOG DELIMITED BY ์˜ต์…˜์— ์˜ํ•ด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š” ์œ„๋ฐ˜ ์‚ฌํ•ญ์€ NULL, UNIQUE, FOREIGN KEY, DATA VALUE, ALL์ด ์žˆ ์œผ๋ฉฐ ๊ทธ ๋‚ด์šฉ์€ IGNORE CONSTRAINT์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” MESSAGE LOG๋Š” SYBASE IQ์˜ ๊ธฐ๋ณธ์ ์ธ IQ message log ์™€๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. MESSAGE LOG๋‚˜ ROW LOG๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ์ƒˆ๋กœ ๊ธฐ๋ก๋˜๋Š” ์ •๋ณด๋Š” ํ˜„์žฌ ๊ธฐ๋ก๋œ ์ • ๋ณด์— ์ถ”๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ONLY LOG๊ฐ€ ์ƒ๋žต๋œ๋‹ค๋ฉด ์ ์žฌ ์‹œ์ž‘์‹œ๊ฐ„๊ณผ ์ข…๋ฃŒ์‹œ๊ฐ„๋งŒ์ด MESSAGE LOG ํŒŒ์ผ์— ๊ธฐ๋ก ๋ฉ๋‹ˆ๋‹ค. ์ ์žฌ ์ž‘์—…์ด ๋๋‚˜๋ฉด IQ message log ํŒŒ์ผ์— constraint ์œ„๋ฐ˜ ํšŸ์ˆ˜์™€ skip๋œ ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ ์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
  • 195. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-message log option ์˜ˆ) LOAD TABLE sales โ€ฆโ€ฆโ€ฆโ€ฆ IGNORE CONSTRAINT UNIQUE 200, NULL 50 MESSAGE LOG โ€˜msg.logโ€™ ROW LOG โ€˜row.logโ€™ ONlY LOG UNIQUE, NULL, DATA VALUE LOG DELIMITED BY โ€˜|โ€™ msg.log 2002-07-15 15:00:23 Load Table sales: Integrity Constraint Violations 1267 DATA VALUE 4 3126 UNIQUE 1 3216 NULL 3 2002-07-15 16:00:10 LOAD TABLE sales Completed row.log 2002-07-15 15:00:23 Load Table sales: Integrity Constraint Violations 1267 |Mary Smith|56|M|ABCDEFG|1943/03/31|MC| 3216 |John Jones|NULL|NULL|S|1945/02/28|NULL โ€ฆ 2002-07-15 16:00:10 LOAD TABLE sales Completed rowid, type, column number rowid, delimiter, data
  • 196. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-etc WITH CHECKPOINT : ์ด ์˜ต์…˜์€ ์ ์žฌ๊ฐ€ ๋๋‚œ ํ›„์— CHECKPOINT์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ on์„ ๋ฐ”๊ฟ€ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ ์žฌ ํ›„์— ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์กด์žฌํ•˜๋˜ ๋ฐ์ดํ„ฐ๋“ค ์ด ๋ชจ๋‘ ๋””์Šคํฌ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ESCAPSES : ์ ์žฌ ๋Œ€์ƒ ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ์ค‘์— ์—ญ ์Šฌ๋ž˜์‹œ ๋’ค์— ๋‚˜์˜ค๋Š” ๋ฌธ์ž๋ฅผ ํŠน์ˆ˜ ๋ฌธ์ž๋กœ ์ธ์ •ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ASA ์—์„œ๋Š” on/off ์„ค์ •์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ SYBASE IQ ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ off๋กœ๋งŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ƒ๋žตํ•˜๋ฉด ์—ญ ์Šฌ๋ž˜์‹œ ๋’ค์— ๋‚˜์˜ค๋Š” ๋ฌธ์ž ๋ฅผ ํŠน์ˆ˜๋ฌธ์ž๋กœ ์ธ์‹ํ•˜๋Š” on์œผ๋กœ ์„ค์ •๋˜๋ฉฐ SYBASE IQ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค QUOTES : ์ ์žฌ ๋Œ€์ƒ ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ์ค‘์— quote(โ€˜) ๋ฌธ์ž๋ฅผ ๋ฐ์ดํ„ฐ๋กœ ์ธ์ •ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ • ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ASA ์—์„œ๋Š” on/off ์„ค์ •์ด ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ SYBASE IQ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ off๋กœ๋งŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ƒ๋žตํ•˜๋ฉด quote ๋ฌธ์ž๋ฅผ ๋ฐ์ดํ„ฐ ์ž์ฒด๋กœ ์ธ์ •ํ•˜์ง€ ์•Š๋Š” on์œผ๋กœ ์„ค์ •๋˜๋ฉฐ SYBASE IQ์—์„œ๋Š” ๋ฌธ๋ฒ•์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. LIMIT : ์ž…๋ ฅํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ตœ๋Œ€ ๊ฑด์ˆ˜๋ฅผ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ 0์œผ๋กœ ์ž…๋ ฅ๊ฑด์ˆ˜์— ๋Œ€ ํ•œ ์ œ์•ฝ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. NOTIFY : ๋ช‡ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์žฌ๋  ๋•Œ ํ•œ๋ฒˆ์”ฉ ๋ฉ”์‹œ์ง€๋ฅผ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ธฐ ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ 100,000 ๊ฑด ์ด๋ฉฐ NOTIFY_MODULUS ๋ผ๋Š” ์˜ต์…˜ ๊ฐ’์ด ๊ทธ๋ ‡๊ฒŒ ์„ค์ • ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ ์ž…๋‹ˆ๋‹ค.
  • 197. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-etc SKIP : ๋ช‡ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ ์žฌ์ž‘์—…์„ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ธฐ์ˆ ํ•˜๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ 0์œผ๋กœ ๋ชจ ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•ฉ๋‹ˆ๋‹ค. START ROW ID : partial with insert ์ฒ˜๋Ÿผ ํŠน์ • ๋ช‡ ๊ฐœ ์ปฌ๋Ÿผ์˜ ์ ์žฌ ์ž‘์—…์„ ์ฒซ ๋ฒˆ์งธ ๋กœ์šฐ๋ถ€ ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ด LOAD ์ผ ๋ฟ ๊ธฐ๋ณธ ์›๋ฆฌ๋Š” INSERT์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. FILE FORMAT : BINARY์™€ ASCII๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜ ๋ก BINARY ํ˜•ํƒœ์˜ ํŒŒ์ผ์ด ๋น ๋ฅธ ์ ์žฌ ์„ฑ๋Šฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋˜ํ•œ BINARY ํŒŒ์ผ ํ˜•ํƒœ์˜ ๋ฐ์ด ํ„ฐ๋ฅผ ์ ์žฌ์‹œ ๊ฐ column-spec ๋’ค์— WITH NULL BYTE ๋ผ๋Š” ์˜ต์…˜์„ ์ฃผ์–ด NULL ๊ฐ’์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ : ๋ฉ”๋‰ด์–ผ์„ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • 198. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-mode SYBASE IQ์˜ ์ ์žฌ ์ž‘์—…์€ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” single thread ๋ชจ๋“œ์ด๊ณ  ๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” parallel thread ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ SYBASE IQ๋Š” ๊ฐ ์ปฌ๋Ÿผ๋‹น 1๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์™€ ๊ฐ ์ธ๋ฑ์Šค๋‹น 1๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” parallel thread ๋ชจ๋“œ์—์„œ ์ ์žฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ single thread ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ ‡๊ฒŒ ๋™์ž‘์‹œ์—๋Š” ์ ์žฌ ์ž‘์—…์˜ ์†๋„๊ฐ€ ๋งค์šฐ ๋–จ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” single thread ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•˜๋Š” ์›์ธ์„ ํŒŒ์•…ํ•˜์—ฌ ๊ทธ ์›์ธ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ •์ƒ์ ์ธ ์ž‘์—…์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ๊ฐ€ ์ ์žฌ ์ž‘์—…์„ single thread ๋ชจ๋“œ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ฒฝ์šฐ๋Š” ์“ฐ๋ ˆ๋“œ์˜ ๋ถ€ ์กฑ, partial with load ์ž‘์—…, ROW DELIMITED BY ์˜ต์…˜์˜ ์ƒ๋žต์ž…๋‹ˆ๋‹ค.
  • 199. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-tip ๋ฐ์ดํ„ฐ ์ ์žฌ ์ž‘์—… ์ „์— ํ…Œ์ด๋ธ”์— ํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์‹œ๊ณ  ํ•œ ํ…Œ์ด๋ธ”์— HG ์ธ๋ฑ ์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋‹ค๋ฉด ํŒŒํ‹ฐ์…˜์„ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”. ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ˆ˜์™€ ์ ์žฌ ๋Œ€์ƒ ํŒŒ์ผ์˜ ํ•„๋“œ ์ˆ˜๋ฅผ ์ผ์น˜ํ•˜์‹ญ์‹œ์˜ค. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋Œ€์ƒ ํŒŒ์ผ์˜ ํฌ๋งท์€ ์ˆ˜์น˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜๋ก BINARY ๋กœ ํ•˜์‹œ๊ณ  ASCII๋กœ ํ•˜์‹ค ๊ฒฝ์šฐ์—๋„ ๊ณ ์ •๊ธธ์ด ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋งŒ์•ฝ ๊ณ ์ •๊ธธ์ด ํ˜•ํƒœ๋งŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ณ ์ • ๊ธธ์ด์™€ ๋ณ€๋™ ๊ธธ์ด๋“ฑ์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ์ฐจ๋ผ๋ฆฌ ํ•„๋“œ์˜ ๋ถ„๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€๋™๊ธธ์ด ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ด ๋•Œ์— ๋งˆ์ง€๋ง‰ ํ•„ ๋“œ์—๋„ ์ปฌ๋Ÿผ ๋ถ„๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค. ๊ฐ ์ปฌ๋Ÿผ์˜ column-spec์— NULLS( ) ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ NULL ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ๊ธฐ์ˆ  ํ•˜์‹ญ์‹œ์˜ค. ์ผ์ข…์˜ ๋ฐ์ดํ„ฐ ํด๋ฆฐ์ง• ๋กœ์ง์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์žฌ์ค‘ ์ž˜๋ชป ๊ธฐ์ˆ ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ถ”ํ›„ ์ ๊ฒ€์„ ์œ„ํ•ด IGNORE CONSTRAINT ์˜ต์…˜๊ณผ MESSAGE LOG ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ ์žฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด message log ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ค์–ด๊ฐ€๊ณ  ์žˆ ๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์ฃผ์‹ญ์‹œ์˜ค. ์ ์žฌ ์ž‘์—…์€ ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ ์€ ์‹œ๊ฐ„์„ ๊ณ ๋ คํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์— ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ ์žฌ ํ›„์— ๊ฐ ์‚ฌ์šฉ์ž์˜ ์žฌ์ ‘์†์„ ์ง€์‹œํ•˜์‹ญ์‹œ์˜ค.
  • 200. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-message file 100,000 ๊ฑด๋‹น ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•˜๋ฉฐ notify option ์œผ๋กœ ์กฐ์ ˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค SALES_FACT ํ…Œ์ด๋ธ”์— 5,000,000๊ฑด์„ 103์ดˆ์— ์ ์žฌ/์™„๋ฃŒ ํ•˜์˜€๋‹ค๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค 18 ๊ฐœ ์ปฌ๋Ÿผ์˜ SALES_FACT ๋ผ๋Š” ํ…Œ์ด๋ธ”์— full width ์ ์žฌ๊ฐ€ ์‹œ์ž‘๋˜๋ฉฐ parallel thread mode๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์ฐธ๊ณ  105Byte)
  • 201. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-message file 18 ๊ฐœ ์ปฌ๋Ÿผ์˜ SALES_FACT ๋ผ๋Š” ํ…Œ์ด๋ธ”์— partial width ์ ์žฌ๊ฐ€ ์‹œ์ž‘๋˜๋ฉฐ single thread mode๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์ฐธ๊ณ  105Byte)
  • 202. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. load-big picture
  • 203. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. extract sam ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”๋กœ ์ ์žฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๋ฐ˜๋Œ€๋กœ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ sam ํŒŒ์ผ ํ˜•ํƒœ ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•˜๋ฉฐ UNLOAD, EXPORT๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ์˜ ์ด๋™ ๋ฐ ๋ฐฑ์—… ์šฉ๋„๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. SYBASE IQ์˜ EXTRACT ๋ฐฉ๋ฒ•์€ ๋ฌด์ฒ™ ๊ฐ„๋‹จํ•˜๋ฉฐ ๋งŽ์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์—ฌ ๋Ÿฌ ๊ฐ€์ง€ ์˜ต์…˜์„ ์„ ์ •ํ•œ ํ›„์— SELECT๋ฌธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋˜ ํ˜น์€ ํด๋ผ ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์ง€๋˜ SELECT๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์˜ต์…˜์—์„œ ์ •ํ•œ ํ˜•ํƒœ์™€ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  UNLOAD๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ถœ๋ ฅ์€ SYBASE IQ์˜ ์„œ๋ฒ„ ๋ชจ๋“ˆ์ด ์กด์žฌํ•˜๋Š” ๊ณณ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. SELECT๋ฌธ ๋’ค์— ์˜ต์…˜์„ ์ทจ์†Œ ์‹œํ‚ค๊ฑฐ๋‚˜ ์ž„์‹œ๋กœ ์˜ต์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ์งˆ์˜๋Š” ์„ ์–ธ๋œ ํŒŒ์ผ๋กœ ์ถœ๋ ฅ๋˜๋ฏ€๋กœ ํŠน๋ณ„ํ•œ ๋ชฉ์ ์ด ์—†๋‹ค๋ฉด temporary option ์‚ฌ์šฉํ•˜ ๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ๋˜๋Š” ํŒŒ์ผ์˜ ํ˜•ํƒœ๋Š” ASCII, BINARY, BINARY/SWAP๋กœ ์˜ต์…˜ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด ์žˆ๋Š” SELECT๋ฌธ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. syntax SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜โ€ฆ./โ€ฆ./โ€ฆ.โ€™; // EXTRACT ์„ค์ • SET TEMPORARY OPTION . . . . . . ; SET TEMPORARY OPTION . . . . . . ; select-statement; SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜โ€™; // EXTRACT ํ•ด์ œ
  • 204. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. extract-option Temp_Extract_NameN UNLOAD ํ•˜๋Š” ํŒŒ์ผ์— ๋Œ€ํ•œ ์ด๋ฆ„๊ณผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ N์€ 1,2,3,4,5,6,7,8์ด๋ฉฐ Temp_Extract_SizeN ์˜ต์…˜๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ํŒŒ์ผ์‹œ์Šคํ…œ์— ์ˆ˜์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฐ๊ณผ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋‚˜๋ˆ ์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋‚˜๋ˆ ์„œ ์ €์žฅํ•  ๋•Œ ์—๋„ ํŒŒ์ผ๋ณ„๋กœ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ง๋ ฌ๋กœ ์ง„ํ–‰๋จ์„ ์ƒ๊ธฐํ•˜๋ฉฐ ๋งŒ์•ฝ ๋ณ‘๋ ฌ๋กœ ๋ฐ์ด ํ„ฐ๋ฅผ UNLOAD ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด WHERE ์ ˆ์˜ ์กฐ๊ฑด์„ ๋ฐ”๊พผ ์งˆ์˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Temp_Extract_Name1์ด ์„ค์ •๋˜๋ฉด ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ LOAD, DELETE, INSERT ๋ช…๋ น ์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ ์„ค์ •๋œ ํŒŒ์ผ์ด๋ฆ„์„ ํ•ด์ œ ์‹œํ‚ฌ ๋•Œ๋Š” ์ด ์˜ต์…˜์˜ ๊ฐ’์„ โ€˜โ€™(empty string) ๋กœ ๋ฐ”๊พธ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํŒŒ์ผ์€ ์ผ๋ฐ˜ ์œ ๋‹‰์Šค ์ผ๋ฐ˜ ํŒŒ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ FIFO ํŒŒ์ผ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Temp_Extract_SizeN UNLOAD ํ•˜๋Š” ๋Œ€์ƒ ํŒŒ์ผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ KB ๋‹จ์œ„๋กœ ์ง€์ •ํ•˜๋ฉฐ ๊ทธ ํฌ๊ธฐ๋Š” AIX & HP-UX์ธ ๊ฒฝ์šฐ 64GB, Sun Solaris์ธ ๊ฒฝ์šฐ 512GB, Window์ธ ๊ฒฝ์šฐ 128GB ๊นŒ์ง€ ์ž…๋‹ˆ๋‹ค. Temp_Extract_Column_Delimiter ์ถœ๋ ฅ๋˜๋Š” ๊ฐ ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๊ตฌ๋ถ„์ž๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ๋””ํดํŠธ๋Š” ์ฝค๋งˆ(,) ์ž…๋‹ˆ๋‹ค Temp_Extract_ Row_Delimiter ์ถœ๋ ฅ๋˜๋Š” ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ตฌ๋ถ„์ž๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ๋””ํดํŠธ๋Š” carriage return(n) ์ž…๋‹ˆ๋‹ค
  • 205. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. extract-option Temp_Extract_ Binary ์„ค์ • ๊ฐ’์ด on์ผ ๊ฒฝ์šฐ ์ถœ๋ ฅ๋˜๋Š” ํŒŒ์ผ์˜ ํ˜•ํƒœ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Temp_Extract_ Swap ์„ค์ • ๊ฐ’์ด on์ผ ๊ฒฝ์šฐ ์ถœ๋ ฅ๋˜๋Š” ํŒŒ์ผ์˜ ํ˜•ํƒœ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ swap ํ˜•ํƒœ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์„  ํ–‰๋˜์–ด์•ผ ํ•  ์กฐ๊ฑด์œผ๋กœ Temp_Extract_Binary์ด on ์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Temp_Extract_ Null_As_Zero ASCII ํ˜•ํƒœ๋กœ UNLOADํ•  ๋•Œ NULL ๊ฐ’์— ๋Œ€ํ•œ ํ‘œํ˜„์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ on์œผ ๋กœ ์†”์ •๋˜๋ฉด NULL ๊ฐ’์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆซ์ž ํƒ€์ž…์€ 0์œผ๋กœ ๋ฌธ์ž ํƒ€์ž…์ด๋‚˜ ๋‚ ์งœ ๊ณ„์—ด์˜ ํƒ€ ์ž…์€ empty string (โ€˜โ€™)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ off์ผ ๊ฒฝ์šฐ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๊ด€๊ณ„์—†์ด string โ€˜NULLโ€™ ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ off ์ด๋ฉฐ ๋งŒ์•ฝ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  UNLOAD ํ•œ ํŒŒ์ผ์„ ๋‹ค์‹œ LOADํ•  ๋•Œ ์ฃผ์˜ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. Temp_Extract_Append ์„ค์ • ๊ฐ’์ด on์ผ ๊ฒฝ์šฐ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ์˜ ๋’ค์— ์ฒจ์‚ญํ•˜์—ฌ UNLOAD๊ฐ€ ๋˜๋ฉฐ ๋งŒ์•ฝ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒˆ๋กœ์šด ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด ์ง‘๋‹ˆ๋‹ค. Temp_Extract_Quote Temp_Extract_Quotes, Temp_Extract_Quotes_All๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ ์ด ๋‘๊ฐ€์ง€ ์˜ต์…˜์ค‘ ์— ํ•˜๋‚˜๋ผ๋„ on์œผ๋กœ ์„ค์ •๋˜๋ฉด ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ์–‘์ชฝ์„ ์—ฌ๊ธฐ์„œ ์„ค์ •ํ•œ ๊ธฐํ˜ธ๋กœ ๊ฐ์‹ธ์ค๋‹ˆ๋‹ค. ๋‹จ, UNLOAD ํŒŒ์ผ ํ˜•ํƒœ๊ฐ€ ASCII ์ผ ๊ฒฝ์šฐ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
  • 206. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. extract-option Temp_Extract_Quotes ์ด ์˜ต์…˜์ด on์œผ๋กœ ์„ค์ •๋œ๋‹ค๋ฉด UNLOAD ํ•  ๋•Œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ค‘ ๋ฌธ์ž๋‚˜ ๋‚ ์งœ ํ˜•ํƒœ์˜ ๋ฐ์ด ํ„ฐ๋ฅผ ๊ฐ ํ•„๋“œ์˜ ์‹œ์ž‘๊ณผ ๋ ์–‘์ชฝ์— Temp_Extract_Quote์—์„œ ์„ค์ •ํ•œ ๊ธฐํ˜ธ๋กœ ๊ฐ์‹ธ์ค๋‹ˆ๋‹ค. Temp_Extract_Quote ์˜ต์…˜์„ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด โ€˜ ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Temp_Extract_Quote_All ์ด ์˜ต์…˜์ด on์œผ๋กœ ์„ค์ •๋œ๋‹ค๋ฉด UNLOAD ํ•  ๋•Œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ค‘ ๋ฌธ์ž๋‚˜ ๋‚ ์งœ ํ˜•ํƒœ์˜ ๋ฐ์ด ํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ ํ•„๋“œ์˜ ์‹œ์ž‘๊ณผ ๋ ์–‘์ชฝ์— Temp_Extract_Quote์—์„œ ์„ค ์ •ํ•œ ๊ธฐํ˜ธ๋กœ ๊ฐ์‹ธ์ค๋‹ˆ๋‹ค. Temp_Extract_Quote ์˜ต์…˜์„ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด โ€˜ ๊ฐ€ ์‚ฌ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • 207. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. extract-example ์˜ˆ) SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜/data/orders1.datโ€™; SET TEMPORARY OPTION Temp_Extract_Name2 = โ€˜/data/orders2.datโ€™; SET TEMPORARY OPTION Temp_Extract_Name3 = โ€˜โ€™; // ์ค‘์š” SET TEMPORARY OPTION Temp_Extract_Size1 = โ€˜1024000โ€™; SET TEMPORARY OPTION Temp_Extract_Size2 = โ€˜1024000โ€™; SET TEMPORARY OPTION Temp_Extract_Delimiter = โ€˜|โ€™ ; SET TEMPORARY OPTION Temp_Extract_Row_Delimiter = โ€˜nโ€™ ; SET TEMPORARY OPTION Temp_Extract_Null_As_Zero = โ€˜onโ€™ ; SELECT * FROM orders ; SET TEMPORARY OPTION Temp_Extract_Name1 = โ€˜โ€™; // extract disable orders ํ…Œ์ด๋ธ”์„ 1,024,000KB ํฌ๊ธฐ์˜ ๋‘๊ฐœ์˜ ํŒŒ์ผ์— ๋‚˜๋ˆ„์–ด์„œ UNLOAD ํ•˜๋Š”๋ฐ ํŒŒ์ผ์€ | ๋กœ ํ•„๋“œ ๋ถ„๋ฆฌ ๋˜์—ˆ์œผ๋ฉฐ ๋ ˆ์ฝ”๋“œ ๋ถ„๋ฆฌ์ž๋Š” n ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์ค‘ ์ˆซ์ž ์ปฌ๋Ÿผ์˜ NULL ๊ฐ’์€ 0์œผ๋กœ, ๋ฌธ์ž/๋‚ ์งœ ์ปฌ๋Ÿผ์˜ NULL ๊ฐ’์€ โ€˜โ€™(empty string) ์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ๋งŒ์•ฝ TEMPORARYTEMPORARY ์˜ต์…˜์ด์˜ต์…˜์ด ์ƒ๋žต๋˜์—ˆ๋‹ค๋ฉด์ƒ๋žต๋˜์—ˆ๋‹ค๋ฉด ์–ด๋–ค์–ด๋–ค ์ผ์ด์ผ์ด ์ผ์–ด๋‚ ๊นŒ์š”์ผ์–ด๋‚ ๊นŒ์š”??
  • 208. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Transaction, Versioning and Etc.
  • 209. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. transaction ๋‹จ์ผ ์‚ฌ๊ฑด์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐœ์ƒ๋˜์–ด์ง„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๊ฒŒ ๋ฐ˜ ์˜์‹œ์ผœ์ค๋‹ˆ๋‹ค. ์˜ค์ง COMMIT ๋˜๊ฑฐ๋‚˜ ROLLBACK ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. autocommit mode (unchained mode) ๊ฐœ๋ณ„์ ์ธ INSERT, UPDATE, DELETE, SELECT๋ฅผ ๊ฐœ๋ณ„ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๊ฐœ์˜ statement๋ฅผ ํ•œ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์œผ๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ BEGIN TRAN๊ณผ COMMIT(ํ˜น์€ ROLLBACK)์œผ๋กœ ํŠธ๋žœ์žญ์…˜์˜ ์ฒ˜์Œ๊ณผ ๋์„ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ASE์™€ isql์˜ ๊ธฐ๋ณธ์ ์ธ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋“œ ์ž…๋‹ˆ๋‹ค. manual commit mode (chained mode) ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ ํ˜น์€ ๋˜ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋จ๊ณผ ๋™์‹œ์— BEGIN TRAN์ด ์•”์‹œ์ ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์˜ COMMIT์„ ํ†ตํ•ด ์ข…๋ฃŒ๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ANSI ํ‘œ์ค€, SYBASE IQ, ASA, dbisql์˜ ๋””ํดํŠธ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋“œ ์ž…๋‹ˆ๋‹ค. Chained ๋ผ๋Š” ์˜ต์…˜์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜ ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค SET [TEMPORARY] OPTION Chained = โ€˜offโ€™; // unchained mode SET [TEMPORARY] OPTION Chained = โ€˜onโ€™; // chained mode
  • 210. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. transaction command BEGIN TRANSACTION : unchained mode์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ์ •์˜ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. BEGIN TRAN[SACTION] [transaction-name]; COMMIT : ํŠธ๋žœ์žญ์…˜์˜ ์ข…๋ฃŒ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ทจ์†Œ ์—†์ด ์˜์›ํžˆ ๋ฐ˜ ์˜ํ•ฉ๋‹ˆ๋‹ค COMMIT [WORK]; ROLLBACK : ํŠธ๋žœ์žญ์…˜์˜ ์ข…๋ฃŒ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ ์ด์ „์˜ ๋ฐœ์ƒ๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค ROLLBACK [WORK]; SAVEPOINT : ํ˜„์žฌ์˜ ํŠธ๋žœ์žญ์…˜์— breakpoint๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค SAVEPOINT [savepoint-name]; ROLLBACK TO SAVEPOINT : SAVEPOINT ์ดํ›„์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ROLLBACK TO SAVEPOINT [savepoint-name]; CHECKPOINT : ๋ฉ”๋ชจ๋ฆฌ๋‚ด์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋””์Šคํฌ์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. CHECKPOINT;
  • 211. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ด€๋œ option Auto_Commit : Interactive SQL ํ˜น์€ dbisql๊ณผ ๊ฐ™์€ SYBASE IQ์˜ ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ์— ์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ๋ชจ๋“  ๋ช…๋ น ์‹คํ–‰ ํ›„์— ๋ฌต์‹œ์ ์œผ๋กœ COMMIT์˜ ์‹คํ–‰์—ฌ๋ถ€๋ฅผ ์กฐ์ ˆํ•ฉ ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ off๋กœ ์ž๋™์œผ๋กœ COMMIT์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ, on์œผ๋กœ ์„ค์ •ํ•  ๋•Œ compound statement, batch ๋’ค์—์„œ COMMIT ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. SET [TEMPORARY] OPTION Auto_Commit = โ€˜offโ€™; Chained : chained ๋ชจ๋“œ์™€ unchained ๋ชจ๋“œ์˜ ๋ณ€๊ฒฝ์„ ์กฐ์ ˆํ•˜๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ on, ์ฆ‰chained ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ๊ฐ ํด๋ผ์ด์–ธํŠธ ํˆด์—์„œ์˜ ์ง€์›์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€ํ•˜์‹ญ์‹œ์˜ค. SET [TEMPORARY] OPTION Chained = โ€˜onโ€™; Commit_On_Exit : Interactive SQL, dbisql๊ณผ ๊ฐ™์€ SYBASE IQ์˜ ๊ธฐ๋ณธ ํด๋ผ์ด์–ธํŠธ ์— ์„œ๋งŒ ๋™์ž‘ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ํˆด ์ข…๋ฃŒ์‹œ COMMIT์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ on, ์ฆ‰ ํˆด ์ข…๋ฃŒ์‹œ ์ž๋™์œผ๋กœ COMMIT์„ ์‹คํ•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํด๋ผ์ด์–ธํŠธ ํˆด์—์„œ์˜ ์ง€์› ์—ฌ๋ถ€๋ฅผ ์ ๊ฒ€ํ•˜ ์‹ญ์‹œ์˜ค. SET [TEMPORARY] OPTION Commit_on_exit = โ€˜onโ€™; AutoPreCommit : ์ด ์˜ต์…˜์€ ๋‹ค๋ฅธ ์˜ต์…˜๊ณผ ๋‹ฌ๋ฆฌ odbc ํ™˜๊ฒฝ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” connection level ์˜ต์…˜์ด๋ฉฐ ๋ชจ๋“  ๋ช…๋ น์–ด์ „์— COMMIT์˜ ์‹คํ–‰์—ฌ๋ถ€๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ’์€ off ์ฆ‰ ์ž ๋™์œผ๋กœ COMMITํ•˜์ง€ ์•Š์œผ๋ฉฐ Interactive SQL, dbisql๊ณผ ๊ฐ™์€ SYBASE IQ์˜ ๊ธฐ๋ณธ ํด๋ผ์ด ์–ธํŠธ์—์„œ๋Š” ๋น„๋ก odbc ํ™˜๊ฒฝํ•˜์—์„œ ๋™์ž‘ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 212. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. transaction์˜ ์ดํ•ด O update test set a = 1 rollback; onon, off X update test set a = 1; rollback; offon, off 2 statement per 1 batch 1 statement per 1 batch compound statement ๋น„๊ณ  X update test set a = 1 rollback; offon, off O X X O Rollback update test set a = 1; rollback; onoff update test set a = 1; rollback; onon BEGIN update test set a = 1; rollback; END; offon, off BEGIN update test set a = 1; rollback; END; onon, off ๋‚ด์šฉChainedAuto_Commit Auto_Commit์ด ์‹คํ–‰๋˜๋Š” ์‹œ์ 
  • 213. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. snapshot versioning SYBASE IQ์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ table-level versioning์ด ๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ANSI isolation level 3์„ ์ง€์›ํ•˜๋ฉฐ ์ฝ๊ณ  ์žˆ๋Š” ๋™์•ˆ์—๋„ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠน ์ •ํ•œ ์‹œ์ ์— ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์“ธ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋Š” SYBASE IQ์— ์˜ํ•ด ์ž๋™์œผ๋กœ 1๋ช… ์œผ๋กœ ์ œํ•œ๋˜๋ฉฐ ์กฐ์ ˆ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ํ…Œ์ด๋ธ”์ด ์ˆ˜์ •๋˜์–ด์ง€๋ฉด ๊ทธ ํŽ˜์ด์ง€๋“ค์˜ ์ด์ „ ๋ฐ์ดํ„ฐ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋‚จ๊ฒจ๋‘๊ณ  ์ƒˆ๋กœ์šด ํŽ˜ ์ด์ง€์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋“ค์ด ์“ฐ์—ฌ์ง€๋ฉฐ ๊ฐ ํŽ˜์ด์ง€ ํ—ค๋”์—๋Š” blockmap ์ด๋ผ๋Š” ๋ฒ„์ „์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด์ „ ํŽ˜์ด์ง€์˜ blockmap์—๋Š” ์ด์ „๋ฒ„์ „์ด ์ƒˆ ๋กœ์šด ํŽ˜์ด์ง€์˜ blockmap์—๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „๋“ค์€ ๋” ์ด์ƒ ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ๋˜๋ฉฐ ์ด๋Ÿฐ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ RDBMS์—์„œ์˜ log์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋ฒ„์ „์˜ ํ…Œ์ด๋ธ” ๋‚ด์šฉ์„ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ๋จผ์ € COMMIT์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์งˆ์˜๋ฅผ ํ•˜ ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ SYBASE IQ์˜ COMMIT์—๋Š” ๋‘ ๊ฐ€์ง€์˜ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 214. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. versioning example t1 ์‹œ์ ์— User1, User2๋Š” customer,order, product ํ…Œ์ด๋ธ”๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ ๋‹ค.
  • 215. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. versioning example t2 ์‹œ์ ์— write user๊ฐ€ ๋“ค์–ด์™€์„œ customer ํ…Œ์ด๋ธ”์„ ์ˆ˜์ •ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ™์€ ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์•„์ง๋„ ์—ฌ์ „ํžˆ customer,order,product ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • 216. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. versioning example t3 ์‹œ์ ์— write user์˜ customer ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ˆ˜์ •์ด COMMIT ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์‹œ๊ฐ„ ์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์•„์ง๋„ ์—ฌ์ „ํžˆ customer,order,product ํ…Œ์ด๋ธ”์˜ ์›๋ž˜ ๋ฒ„์ „์„ ์กฐํšŒ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • 217. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. versioning example t4 ์‹œ์ ์— User 3์ด login ํ•ด์„œ customer ํ…Œ์ด๋ธ”์˜ ์ƒˆ ๋ฒ„์ „๊ณผ order, product์˜ ์›๋ž˜ ๋ฒ„ ์ „์„ ์กฐํšŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์€ ์•„์ง๋„ ์—ฌ์ „ํžˆ customer, order, product ํ…Œ์ด๋ธ”์˜ ์›๋ž˜ ๋ฒ„์ „์„ ์กฐํšŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • 218. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. versioning example t5 ์‹œ์ ์— User 1, User 2๊ฐ€ COMMIT์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์žฌ์ ‘์† ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ customer ํ…Œ์ด๋ธ”๊ณผ ์›๋ž˜๋ฒ„์ „์˜ order, product ํ…Œ์ด๋ธ”์„ ์ฝ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์— customer์˜ ์›๋ž˜๋ฒ„์ „์€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
  • 219. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ ์žฌ์—ฐ Interactive SQL๋ฅผ ์ด์šฉํ•˜์—ฌ A,B ๋‘ ๊ฐœ์˜ ์„ธ์…˜์„ ๋™์‹œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค A ์„ธ์…˜์—์„œ ๊ธฐ์กด ํ…Œ์ด๋ธ” sample์— ์ปฌ๋Ÿผ์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค B ์„ธ์…˜์—์„œ A์„ธ์…˜์—์„œ ๋งŒ๋“  sample ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค ๋‘ ์„ธ์…˜ ๋ชจ๋‘ Auto_Commit ์˜ต์…˜์ด off๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ์ด ๋ฌธ์ œ๋Š” SYBASE IQ์˜ versioning๊ณผ ๊ด€๋ จํ•œ ๋ฌธ์ œ๋กœ B ์„ธ์…˜์˜ ์—ฐ๊ฒฐ์‹œ์ ์— ํ˜น์€ ๋งˆ์ง€๋ง‰ COMMIT๋ฅผ ์‹คํ–‰ํ•œ ํ›„์— sample์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์— B ์„ธ์…˜์—์„œ COMMIT์„ ์‹คํ–‰ํ•˜๋ฉด B ์„ธ์…˜์—์„œ๋„ sample ์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 220. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ ์žฌ์—ฐ Interactive SQL๋ฅผ ์ด์šฉํ•˜์—ฌ A,B ๋‘ ๊ฐœ์˜ ์„ธ์…˜์„ ๋™์‹œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค A ์„ธ์…˜์—์„œ sample ํ…Œ์ด๋ธ”์„ SELECT ํ•˜๊ณ  ๊ทธ๋ƒฅ ๊ทธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค B ์„ธ์…˜์—์„œ sample ํ…Œ์ด๋ธ”์„ DROP ํ•˜๊ฑฐ๋‚˜ ALTER ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์„ธ์…˜ ๋ชจ๋‘ Auto_Commit ์˜ต์…˜์ด off๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ด๊ฒƒ์€ SYBASE IQ์˜ locking ๋ฉ”์นด๋‹ˆ์ฆ˜๊ณผ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. A ์„ธ์…˜์—์„œ sample ํ…Œ์ด ๋ธ”์„ SELECT ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์—์„œ SYBASE IQ๋Š” sample ํ…Œ์ด๋ธ”์— lock์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ ๋‹ค. ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด COMMIT์„ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.COMMIT์„ ์‹คํ–‰ํ•˜์˜€๋”๋ผ๋„ ํ˜„์žฌ SELECT ๊ฒฐ๊ณผ์˜ ์ปค์„œ๊ฐ€ ์—ด๋ ค ์žˆ๊ธฐ ๋•Œ๋ฌธ์— RESUME ์ด๋ž€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ด ๋˜ํ•œ ๋‹ซ์•„ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • 221. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์‹œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ ์žฌ์—ฐ Interactive SQL๋ฅผ ์ด์šฉํ•˜์—ฌ A,B ๋‘ ๊ฐœ์˜ ์„ธ์…˜์„ ๋™์‹œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค A ์„ธ์…˜์—์„œ sample ํ…Œ์ด๋ธ”์„ SELECTํ•˜๊ณ  COMMIT๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. B ์„ธ์…˜์—์„œ sample ํ…Œ์ด๋ธ”์„ DROP ํ•˜๊ฑฐ๋‚˜ ALTER ํ•ฉ๋‹ˆ๋‹ค ๋‘ ์„ธ์…˜ ๋ชจ๋‘ Auto_Commit ์˜ต์…˜์ด off๋กœ ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ด๊ฒƒ์€ SYBASE IQ ํด๋ผ์ด์–ธํŠธ ํˆด์˜ ์ปค์„œ ๋ฐฉ์‹ ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋ฒ• ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์œผ๋กœ A์„ธ์…˜์—์„œ SELECTํ•œ ํ›„์— COMMIT์„ ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธด sample ํ…Œ์ด๋ธ”์— lock ํ˜„์ƒ์€ ์ข… ๋ฃŒ๊ฐ€ ๋˜๋‚˜ sample ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ point๋ฅผ ๊ณ„์†ํ•ด์„œ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ปค์„œ๊ฐ€ ์—ด๋ ค์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ปค์„œ๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” A ์„ธ์…˜์—์„œ RESUME ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ SELECT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.ํ˜น์€ A ์„ธ์…˜์„ ์ข…๋ฃŒํ•œ ํ›„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • 222. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. Transaction Tip READ ์‚ฌ์šฉ์ž์™€ WRITE ์‚ฌ์šฉ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ณ  WRITE ์ž‘์—…์€ ๊ฐ€๋Šฅํ•˜๋ฉด READ ์‚ฌ ์šฉ์ž๊ฐ€ ์—†๋Š” ์‹œ๊ฐ„์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. READ ์‚ฌ์šฉ์ž๋Š” READ ๋ช…๋ น ์ „ํ›„์— COMMIT ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. dbisqlc์„ ์‚ฌ์šฉํ•˜๋Š” READ ์‚ฌ์šฉ์ž๋Š” Auto_Commit=โ€˜Onโ€™ ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค OLAP Tool์„ ํฌํ•จํ•œ ODBC ํ™˜๊ฒฝ์—์„œ๋Š” AutoPreCommit=โ€˜Yโ€™๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ฐ ์งˆ์˜ ๋’ค์— OLAP Tool ์˜ ํ›„์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ COMMIT์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (๋‹จ, dbisqlc ๋Š” ์œ„ ์กฐ๊ฑด์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค) ๊ทธ ์™ธ isql๊ณผ ๊ฐ™์€ OCDK ํ™˜๊ฒฝ์˜ READ ์‚ฌ์šฉ์ž๋Š” ๋””ํดํŠธ ์ƒํƒœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด versioning๊ณผ transaction์œผ๋กœ ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•˜๋Š” ๊ฐœ๋ฐœ ๋ถ€์ž‘์šฉ์„ ์ตœ์†Œํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • 223. ์ด ๋ฌธ์„œ๋ฅผ ์ƒ์—…์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์œ ์šฉํ•œ system SP sp_iqconnection sp_iqstatus sp_iqtransaction sp_iqview sp_iqspaceused sp_iqlocks sp_iqcontext sp_iqtable sp_iqtablesize sp_iqcolumn sp_iqindex sp_iqindexsize sp_helptext
  • 224. BI. Anytime. AnywhereBI. Anytime. Anywhere YBASE ยฎ www.www.sybasesybase.co..co.krkr 0202--34513451--52005200