¸ñÂ÷ (Ŭ¸¯½Ã ÇØ´ç³»¿ëÀ¸·Î À̵¿, À§·Î À̵¿ È­»ìÇ¥ Ŭ¸¯, ¸ñÂ÷³» °Ë»öÀº »ó´Ü ¹Ú½ºÀÌ¿ë)

1. sqlplus »ç¿ëÀÚ/°ü¸®ÀÚ ¼³Á¤

-- sys °èÁ¤ Á¢¼Ó
-- scott lock ¼³Á¤
-- scott lock ÇØÁ¦
-- sys °èÁ¤À¸·Î scott ¾ÏÈ£ º¯°æ
-- sys ¾ÏÈ£ º¯°æ
-- ¿À¶óŬ ¼­¹ö shutdown
-- ¿À¶óŬ ¼­¹ö startup
-- »ç¿ëÀÚ È®ÀÎ(sys °èÁ¤)
-- »ç¿ëÀÚ Ãß°¡
-- »ç¿ëÀÚ Á¦°Å
-- conn, Å×ÀÌºí ½ºÆäÀ̽º ±ÇÇÑ ¼³Á¤(sys °èÁ¤)
-- ÈÞÁöÅë ºñ¿ì±â
-- Å×À̺í Ä÷³ È®ÀÎ
-- Å×ÀÌºí ¸ñ·Ï È®ÀÎ
-- Å×ÀÌºí ±¸Á¶ È®ÀÎ

2. ±âº» Äõ¸® ÇÔ¼ö

-- isql*plus ½ÇÇà(»ç¿ëÀÚ)
-- em ½ÇÇà(°ü¸®ÀÚ)
-- tnsnames.ora ¿¡ Á¤ÀÇµÈ connect_identifier À¸·Î Á¢¼Ó
-- sql ¿¡¼­ cmd âÀ¸·Î Àá½Ã ºüÁ® ³ª°¡¾ß ÇÏ´Â °æ¿ì
-- sqlplus ¿¡¼­ *.sql ÆÄÀÏ ½ÇÇà
-- °æ·Î ÁöÁ¤ ½ÇÇà
-- sqlplus ¿¡¼­ sql ÀÛ¾÷ ³»¿ë ÀÚµ¿ ÀúÀå
-- »ê¼ú¿¬»êÀÚ
-- ºñ±³¿¬»êÀÚ
-- ³í¸® ¿¬»êÀÚ
-- sql ¿¬»êÀÚ
-- ¹®ÀÚ¿­ ¿¬°á ¿¬»êÀÚ : ||
-- ÀÚ·á °Ë»ö
-- ±â¼ú ¼ø¼­
-- Àüü ÀÚ·á Ãâ·Â
-- À̸§, ÀüÈ­¹øÈ£, ºÎ¼­ Ãâ·Â

-- Çʵå¸í º¯°æ
-- ¿¬»ê
-- Á¶°Ç °Ë»ö
-- dual
-- ½ºÄ®¶ó ÇÔ¼ö
-- substr
-- length
-- lengthb
-- instr
-- lpad / rpad
-- replace
-- trim / ltrim / rtrim
-- mod
-- round
-- trunc1
-- ¾Ï½ÃÀû Çü º¯È¯
-- ³¯Â¥Çü½Ä º¯°æ
-- to_number
-- to_date
-- »ì¾Æ¿Â³¯ ±¸Çϱâ
-- ±Ù¹«³â¼ö °è»êÇϱâ
-- sysdate
-- current_date
-- add_months
-- last_day(d)
-- ³ªÀÌ ±¸Çϱâ
-- trunc2
-- next_day
-- ½Ã½ºÅÛ ³¯Â¥ ±âÁØ °¡±î¿î ³¯Â¥
-- ´Ù°¡¿À´Â ÀÏ¿äÀÏ, Åä¿äÀÏ
-- ³¯Â¥¿¡ »ê¼ú ¿¬»ê
-- null
-- null °ü·Ã ÇÔ¼ö
-- order by
-- distinct
-- in
-- between ~ and
-- like
-- decode
-- case ~ end
-- ÁýÇÕ¿¬»êÀÚ
-- ÇÕÁýÇÕ ¿¬»êÀÚ
-- Â÷ÁýÇÕ ¿¬»êÀÚ
-- ±³ÁýÇÕ ¿¬»êÀÚ

3. ±×·ìÇÔ¼ö

-- Áý°èÇÔ¼ö
-- count
-- sum, avg, max, min
-- group by
-- having
-- rollup
-- cube
-- grouping ÇÔ¼ö
-- grouping sets ÇÔ¼ö
-- rownum
-- ºÐ¼®ÇÔ¼ö
-- rank() over() ÇÔ¼ö
-- dense_rank() over() ÇÔ¼ö
-- row_number() over() ÇÔ¼ö
-- count() over() ÇÔ¼ö
-- sum() over() ÇÔ¼ö
-- avg() over() ÇÔ¼ö
-- first_value() over() ÇÔ¼ö
-- first ¿Í last

4. Å×À̺íÀÛ¼º/¼öÁ¤/»èÁ¦

-- Ä÷³¸í¸¸ È®ÀÎ
-- Ä÷³¸í ¹× ÀÚ·áÇüµî Ãâ·Â
-- Á¦¾àÁ¶°Ç È®ÀÎ
-- »ç¿ëÀÚ¿¡°Ô ÁÖ¾îÁø ±ÇÇÑ È®ÀÎ
-- ÀÚ·áÇü
-- ¹®ÀÚµ¥ÀÌÅÍ Å¸ÀÔ varchar2 ¿Ü
-- ¼ýÀÚµ¥ÀÌÅÍ Å¸ÀÔ number
-- ³¯Â¥µ¥ÀÌÅÍ Å¸ÀÔ date
-- Å×À̺í ÀÛ¼º
-- Å×ÀÌºí ¸ñ·Ï È®ÀÎ
-- Å×ÀÌºí ±¸Á¶ È®ÀÎ
-- Å×ÀÌºí¿¡ Çʵå Ãß°¡
-- Å×À̺íÀÇ Ä÷³Æø ¹× ÀÚ·áÇü º¯°æ
-- Å×À̺íÀÇ Çʵå¸í º¯°æ
-- Å×À̺íÀÇ ÇÊµå »èÁ¦
-- Å×À̺í¸í º¯°æ
-- ±âÁ¸ Å×À̺íÀ» ÀÌ¿ëÇÏ¿© Å×À̺í ÀÛ¼º
-- Å×ÀÌºí ±¸Á¶¸¸ º¹»ç(Á¦¾àÁ¶°ÇÀº º¹»ç µÇÁö ¾Ê´Â´Ù)
-- Å×ÀÌºí »èÁ¦
-- ÈÞÁöÅë
-- ÈÞÁöÅë È®ÀÎ
-- ÈÞÁöÅë Å×ÀÌºí ³»¿ë È®ÀÎ(ÈÞÁöÅë Á¤º¸ È®ÀÎ ÈÄ object_name ¸íÀ¸·Î È®ÀÎ)
-- ÈÞÁöÅë º¹¿ø(insa1 Àº »èÁ¦Çϱâ ÀüÀÇ ¿ø·¡ Å×À̺í¸í)
-- ÈÞÁöÅë º¹¿ø(bin À̸§(object_name)À¸·Î µÇµ¹¸®±â)
-- ÈÞÁöÅë ºñ¿ì±â
-- ÈÞÁöÅë¿¡ ¹ö¸®Áö ¾Ê°í ¹Ù·Î Å×ÀÌºí »èÁ¦

5. ÀÚ·á Ãß°¡/¼öÁ¤/»èÁ¦

-- Å×ÀÌºí¿¡ µ¥ÀÌÅÍ Ãß°¡
-- ±¸Á¶¸¸º¹»ç(Á¦¾à Á¶°ÇÀº º¹»ç µÇÁö ¾ÊÀ½)
-- Á¦¾àÁ¶°Ç È®ÀÎ
-- ¿©·¯Çà Ãß°¡(±âÁ¸ Å×À̺íÀÇ ÀڷḦ Ãß°¡)
-- ÇϳªÀÇ insert¹®À» ÀÌ¿ë ¿©·¯ Å×ÀÌºí¿¡ µ¥ÀÌÅÍ Ãß°¡
-- Á¶°Ç¿¡ ¸¸Á·ÇÏ´Â ÀڷḸ ¿©·¯ Å×ÀÌºí¿¡ Ãß°¡
-- ¼öÁ¤ : update
-- ÀÚ·á »èÁ¦
-- ¸ðµç ÀÚ·á »èÁ¦(Å×ÀÌºí ±¸Á¶´Â Áö¿öÁöÁö ¾Ê´Â´Ù.)
-- Á¶°Ç¿¡ ¸¸Á·ÇÏ´Â µ¥ÀÌÅÍ »èÁ¦
-- ¸ðµç ÀÚ·á »èÁ¦(delete º¸´Ù ºü¸§)
-- score Å×À̺íÀÇ ¿©ÀÚ¸¸ »èÁ¦
-- merge(º´ÇÕ)

6. Á¦¾àÁ¶°Ç

-- Á¦¾àÁ¶°Ç È®ÀÎ
-- °³Ã¼ ¹«°á¼º(primary key, unique)
-- ÂüÁ¶ ¹«°á¼º(foreign key)
-- Ä÷³ ·¹º§ ±âº»Å° ÁöÁ¤
-- Á¦¾à Á¶°Ç À̸§ ºÎ¿©
-- ±âº»Å° »èÁ¦
-- ÀÌ¹Ì Á¸ÀçÇÏ´Â Å×ÀÌºí¿¡ ±âº»Å° Ãß°¡
-- unique
-- Ä÷³ ·¹º§
-- Å×ÀÌºí ·¹º§
-- Á¸ÀçÇÏ´Â Çʵ忡 check Á¦¾à Ãß°¡
-- not null Ãß°¡
-- Á¸ÀçÇÏ´Â Å×ÀÌºí¿¡ not null Ãß°¡
-- default(ÃʱⰪ) : insert, update
-- default Á¦°Å
-- Á¦¾àÁ¶°Ç Á¦°Å
-- ±âº»Å° Á¦°Å
-- not null Á¦°Å
-- ±âŸ Á¦¾àÁ¶°Ç Á¦°Å
-- ÂüÁ¶(¿Ü·¡, foreign)Å°
-- ÂüÁ¶Å° »èÁ¦
-- Á¸ÀçÇÏ´Â Å×ÀÌºí¿¡ ÂüÁ¶Å° Ãß°¡
-- Á¦¾à Á¶°Ç È°¼ºÈ­/ºñÈ°¼ºÈ­
-- ±âº»Å° ºñÈ°¼ºÈ­
-- name¿¡ not null Á¦¾à¼³Á¤
-- not null ºñÈ°¼ºÈ­
-- ±âº»Å°È°¼ºÈ­

7. Á¶ÀÎ

-- equi Á¶ÀÎ
-- outer join(¿ÜºÎ Á¶ÀÎ)
-- left outer join
-- right outer join
-- full outer join(left¿Í right outer join °áÇÕÇüÅÂ)
-- non-equi Á¶ÀÎ
-- cross join
-- self join

8. ¼­ºêÄõ¸®

-- ¼­ºêÄõ¸®(subquery)
-- ¼­Á¡ÄÚµå ¼­Á¡¸í ÆǸűݾ×ÇÕ ºñÀ²
-- 1. ³âµµº° ÆǸÅÇöȲ Ãâ·Â
-- 2. ³âµµº° ¼­Á¡ ÆǸÅÇöȲ Ãâ·Â
-- 3. ³âµµº° ¼­Á¡ ÆǸÅÇöȲÀÌ °¡Àå ¸¹Àº ÀÚ·á Ãâ·Â
-- with
-- ÆÇ¸ÅµÈ Ã¥ÄÚµå, Ã¥À̸§
-- ÆǸŵÇÁö ¾ÊÀº Ã¥ÄÚµå, Ã¥À̸§
-- exists : Çϳª¶óµµ Á¸ÀçÇϸé Âü
-- »ó°ü ÇÏÀ§ ºÎÁúÀÇ
-- ¼­Á¡º°·Î 1ȸ ÁÖ¹® ¼ö·®ÀÌ °¡Àå ¸¹Àº Ã¥(¼­Á¡¸í, Ã¥À̸§, ¼ö·®)
-- ±âº»±ÞÀ» ±âÁØÀ¸·Î ¼øÀ§ ºÎ¿©

9. ºä ½ÃÄö½º

-- ºä¶õ?
-- »ç¿ëÀÚ ±ÇÇÑ ¼³Á¤
-- ºä ÀÛ¼º
-- ºä ¼öÁ¤
-- ºä »èÁ¦
-- ºä ÀÚ·á ÀÔ·Â/¼öÁ¤/»èÁ¦
-- with check option
-- ¸ÓÆ®¸®¾ó¶óÀÌÁî ºä(Materialized view)
-- »ç¿ëÀÚ¿¡°Ô Äõ¸® ÀçÀÛ¼º/Materialized view ±ÇÇѼ³Á¤ ÈÄ ½ÇÇà
-- ½ÃÄö½º(Sequence)
-- »ç¿ëÀÚ¿¡°Ô ½ÃÄö½º ±ÇÇѼ³Á¤
-- 100ºÎÅÍ 1¾¿ Áõ°¡ÇÏ´Â ½ÃÄö½º
-- 3ºÎÅÍ 999±îÁö 3¾¿ Áõ°¡ÇÏ´Â ½ÃÄö½º
-- ÃÖ´ë°ª µµ´Þ½Ã ´Ù½Ã ½ÃÀÛ
-- 1ºÎÅÍ Áõ°¡ÇÏ´Â °¡Àå °£´ÜÇÑ ½ÃÄö½º
-- ½ÃÄö½º ¸ñ·Ï È®ÀÎ
-- ½ÃÄö½º È°¿ë (Å×À̺í ÀÚ·á ÀÔ·Â)
-- ½ÃÄö½º »èÁ¦

10. °èÃþÀû ÁúÀÇ

-- °èÃþÀû ÁúÀÇ
-- start with
-- connect by
-- prior ¿¬»êÀÚ
-- whereÀý
-- levelÀý
-- ¿¹Á¦

11. Æ®·£Àè¼Ç

-- Æ®·£Àè¼Ç
-- set transaction
-- set autocommit
-- lock

12. PL/SQL

-- PL/SQLÀ̶õ?
-- ´ëÀÔ¹® Çü½Ä
-- %type
-- %rowtype
-- »ç¿ëÀÚ Á¤ÀÇ ±¸Á¶Ã¼ º¯¼ö
-- if¹® È°¿ë¿¹Á¦
-- while Á¶°Ç loop ~ end loop
-- exit
-- loop ~ end loop
-- for ~ loop¹® È°¿ë¿¹Á¦

13-1. ÇÁ·Î½ÃÁ®

-- ÇÁ·Î½ÃÁ®
-- »ç¿ëÀÚ¿¡°Ô ÇÁ·Î½ÃÁ® ±ÇÇѼ³Á¤
-- Çü½Ä
-- in / out
-- ½ÃÄö½º ÀÛ¼º
-- Å×À̺í ÀÛ¼º
-- Å×ÀÌºí¿¡ µ¥ÀÌÅÍ Ãß°¡ÇÏ´Â ÇÁ·Î½ÃÀú ÀÛ¼º
-- ÇÁ·Î½ÃÁ® ¼Ò½º È®ÀÎ
-- ÇÁ·Î½ÃÀú ¸ñ·Ï È®ÀÎ
-- ÇÁ·Î½ÃÀú ½ÇÇà
-- ÇÁ·Î½ÃÀú ¼öÁ¤
-- Å×ÀÌºí¿¡ Çʵå Ãß°¡
-- ÀԷ½à Á¶°Ç¿¡ µû¶ó °ª ´ëÀÔ ¿¹Á¦
-- ÀÚ·á ¼öÁ¤ ÇÁ·Î½ÃÁ® ÀÛ¼º
-- »èÁ¦ ÇÁ·Î½ÃÁ® ÀÛ¼º
-- Ãâ·Â¿ë view ÀÛ¼º
-- Ãß°¡ ÇÁ·Î½ÃÁ® / Å×½ºÆ® / ¿À·ù
-- ¼öÁ¤ ÇÁ·Î½ÃÁ®1 / Å×½ºÆ®
-- ¼öÁ¤ ÇÁ·Î½ÃÁ®2
-- »èÁ¦ ÇÁ·Î½ÃÁ®



13-2. ÇÁ·Î½ÃÁ® ¹®Á¦

-- µÎ°³ÀÇ Å×À̺íÀÛ¼º / ºä ÀÛ¼º
-- µÎ°³ÀÇ Å×ÀÌºí¿¡ µ¥ÀÌÅÍ Ãß°¡ÇÏ´Â ÇÁ·Î½ÃÁ® ÀÛ¼º
-- µÎ°³ÀÇ Å×ÀÌºí¿¡ µ¥ÀÌÅÍ »èÁ¦ÇÏ´Â ÇÁ·Î½ÃÁ® ÀÛ¼º
-- µÎ°³ÀÇ Å×ÀÌºí¿¡ µ¥ÀÌÅÍ ¼öÁ¤ÇÏ´Â ÇÁ·Î½ÃÁ® ÀÛ¼º

14. »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö

-- Stored Function(»ç¿ëÀÚ ÇÔ¼ö)
-- Çü½Ä
-- ÇÔ¼ö ¸ñ·Ï È®ÀÎ
-- ÇÕÀ» ±¸ÇÏ´Â ÇÔ¼ö ¸¸µé±â
-- fnPow(10, 2) : 10ÀÇ 2½Â
-- ÁֹιøÈ£·Î ¼ºº° / »ýÀÏ / ³ªÀÌ °è»ê

15. Ä¿¼­¿Í µ¿Àû SQL

-- Ä¿¼­(Cursor)
-- ¾Ï½ÃÀû Ä¿¼­
-- ¾Ï½ÃÀû Ä¿¼­ÀÇ ¼Ó¼º
-- ¸í½ÃÀû Ä¿¼­
-- ÀÛ¾÷¼ø¼­
-- Ä¿¼­¼±¾ð
-- Ä¿¼­ open
-- fetch
-- Ä¿¼­ close
-- for¹®¿¡¼­ÀÇ Ä¿¼­ »ç¿ë
-- Çü½Ä
-- where current of
-- Á¶°Ç ¸¸Á· µ¥ÀÌÅÍ °¡Á®¿À±â
-- Ä¿¼­³»ÀÇ For : ÀÚµ¿ open, ÀÚµ¿ close
-- ÆĶó¹ÌÅÍ°¡ ÀÖ´Â Ä¿¼­
-- sys refcursor, ·¹ÆÛ·±½º Ä¿¼­(reference cursor)
-- Å×À̺íÀÛ¼º
-- ÇÁ·Î½ÃÁ®1
-- ÇÁ·Î½ÃÁ®2 / ½ÇÇà
-- µ¿ÀûSQL / ÁÖÀÇ
-- µ¿Àû Å×ÀÌºí »ý¼º / µ¿Àû Äõ¸® ½ÇÇà
-- ¿¹Á¦: Å×À̺í ÀÛ¼º, ÀÚ·áÀÔ·Â/Ãâ·Â/¼öÁ¤/»èÁ¦

16-1. Æ®¸®°Å

-- Æ®¸®°Å(Trigger)
-- ¹®ÀåÆ®¸®°Å
-- ÇàÆ®¸®°Å
-- Çü½Ä
-- À̺¥Æ®
-- Æ®¸®°Å»óÅ ȮÀÎ
-- Æ®¸®°Å »èÁ¦
-- Æ®¸®°Å ±ÇÇÑ ºÎ¿©
-- ¹®ÀåÆ®¸®°Å ¿¹Á¦ : Å×ÀÌºí¿¡ Ãß°¡/¼öÁ¤/»èÁ¦ µÇ¸é ´Ù¸¥ Å×ÀÌºí¿¡ ½Ã°£°ú »óÅ ÀúÀå
-- Å×À̺íÀÇ ÇÁ·Î½ÃÀú, ÇÔ¼ö, ÆÐÅ°Áö µî »óÈ£ ÂüÁ¶°ü°è È®ÀÎ
-- before Æ®¸®°Å
-- raise_application_error
-- ÇàÆ®¸®°Å ¿¹Á¦
-- ÇàÆ®¸®°Å(after) : Ãß°¡
-- ÇàÆ®¸®°Å(before) : »èÁ¦
-- ÇàÆ®¸®°Å(after) : ¼öÁ¤

16-2. Æ®¸®°Å ½Ç½À

-- »óÇ°Å×À̺í ÀÛ¼º
-- ÀÔ°íÅ×À̺í ÀÛ¼º
-- ÆǸÅÅ×À̺í ÀÛ¼º
-- »óÇ°Å×ÀÌºí¿¡ ÀÚ·áÃß°¡
-- Æ®¸®°Å ÀÛ¼º
-- ÀÔ°íÅ×ÀÌºí¿¡ insert Æ®¸®°Å ÀÛ¼º
-- ÀÔ°íÅ×ÀÌºí¿¡ update Æ®¸®°Å ÀÛ¼º
-- ÀÔ°íÅ×ÀÌºí¿¡ delete Æ®¸®°Å ÀÛ¼º
-- ÆǸÅÅ×ÀÌºí¿¡ insert Æ®¸®°Å ÀÛ¼º
-- ÆǸÅÅ×ÀÌºí¿¡ update Æ®¸®°Å ÀÛ¼º
-- ÆǸÅÅ×ÀÌºí¿¡ delete Æ®¸®°Å ÀÛ¼º

17. ¿¹¿Üó¸®

-- ¿¹¿Ü ó¸®
-- ¿¹¿Ü Æ®·¦
-- ¿¹¿Ü Àü´Þ
-- ¿¹¿Ü °ËÃâ
-- ¿¹¿Ü À¯Çü
-- ¿¹¿Ü Á¤ÀÇ
-- Á¤ÀÇµÈ ¿À¶óŬ ¼­¹ö ¿¡·¯
-- »ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü
-- ¿¹¿Ü Æ®·¡ÇÎ ÇÔ¼ö
-- raise_application_error

18. ÆÐÅ°Áö

-- ÆÐÅ°Áö
-- ÆÐÅ°Áö ÀÛ¼º¹æ¹ý
-- ÆÐÅ°Áö ¸í¼¼
-- ÆÐÅ°Áö ¸öü ±¸Çö
-- ¿À¹ö·Îµù

19. Å×ÀÌºí½ºÆäÀ̽º

-- Å×ÀÌºí ½ºÆäÀ̽º
-- ½Ã½ºÅÛ Å×ÀÌºí ½ºÆäÀ̽º Á¾·ù
-- Âü°í(block, extent, segment, Å×ÀÌºí½ºÆäÀ̽º)
-- sys °èÁ¤
-- µ¥ÀÌÅÍ»çÀü dba_tablespaces / dba_data_files
-- Å×ÀÌºí ½ºÆäÀ̽º °ø°£ È®ÀÎ
-- Å×ÀÌºí ½ºÆäÀ̽º »ý¼º
-- ºÎ¿©µÈ Å×ÀÌºí ½ºÆäÀ̽º ¿ë·® È®ÀÎ(»ç¿ëÀÚ)
-- Å×ÀÌºí ½ºÆäÀ̽º ¿ë·® º¯°æ(°ü¸®ÀÚ)
-- Å×ÀÌºí ½ºÆäÀ̽º »èÁ¦
-- Å×ÀÌºí ½ºÆäÀ̽º ÀÚµ¿ È®Àå

20. »ç¿ëÀÚ °ü¸®

-- ÁÖ¿ä ÀÚ·á»çÀü(data dictionary)
-- »ç¿ëÀÚ ¸ñ·Ï È®ÀÎ
-- ½Ã½ºÅÛ ±ÇÇÑ È®ÀÎ
-- ·Ñ È®ÀÎ
-- ·Ñ¿¡ ºÎ¿©µÈ ½Ã½ºÅÛ ±ÇÇÑ È®ÀÎ
-- ·Ñ¿¡ Á¸ÀçÇÏ´Â ·Ñ È®ÀÎ
-- ·ÑÀÌ °¡Áö°í ÀÖ´Â °´Ã¼±ÇÇÑ(insert, select µî) È®ÀÎ
-- Å×ÀÌºí½ºÆäÀ̽º ÇÒ´ç·® È®ÀÎ
-- »ç¿ëÀÚ ½Ã½ºÅÛ ±ÇÇÑ È®ÀÎ
-- »ç¿ëÀÚ¿¡°Ô ºÎ¿©µÈ ·Ñ È®ÀÎ
-- °¡Áö°í ÀÖ´Â °´Ã¼ ±ÇÇÑ È®ÀÎ
-- ´Ù¸¥ »ç¿ëÀڷκÎÅÍ ¹ÞÀº °´Ã¼ ±ÇÇÑ È®ÀÎ
-- Å×À̺í Ä÷³ È®ÀÎ
-- Á¦¾àÁ¶°Ç È®ÀÎ
-- ÇöÀç »ç¿ëÀÚÀÇ column¿¡ ÇÒ´çµÈ Á¦¾àÁ¶°Ç Á¤º¸
-- procedure, function ¸ñ·Ï È®ÀÎ
-- Å×À̺íÀÇ procedure, ÇÔ¼ö, ÆÐÅ°Áö µî »óÈ£ ÂüÁ¶ °ü°è È®ÀÎ
-- Æ®¸®°Å È®ÀÎ
-- ÇÁ·Î½ÃÀú, ÇÔ¼ö µîÀÇ ¼Ò½º È®ÀÎ
-- ºä ¸ñ·Ï, ¼Ò½º È®ÀÎ
-- ½ÃÄö½º ¸ñ·Ï È®ÀÎ
-- »ç¿ëÀÚ È®ÀÎ, ¶ô ¼³Á¤/ÇØÁ¦
-- »ç¿ëÀÚ Ãß°¡
-- »ç¿ëÀÚ »èÁ¦
-- Å×ÀÌºí½ºÆäÀ̽º »ç¿ë ±ÇÇÑ°ú ÇÔ²² »ç¿ëÀÚ Ãß°¡
-- sys °èÁ¤ ¾ÏÈ£ °ü¸®
-- sysÀÇ »ç¿ëÀÚ ¾ÏÈ£ º¯°æ
-- »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ ¾ÏÈ£ º¯°æ
-- sys°¡ »ç¿ëÀÚÀÇ ¾ÏÈ£ ¸¸·á
-- ½Ã½ºÅÛ ±ÇÇÑ
-- »ç¿ëÀÚ°¡ ½Ã½ºÅÛ ±ÇÇÑ È®ÀÎ
-- dbÁ¢±Ù ±ÇÇÑ ºÎ¿©
-- ±ÇÇÑ È¸¼ö
-- »ç¿ëÀÚ Á¦°Å
-- °´Ã¼±ÇÇÑ È®ÀÎ
-- »ç¿ëÀÚ ÀÚ½ÅÀÌ °¡Áö°í ÀÖ´Â °´Ã¼±ÇÇÑ È®ÀÎ
-- ´Ù¸¥ »ç¿ëÀڷκÎÅÍ ¹ÞÀº °´Ã¼±ÇÇÑ È®ÀÎ
-- ·Ñ(Role) À̶õ?
-- ·Ñ »ý¼º °úÁ¤
-- ·Ñ »ý¼º
-- ·Ñ¿¡ °´Ã¼ ±ÇÇÑ ºÎ¿©
-- °´Ã¼ ±ÇÇÑ È®ÀÎ
-- ·Ñ º¯°æ: ·Ñ ¾ÏÈ£Á¦°Å/»ç¿ëÀÚ¿¡°Ô ·ÑºÎ¿©/»ç¿ëÀÚ¿¡°Ô ·ÑÀû¿ë
-- ·Ñ ±ÇÇÑ È®ÀÎ (½Ã½ºÅÛ)
-- ·Ñ ȸ¼ö
-- public ·Ñ

21. µ¥ÀÌÅ͸µÅ©

-- µ¥ÀÌÅÍ ¸µÅ© ±ÇÇÑ ¼³Á¤
-- tnsnames.ora ¿¡ Á¤ÀÇµÈ connect_identifier À¸·Î Á¢¼Ó

22. ¾Ïȣȭ ¹× º¹È£È­

-- ¾Ïȣȭ ¹× º¹È£È­ : 4°³ÀÇ ÇÁ·Î½ÃÁ® ±¸¼º
-- sys °èÁ¤: ¸ðµç »ç¿ëÀÚ¿¡°Ô dmbs_obfuscation_toolkit ÆÐÅ°ÁöÀÇ ÇÁ·Î½ÃÁ® ±ÇÇÑ ºÎ¿©
-- »ç¿ëÀÚ °èÁ¤: ÆÐÅ°Áö ¼±¾ð, ÆÐÅ°Áö ¸öü, Å×½ºÆ®

23. SYS_RefCursor

-- Sys RefCursor ¿¹Á¦
-- Å×À̺íÀÇ ÀڷḦ Ãâ·ÂÇÏ´Â ÇÁ·Î½ÃÁ®(Sys_RefCursorÀÌ¿ë)

24. À妽º

-- À妽º¶õ?
-- Ư¡
-- »ý¼º
-- Á¾·ù
-- Logical À妽º
-- Physical À妽º
-- Index »ý¼º¿¡ À¯ÀÇÇÒÁ¡
-- Index¸¦ »ý¼ºÇÒ ¼ö ¾ø´Â °æ¿ì
-- IndexÀÇ Çü½Ä
-- Index Á¤º¸ Á¶È¸
-- Index »ý¼º
-- ¼º´ÉÇâ»óÀ» À§ÇÑ Á¶È¸½Ã°£ Ç¥½Ã
-- B-Tree À妽º
-- À妽º »èÁ¦
-- Bitmap À妽º
-- Function based Index(ÇÔ¼ö ±â¹Ý À妽º)
-- À妽º Àç»ý¼º



1. sqlplus »ç¿ëÀÚ/°ü¸®ÀÚ ¼³Á¤

-- sys °èÁ¤ Á¢¼Ó
cmd>sqlplus sys/¾ÏÈ£ as sysdba;
sql>select * from all_users; -- Àüü »ç¿ëÀÚ È®ÀÎ

-- scott lock ¼³Á¤
sql>alter user scott account lock;

-- scott °èÁ¤
sql>conn scott/java301$; -- ¿¡·¯ : lock °É¸²

-- soctt lock ÇØÁ¦
sql>alter user scott account unlock;

-- sys °èÁ¤À¸·Î scott ¾ÏÈ£ º¯°æ
sql>alter user scott identified by ¾ÏÈ£;

-- sys ¾ÏÈ£ º¯°æ
cmd>sqlplus / as sysdba;
sql>alter user sys identified by ¾ÏÈ£;
sql>conn sys/¾ÏÈ£ as sysdba;

-- ¿À¶óŬ ¼­¹ö shutdown
sql>conn sys/¾ÏÈ£ as sysdba;
sql>shutdown immediate;

-- sys °èÁ¤À¸·Î connect ÇßÀ»¶§ ´ÙÀ½°ú °°Àº ¸Þ½ÃÁö°¡ Ãâ·Â µÈ °æ¿ì
-- ÈÞÁö ÀνºÅϽº¿¡ Á¢¼ÓµÇ¾ú½À´Ï´Ù.
-- µ¥ÀÌÅͺ£À̽º°¡ close µÈ »óÅÂÀ̹ǷΠsys °èÁ¤¿¡¼­ startup

-- ¿À¶óŬ ¼­¹ö startup
cmd>sqlplus /nolog;
sql>conn sys/¾ÏÈ£ as sysdba;
sql>startup;

-- »ç¿ëÀÚ È®ÀÎ(sys °èÁ¤)
select username, password, created from dba_users;
select username, password, created from dba_users
where username='scott'; --scott °èÁ¤¸¸ È®ÀÎ

-- »ç¿ëÀÚ Ãß°¡
create user »ç¿ëÀÚ¸í identified by ºñ¹Ð¹øÈ£;

-- »ç¿ëÀÚ Á¦°Å
drop user »ç¿ëÀÚ¸í cascade;

-- conn, Å×ÀÌºí ½ºÆäÀ̽º ±ÇÇÑ ¼³Á¤(sys °èÁ¤)
grant connect, resource to »ç¿ëÀÚ¸í;

-- ÈÞÁöÅë ºñ¿ì±â
purge recyclebin;

-- Å×À̺í Ä÷³ È®ÀÎ
select * from user_tab_columns where table_name='Å×À̺í¸í';
select * from all_tab_columns where owner ='µðºñ°èÁ¤' and table_name = 'Å×À̺í¸í';

-- Å×ÀÌºí ¸ñ·Ï È®ÀÎ
sql>select * from tab;

-- Å×ÀÌºí ±¸Á¶ È®ÀÎ
sql>desc insa;

 

 

2. ±âº» Äõ¸® ÇÔ¼ö

-- isql*plus ½ÇÇà(»ç¿ëÀÚ)
http://ÄÄÇ»Å͸í:5560/isqlplus/

-- em ½ÇÇà(°ü¸®ÀÚ)
http://ÄÄÇ»Å͸í:1158/em/

-- tnsnames.ora ¿¡ Á¤ÀÇµÈ connect_identifier À¸·Î Á¢¼Ó
cmd>sqlplus scott/tiger@ora111
-- ora111 : tnsnames.ora ¿¡ Á¤ÀÇµÈ connect_identifier

-- sql ¿¡¼­ cmd âÀ¸·Î Àá½Ã ºüÁ® ³ª°¡¾ß ÇÏ´Â °æ¿ì
sql>host
cmd>exit -- º¹±Í

-- sqlplus ¿¡¼­ *.sql ÆÄÀÏ ½ÇÇà
-- ÆÄÀÏÀÌ Á¸ÀçÇÏ´Â °æ·Î¿¡¼­ sqlplus¸¦ ½ÇÇàÇÏ°í,
-- "@ÆÄÀϸí" ¸í·ÉÀ» ½ÇÇà
sql>@ex.sql

-- °æ·Î ÁöÁ¤ ½ÇÇà
sql>@d:\sql\ex.sql

-- sqlplus ¿¡¼­ sql ÀÛ¾÷ ³»¿ë ÀÚµ¿ ÀúÀå
sql>spool d:\sql\test.txt
sql>select * from insa; -- d:\sql\test.txt ÆÄÀÏ »ý¼º
sql>spool off -- ½ºÇ® Á¤Áö

-- »ê¼ú¿¬»êÀÚ
+ : µ¡¼À - : »¬¼À * : °ö¼À / : ³ª´°¼À ( ) : °ýÈ£

-- ºñ±³¿¬»êÀÚ
= : °°´Ù. > : Å©´Ù. >= : Å©°Å³ª °°´Ù.
< : Àû´Ù. <= : À۰ųª °°´Ù. <> : °°Áö ¾Ê´Ù. != : °°Áö ¾Ê´Ù.

-- ³í¸® ¿¬»êÀÚ
and : ³í¸® °ö or : ³í¸® ÇÕ not : ºÎÁ¤

-- sql ¿¬»êÀÚ
in(°ª, °ª, ...) : ÇÇ¿¬»êÀÚ°¡ ½Ä ¸ñ·Ï Áß Çϳª¿Í µ¿ÀÏÇÑ °æ¿ì true ¡æ OR
between ~ and: ÇÇ¿¬»êÀÚ°¡ ¹üÀ§ ¾È¿¡ ÀÖ´Â °æ¿ì true
like : ÇÇ¿¬»êÀÚ°¡ ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â °æ¿ì true

-- ¹®ÀÚ¿­ ¿¬°á ¿¬»êÀÚ : ||
select name || ' ´Ô' as À̸§, city Ãâ½Åµµ from insa;

-- ÀÚ·á °Ë»ö
-- Çü½Ä : select Çʵå¸í, Çʵå¸í ..... from Å×À̺í

-- ±â¼ú ¼ø¼­
from -> whereÁ¶°Ç -> group by -> select -> order by

-- Àüü ÀÚ·á Ãâ·Â
sql>select * from insa;

-- À̸§, ÀüÈ­¹øÈ£, ºÎ¼­ Ãâ·Â
select name, tel, buseo from insa;

-- Çʵå¸í º¯°æ : Çʵå¸í as º°Äª / Çʵå¸í as "º° Ī" / Çʵå¸í º°Äª...
select name as À̸§, tel as "ÀüÈ­¹øÈ£", buseo ºÎ¼­ from insa;

-- ¿¬»ê : À̸§°ú ±âº»±ÞÀ» 10,000À¸·Î ³ª´« °ª Ãâ·Â
select name, basicpay/10000 ±âº»±Þ from insa;

-- Á¶°Ç °Ë»ö : Ãâ½Åµµ ¼­¿ïÀÎ »ç¶÷ Ãâ·Â(À̸§, Ãâ½Åµµ)
select name, city from insa where city='¼­¿ï';

-- Á¶°Ç °Ë»ö : Ãâ½Åµµ ¼­¿ï, ±âº»±Þ 200¸¸¿ø ÀÌ»ó Ãâ·Â(À̸§, Ãâ½Åµµ, ±âº»±Þ)
select name, city, basicpay from insa
where city='¼­¿ï' and basicpay>=2000000;

-- ±âº»±Þ+¼ö´çÀÌ 200¸¸¿ø ÀÌ»óÀÌ°í ¼­¿ï»ç¶÷(À̸§, ±âº»±Þ+¼ö´ç Ãâ½Åµµ)
select name as À̸§, basicpay+sudang as "±Þ¿©",city as Ãâ½Åµµ from insa
where basicpay+sudang>=2000000 and city='¼­¿ï';

-- dual
-- dual Å×À̺íÀº µ¥ÀÌÅÍ µñ¼Å³Ê¸®¿Í ÇÔ²² oracle¿¡ ÀÇÇØ ÀÚµ¿À¸·Î »ý¼ºµÇ´Â
-- Å×À̺í·Î »ç¿ëÀÚ sysÀÇ ½ºÅ°¸¶¿¡ Á¸ÀçÇϸç, ¸ðµç »ç¿ëÀÚ°¡ »ç¿ë °¡´ÉÇÏ´Ù.
select sysdate from dual; -- ½Ã½ºÅÛ³» ÇöÀç ³¯Â¥ Ç¥½Ã

-- ½ºÄ®¶ó ÇÔ¼ö : ´ÜÀϵ¥ÀÌÅ͸¦ ¹Ýȯ
-- substr (char, m [,n]) : ¹®ÀÚ¿­ ÃßÃâ
select substr('seoul korea', 7, 3) from dual; -- 'kor' ¡æ ¾Õ±âÁØ, 7¹ø°ºÎÅÍ 3¹ø À̵¿ÇÑ °ª Ãâ·Â
select substr('seoul korea', -5, 3) from dual; -- 'kor' ¡æ µÚ±âÁØ, 5¹ø°ºÎÅÍ 3¹ø À̵¿ÇÑ °ª Ãâ·Â
select substr('seoul korea', 7) from dual; -- 'korea' ¡æ ¾Õ±âÁØ, 7¹ø°ºÎÅÍ ¸ðµÎ Ãâ·Â

-- Ãâ½Åµµ ¼­¿ïÀÌ°í ÁֹιøÈ£ 8¹ø°ÀÇ Ã¹¹ø° ¼ýÀÚ°¡ 1 ¶Ç´Â 3ÀÎ »ç¶÷ Ãâ·Â(À̸§, ÁֹιøÈ£, Ãâ½Åµµ)
select name, ssn, city from insa
where city='¼­¿ï' and
(substr(ssn, 8, 1)='1' or substr(ssn, 8, 1)='3');

-- À§¿Í °°À¸³ª in ¿¬»êÀÚ¸¦ ÀÌ¿ëÇÏ¿© °£°áÇÏ°Ô
select name, ssn, city from insa
where city='¼­¿ï' and
(substr(ssn, 8, 1) in ('1', '3'));

-- »ý³â¿ùÀÏÀÌ 78~82³â»ý¸¸ Ãâ·Â(À̸§, ÁֹιøÈ£)
select name, ssn from insa
where substr(ssn, 1, 2) >= 78 and substr(ssn, 1, 2) <= 82;
-- ÁֹιøÈ£ 1¹ø°ºÎÅÍ 2¹ø°ÀÇ °ªÀÌ 78º¸´Ù Å©°Å³ª °°°í 82º¸´Ù À۰ųª °°Àº Á¶°Ç

-- ¼­¿ï»ç¶÷À̸鼭 ±è¾¾¸¸ Ãâ·Â(À̸§, Ãâ½Åµµ)
select name, city from insa where city='¼­¿ï' and substr(name, 1, 1)='±è';
-- À̸§ÀÇ Ã¹¹ø° °ªÀÌ '±è' °ú °°Àº Á¶°Ç

-- length (column | expression) : ¹®ÀÚ¿­ ±æÀÌ
select length('´ëÇѹα¹') from dual; -- 4

-- lengthb (column | expression) : ¹®ÀÚ¿­ ¹ÙÀÌÆ®¼ö
select lengthb('´ëÇѹα¹') from dual; -- 8

-- instr (column | expression, 'string' [,m] [,n])
-- ¹®ÀÚÀÇ À§Ä¡ ¹Ýȯ. m°ªÀº ½ÃÀÛÀ§Ä¡, n°ªÀº ¹ß»ý Ƚ¼öÀ̸ç m°ú nÀÇ ±âº» °ªÀº 1
select instr('korea','e') from dual; -- 4

-- lpad (column | expression, n, ['string']), rpad (column | expression, n, ['string'])
-- expressionÀÇ ¹®ÀÚ¿­À» Á¦¿ÜÇÑ °ø°£¿¡ ¹®ÀÚ¿­À» ¿ÞÂÊ(¿À¸¥ÂÊ)¿¡ ä¿î´Ù.
select lpad ('korea', 12, '*') from dual; -- '*******korea'
select lpad('*', 0, '*') from dual; -- null

-- replace (text, search_string [, replacement_string]) : ¹®ÀÚ¿­ ġȯ
select replace('seoul korea', 'seoul', 'busan') from dual;
select name, replace(buseo, 'ºÎ', 'ÆÀ') as "ºÎ¼­" from insa;

-- rtrim(char [,set]), ltrim(char [,set])
trim (leading | trailing | both trim_character from trim_source)
°ø¹éÀ» Á¦°ÅÇϰųª ¿À¸¥ÂÊ(¿ÞÂÊ)ÀÇ ¹®ÀÚ¿­À» 'set'¹®ÀÚ¿­¿¡ Æ÷ÇÔµÈ ¹®ÀÚ¸¦ »èÁ¦, ¾ø´Â ¹®ÀÚ¸¦ ¸¸³ª¸é Á¤Áö

select rtrim('¿ì¸®³ª¶ó ') from dual;
select rtrim('¿ì¸®³ª¶ó´ëÇÑ', '´ëÇÑ') from dual; -- ¿À¸¥ÂÊÀÇ '´ëÇÑ' Àý»è
select trim(' ¿ì¸® ') from dual;
select name, rtrim(buseo, 'ºÎ') || 'ÆÀ' as "ºÎ¼­" from insa;
select ltrim('aabbbbcdad', 'ba') from dual; -- °á°ú : cdad(baÁß Çѹ®ÀÚ¶óµµ Ã¹ºÎºÐ¿¡ Æ÷ÇԵǾî ÀÖÀ¸¸é Á¦°Å)

-- mod(m, n) : mÀ» nÀ¸·Î ³ª´« ³ª¸ÓÁö
select mod(11, 4) "³ª¸ÓÁö" from dual;

-- round(n [,m]) : ¹Ý¿Ã¸² ¡æ ¹ÌÀԷ½à ±âº»°ªÀº 0À̸ç 1Àº ¼Ò¼öÁ¡ µÑ°°¡ ¹Ý¿Ã¸²µÇ¾î ù°ÀÚ¸®°¡ Ç¥½ÃµÇ°í -´Â ¹Ý´ë
select round(15.193, 1) "¹Ý¿Ã¸²" from dual; -- 15.2
select round(15.193) from dual; -- 15
select round(15.193, 0) from dual; -- 15
select round(15.193, -1) from dual; -- 20
select trunc(15.79, -1) "Àý»è" from dual; -- 10

-- trunc(n [,m]) : Àý»è ¡æ round¿Í Çü½ÄÀº °°´Ù.
select trunc(15.79, 1) "truncate" from dual; -- 15.7
select trunc(15.79, -1) "truncate" from dual; -- 10

select name, trunc(basicpay/10000) ¸¸¿ø±Ç from insa;

-- ±âº»±Þ 10¸¸¿ø´ç * Ãâ·Â
select name, basicpay,
lpad('*', trunc(basicpay/100000), '*') ±×·¡ÇÁ from insa;
-- trunc(basicpay/100000) °á°ú°¡ 1º¸´Ù ÀûÀ¸¸é null Ãâ·Â

-- ¾Ï½ÃÀû Çü º¯È¯
°ªÀ» ÇÒ´çÇÒ ¶§ ¿À¶óŬ ¼­¹ö´Â ´ÙÀ½°ú °°ÀÌ ÀÚµ¿À¸·Î °ªÀ» º¯È¯ÇÒ ¼ö ÀÖ´Ù.

varchar2, char ¡æ number
varchar2, char ¡æ date
number ¡æ varchar2
date ¡æ varchar2

-- to_char(label [, fmt]) : mlslabel datatypeÀ» varchar2 ŸÀÔÀ¸·Î º¯È¯
-- to_char(n [, fmt [, 'nlsparams'] ]) : ¼ýÀÚ¸¦ ¹®ÀÚ·Î º¯È¯(varchar2 ŸÀÔ)
-- to_char(d [, fmt [, 'nlsparams'] ]) : ³¯Â¥¸¦ ¹®ÀÚ·Î º¯È¯(varchar2 ŸÀÔ)

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') now from dual;
select sysdate, to_char(sysdate, 'yyyy-mm-dd day') from dual;
select sysdate, to_char(sysdate, 'yyyy"³â" mm"¿ù" dd"ÀÏ"') from dual;
select sysdate, to_char(sysdate, 'dd "of" month') from dual; -- 07/04/05 05 of april
select to_char(-1234, '99999mi') from dual; -- 1234-
select to_char(-1234, '9999pr') from dual; -- <1234>
select to_char(1234.345, '9.999eeee') from dual; -- 1.234e+03
select to_char(1234, '999999v9999') from dual; -- 12340000
select to_char(1234, 'l9,999,999') from dual; -- £Ü1,234

select name, basicpay+sudang ±Þ¿© from insa;
select name, to_char(basicpay+sudang, 'L9,999,999') ±Þ¿© from insa; -- L : ÅëÈ­±âÈ£
select name, to_char(ibsadate, 'yyyy"³â" mm"¿ù" dd"ÀÏ" day') ÀÔ»çÀÏ from insa;
select name, ibsadate from insa where to_char(ibsadate,'yyyy') = '2000'; -- ÀԻ糯¥ÀÇ Çü½ÄÀ» yyyy·Î ¹Ù²ã 2000°ú °°Àº °ª Ãâ·Â

-- ³¯Â¥Çü½Ä º¯°æ(±âº»:rr/mm/dd)
alter session set nls_date_format='yyyy-mm-dd';

-- rr : 1900³â´ëÀÇ ³âµµ¸¦ ±âÁØÀ¸·Î ÇÏ¿© ÀÌÀü 50³âµµ¿¡¼­ ÀÌÈÄ 49³â±îÁö´Â ±âÁس⵵¿Í
-- °¡±î¿î 1850³âµµ¿¡¼­ 1949³âµµ±îÁöÀÇ °ªÀ¸·Î Ç¥ÇöÇÏ°í, ÀÌ ¹üÀ§¸¦ ¹þ¾Æ ³¯ °æ¿ì ´Ù½Ã
-- 2000³âÀ» ±âÁØÀ¸·Î ÀÌÀü 50³âµµ¿¡¼­ ÀÌÈÄ 49³â±îÁöÀÇ °ªÀ» Ãâ·ÂÇÑ´Ù. ÇÏÁö¸¸ yy´Â
-- ¹«Á¶°Ç system »óÀÇ ³âµµ¸¦ µû¸¥´Ù.

-- to_number(char [,fmt [, 'nlsparams'] ]) : ¹®ÀÚ¸¦ ¼ýÀÚ·Î º¯È¯ (±×´Ú Àß »ç¿ëµÉÀÏ ¾øÀ½)

-- to_date(char [, fmt [, 'nlsparams'] ]) : ¹®ÀÚ¸¦ ³¯Â¥·Î º¯È¯ (±×´Ú Àß »ç¿ëµÉÀÏ ¾øÀ½)

-- »ì¾Æ¿Â ³¯ ¼ö ±¸Çϱâ
select trunc(sysdate - to_date('2000/10/10', 'yyyy/mm/dd')) "»ì¾Æ¿Â³¯¼ö" from dual;

-- ±Ù¹«³â¼ö °è»êÇϱâ : trunc
select name, trunc((sysdate-ibsadate)/365) ±Ù¹«³â¼ö from insa;

-- ¿ùÀ» Çѱ¹ ¶Ç´Â ¿µ¾î±Ç ½ºÅ¸ÀÏ·Î Ãâ·Â
select to_char(sysdate, 'mon dd day', 'nls_date_language = american') as en,
to_char(sysdate, 'mon dd day', 'nls_date_language = korean') as ko from dual;

-- sysdate : ½Ã½ºÅÛ¿¡ ÀúÀåµÈ ÇöÀç ³¯Â¥¸¦ ¹Ýȯ
select sysdate from dual; -- 07/04/05
select name, trunc(sysdate-ibsadate) ±Ù¹«Àϼö from insa;

-- current_date : ÇöÀç sessionÀÇ ³¯Â¥ Á¤º¸¸¦ ¹Ýȯ
select current_date from dual; -- 07/04/05

-- add_months(d, n) : ÇØ´ç ³¯Â¥¿¡ n¸¸Å­ÀÇ ´Þ¼ö¸¦ ´õÇÑ´Ù.
select current_date "today", add_months(current_date,1) "next month" from dual;

-- last_day(d) : Á¤ÀÇµÈ ³¯Â¥ÀÇ ´Þ¿¡¼­ ¸¶Áö¸·ÀÏÀÌ ¸îÀÏÀÎÁö µ¹·ÁÁØ´Ù.
select sysdate, last_day(sysdate) "last day", last_day(sysdate) - sysdate "days left" from dual;

-- ÀÔ»ç¿ùÀÇ ¸¶Áö¸· ³¯Â¥´Â ??(30, 31, 29, 28 µî)
select name, ibsadate, last_day(ibsadate) from insa;

-- months_between(d1, d2) : Á¤ÀÇµÈ µÎ ³¯Â¥»çÀÌÀÇ Â÷ÀÌ(d1 - d2)¸¦ ¿ù·Î µ¹·ÁÁØ´Ù.
select months_between(to_date('2007-05-20', 'yyyy-mm-dd'),
to_date('2007-04-10', 'yyyy-mm-dd')) from dual; -- 1.32258065

-- ±Ù¹«³â¼ö °è»êÇϱâ : trunc, months_between
select name, ibsadate, trunc(months_between(sysdate, ibsadate)/12) ±Ù¹«³â¼ö from insa;

-- ÇöÀç ³¯Â¥¿¡¼­ ÁֹιøÈ£»óÀÇ ³¯Â¥ÀÇ Â÷·Î ³ªÀÌ ±¸Çϱâ(1900³â´ë »ýÀ̶ó´Â ÀüÁ¦ÇÏ¿¡)
select ssn, trunc(months_between(sysdate, to_date('19'||substr(ssn,1,6), 'yyyymmdd'))/12)
³ªÀÌ from insa;

-- round(d [,fmt]) : Á¤ÇØÁø ³¯Â¥¸¦ fmt¸¦ ±âÁØÀ¸·Î ¹Ý¿Ã¸²
select round(to_date('2007-07-10', 'yyyy-mm-dd'),'year') "first of the year"
from dual; -- 08/01/01(³â ¹Ý¿Ã¸². 7¿ù 1ÀϺÎÅÍ ¹Ý¿Ã¸²)

select name, ibsadate, round(ibsadate, 'month') from insa; -- ¿ù ¹Ý¿Ã¸²(16ÀÏ ±âÁØ)

-- trunc(d,[fmt]) : Á¤ÇØÁø ³¯Â¥¸¦ fmt¸¦ ±âÁØÀ¸·Î ¹ö¸²
select trunc(to_date('27-08-04','dd-mm-yy'), 'year') from dual; -- 04/01/01
select name, ibsadate, trunc(ibsadate, 'month') from insa; -- ¸ðµÎ Ãâ·Â

-- next_day(d, char)
¸í½ÃµÈ ¿äÀÏ(char)ÀÌ µ¹¾Æ¿À´Â ³¯Â¥¸¦ °è»ê. ¿äÀÏÀº ¼ýÀڷΠǥÇö °¡´É(sunday : 1, monday : 2, ...)
select next_day(to_date('07/05/01', 'yy/mm/dd'), 6) from dual; -- 07/05/04

-- ¿À´ÃÀ» ±âÁØÀ¸·Î °¡Àå °¡±î¿î ¼ö¿äÀÏÀº ¾ðÁ¦ ??
select sysdate, next_day(sysdate, '¼ö¿äÀÏ') from dual;

-- À̹øÁÖ ÀÏ¿äÀÏ, Åä¿äÀÏ ¾Ë¾Æ³»±â
select sysdate,
case
when to_char(sysdate, 'day') = 'ÀÏ¿äÀÏ' then sysdate
else next_day(sysdate,1)-7
end as ÁÖ½ÃÀÛÀÏ,
case
when to_char(sysdate, 'day') = 'Åä¿äÀÏ' then sysdate
else next_day(sysdate, 'Åä¿äÀÏ')
end ÁÖ¸¶Áö¸·ÀÏ,
from dual;

-- ³¯Â¥¿¡ »ê¼ú ¿¬»êÀ» »ç¿ëÇÏ´Â °æ¿ì
³¯Â¥ + ¼ýÀÚ ¡æ ³¯Â¥ : ³¯Â¥¿¡ Àϼö¸¦ ´õÇÏ¿© ³¯Â¥ °è»ê
³¯Â¥ - ¼ýÀÚ ¡æ ³¯Â¥ : ³¯Â¥¿¡ Àϼö¸¦ °¨ÇÏ¿© ³¯Â¥ °è»ê
³¯Â¥ + ¼ýÀÚ/24 ¡æ ³¯Â¥ : ³¯Â¥¿¡ ½Ã°£À» ´õÇÏ¿© ³¯Â¥ °è»ê
³¯Â¥ - ³¯Â¥ ¡æ Àϼö : ³¯Â¥¿¡ ³¯Â¥¸¦ °¨ÇÏ¿© Àϼö °è»ê

-- null : °ªÀÌ Á¸ÀçÇÏÁö ¾ÊÀº »óÅÂ
is null : null À̸é Âü
not is null : null ÀÌ ¾Æ´Ï¸é Âü

-- null °ü·Ã ÇÔ¼ö
nvl(expr1, expr2) : expr1ÀÌ null À̸é expr2 ¹Ýȯ
nvl2(expr1, expr2, expr3) : expr1ÀÌ nullÀÌ ¾Æ´Ï¸é expr2¸¦ ¹ÝȯÇÏ°í, nullÀ̸é expr3¸¦ ¹Ýȯ
nullif(expr1, expr2) : µÎ Ç¥Çö½ÄÀ» ºñ±³Çؼ­ °°À¸¸é null ¹ÝȯÇÏ°í, °°Áö ¾ÊÀ¸¸é expr1À» ¹Ýȯ
coalesce(expr1, expr2, ¡¦¡¦, exprn) : Ç¥Çö½Ä ¸ñ·Ï¿¡¼­ ù ¹ø°·Î nullÀÌ ¾Æ´Ñ °ÍÀ» ¹ÝȯÇÑ´Ù.
Áï, expr1ÀÌ ³ÎÀÌ ¾Æ´Ï¸é expr1À» ¹ÝȯÇϸç, expr1ÀÌ ³ÎÀÌ°í expr2°¡ ³ÎÀÌ ¾Æ´Ï¸é expr2¸¦ ¹ÝȯÇÑ´Ù.
lnnvl(Á¶°Ç) : Á¶°ÇÀÌ °ÅÁþÀ̰ųª °ªÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é true¸¦ ¸®ÅÏÇϸç, Á¶°ÇÀÌ °ÅÁþÀ̸é false¸¦ ¸®ÅÏ ÇÑ´Ù.
select ¸®½ºÆ®¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç where Àý¿¡¼­¸¸ »ç¿ë °¡´É ÇÏ´Ù.

select name, tel from insa where tel is null;
select name, tel from insa where tel is not null;
select name, nvl(tel, '0000-0000') tel from insa;
select name, nvl(tel, '0000-0000') tel from insa where tel is null;
select name, nvl2(tel, tel, '0000-0000') tel from insa;

-- order by : Á¤·Ä
-- asc : ¿À¸§Â÷¼ø, desc : ³»¸²Â÷¼ø
select name, city, basicpay+sudang pay from insa
order by basicpay+sudang asc;

select name, city, basicpay+sudang pay from insa
order by basicpay+sudang desc;

select name, city, basicpay+sudang pay from insa
order by city desc, basicpay+sudan;

select name, city, basicpay+sudang pay from insa
order by city desc, basicpay+sudan desc;

select name, city, basicpay+sudang pay from insa
where substr(ssn, 8, 1) in ('1', '3')
order by city desc, basicpay+sudan desc;

-- ¼­¿ï »ç¶÷Áß¿¡¼­ ±âº»±Þ+¼ö´ç ³»¸²Â÷¼øÀ¸·Î Á¤·Ä
À̸§, Ãâ½Åµµ, ±âº»±Þ+¼ö´ç
select name, city, basicpay+sudang pay from insa
where city='¼­¿ï'
order by pay desc; -- ÇʵåÀÇ º°¸íÀº order by¿¡ »ç¿ë °¡´É

-- ¿©ÀÚÁß ºÎ¼­¿À¸§Â÷¼øÀ¸·Î Á¤·ÄÇÏ°í ºÎ¼­°¡ °°À¸¸é ±âº»±Þ ³»¸²Â÷¼ø Á¤·Ä
À̸§, ÁֹιøÈ£, ºÎ¼­, ±âº»±Þ
select name, ssn, buseo, basicpay from insa
where sustr(ssn, 8, 1) in (2, 4)
order by buseo, basicpay desc;

-- distinct : Áߺ¹ ¹èÁ¦(¹Ý´ë : all -- ±âº»)
select buseo from insa;

select distinct buseo from insa;
select distinct buseo, jikwi from insa;

-- in
in(°ª, °ª, ...) : ÇÇ¿¬»êÀÚ°¡ ½Ä ¸ñ·Ï Áß Çϳª¿Í µ¿ÀÏÇÑ °æ¿ì true

select name, city from insa where city = '¼­¿ï' or
city = 'ÀÎõ' or city = '±¤ÁÖ' or city = 'ºÎ»ê'
select name, city from insa where city in ('¼­¿ï', 'ÀÎõ', '±¤ÁÖ', ºÎ»ê')

-- between ~ and : ÇÇ¿¬»êÀÚ°¡ ¹üÀ§ ¾È¿¡ ÀÖ´Â °æ¿ì Âü
select name, basicpay from insa
where basicpay >=1500000 and basicpay <=2000000;

select name, basicpay from insa
where basicpay between 1500000 and 2000000;

select name, ibsadate from insa
where ibsadate between '2000-01-01' and '2000-12-31';

-- like : ÁÖ¾îÁø ¹®ÀÚ¿­ÀÌ ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´ÂÁö ¿©ºÎ È®ÀÎ
-- % : ¿©·¯¹®ÀÚ °øÅë
-- _ : Çѹ®ÀÚ °øÅë

select name from insa where name like '±è%';
select name from insa where name not like '±è%';
select tel from insa where tel like '%3%';
select tel from insa where tel like '%3%' or tel like '%5%';
select ssn from insa where ssn like '_0%';
select tel from insa where tel like '%%';

-- decode : °¢°¢ÀÇ Á¶°Ç¿¡ ¸Â´Â °ª¿¡ ´ëÇÑ Ã³¸®¸¦ °á°ú¸¦ ¸®ÅÏ
select name, ssn,
decode(substr(ssn, 8,1),'1','³²ÀÚ','3','³²ÀÚ','2','¿©ÀÚ','4','¿©ÀÚ') ¼ºº°
from insa;

select name, ssn,
decode(substr(ssn, 8,1), '1', '³²ÀÚ') ¼ºº° from insa;

-- À̸§, ¼ºº°, ³ªÀÌ Ãâ·Â
-- ¼ºº° : ÁֹιøÈ£(ssnÀÇ 8¹ø°)°¡ 1,3->³²ÀÚ 2,4->¿©ÀÚ
-- ³ªÀÌ : ÁֹιøÈ£¸¦ ÀÌ¿ë
select name,
decode(substr(ssn,8,1), '1','³²ÀÚ','2','¿©ÀÚ','3','³²ÀÚ','4','¿©ÀÚ') ¼ºº°,
trunc(months_between(sysdate, to_date('19'||substr(ssn,1,6),'yyyymmdd'))/12) ³ªÀÌ
from insa;

select name,
decode(mod(substr(ssn,8,1), 2),1,'³²ÀÚ',0,'¿©ÀÚ') ¼ºº°,
trunc(months_between(sysdate, to_date('19'||substr(ssn,1,6),'yyyymmdd'))/12) ³ªÀÌ
from insa;

-- case ~ end : Á¶°Ç¿¡ µû¶ó ´Ù¸¥ °á°ú¸¦ ¸®ÅÏÇØ¾ß ÇÏ´Â °æ¿ì(decode º¸´Ù ¼º´É ¿ì¼ö)
select name, basicpay+sudang pay,
case
when (basicpay+sudang) >= 2500000 then
round((basicpay+sudang) * 0.03, -1)
when (basicpay+sudang) >= 2000000 then
round((basicpay+sudang) * 0.02, -1)
else 0
end as tax
from insa;

-- ÁýÇÕ ¿¬»êÀÚ
-- union : ù ¹ø° sql¹®ÀÇ °á°ú¿Í µÎ ¹ø° sql¹®ÀÇ °á°ú Áß Áߺ¹µÈ µ¥ÀÌÅ͸¦ Á¦°ÅÇÑ´Ù.
-- union all : ù ¹ø° sql¹®ÀÇ °á°ú¿Í µÎ ¹ø° sql¹®ÀÇ °á°ú¸¦ ¸ðµÎ Ãâ·ÂÇÑ´Ù.
-- minus : Â÷ÁýÇÕ. ù ¹ø° sql¹® °á°ú¿¡´Â ÀÖ°í, µÎ ¹ø° sql¹®ÀÇ °á°ú¿¡´Â ¾ø´Â µ¥ÀÌÅ͸¦ Ãâ·ÂÇÑ´Ù.
-- intersect : ÀÎÅͼ½Æ®´Â µÎ ¹ø° sql¹®ÀÇ °á°ú¿Í ù ¹ø° sql¹®ÀÇ °á°ú¿¡ Áߺ¹µÈ Çุ Ãâ·Â(±³ÁýÇÕ)

-- ÇÕÁýÇÕ ¿¬»êÀÚ : union -> Áߺ¹ µ¥ÀÌÅÍ Çѹø¸¸ Ãâ·Â
select name, city, buseo from insa where buseo='°³¹ßºÎ'
union
select name, city, buseo from insa where city='ÀÎõ';

-- ÇÕÁýÇÕ ¿¬»êÀÚ : union all -> Áߺ¹ µ¥ÀÌÅ͵µ Ãâ·Â
select name, city, buseo from insa where buseo='°³¹ßºÎ'
union all
select name, city, buseo from insa where city='ÀÎõ' order by city;
-- order by ´Â ¸¶Áö¸·¿¡ Çѹø¸¸

-- ÇÕÁýÇÕ ¿¬»êÀÚ : union
-- ÇʵåÀÇ °³¼ö¿Í ÀÚ·áÇüÀÌ ÀÏÄ¡Çϸé Çʵ尡 ´Þ¶óµµ °¡´É
select name, city, buseo,basicpay from insa where buseo='°³¹ßºÎ'
union
select name, city, buseo,sudang from insa where city='ÀÎõ';

-- Â÷ÁýÇÕ
select name, city, buseo from insa where buseo='°³¹ßºÎ'
minus
select name, city, buseo from insa where city='ÀÎõ';

-- ±³ÁýÇÕ
select name, city, buseo from insa where buseo='°³¹ßºÎ'
intersect
select name, city, buseo from insa where city='ÀÎõ';

 

 

3. ±×·ìÇÔ¼ö

-- Áý°èÇÔ¼ö(count, sum, avg, max, min) µî
count : ÇàÀÇ °³¼ö¸¦ ¸®ÅÏ
avg : null°ªÀ» Á¦¿ÜÇÑ ÇàÀÇ Æò±Õ°ªÀ» Ãâ·ÂÇÑ´Ù.
sum : null°ªÀ» Á¦¿ÜÇÑ Çհ踦 Ãâ·ÂÇÑ´Ù.
stddev : null°ªÀ» Á¦¿ÜÇÑ Ç¥ÁØÆíÂ÷¸¦ Ãâ·ÂÇÑ´Ù.
variance : null°ªÀ» Á¦¿ÜÇÑ ºÐ»êÀ» Ãâ·ÂÇÑ´Ù.
max : ÃÖ´ë°ªÀ» Ãâ·ÂÇÑ´Ù.
min : ÃÖ¼Ò°ªÀ» Ãâ·ÂÇÑ´Ù.

-- Áý°èÇÔ¼ö´Â where Àý¿¡ »ç¿ëºÒ°¡, group by¸¦ »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì ÀÏ¹Ý Çʵå¿Í »ç¿ëºÒ°¡

-- count : ÀÚ·áÀÇ °³¼ö ±¸Çϱâ
select count(num) from insa;
select count(*) from insa;
select count(tel) from insa;
select count(nvl(tel, '0')) from insa;

select count(decode(substr(ssn, 8, 1), '1', '1', '3', '1')) ³²ÀÚ,
count(decode(substr(ssn, 8, 1), '2', '1', '4', '1')) ¿©ÀÚ
from insa;

select count(decode(mod(substr(ssn, 8, 1), 2), '1', '1')) ³²ÀÚ,
count(decodemod(substr(ssn, 8, 1), 2), '0', '1')) ¿©ÀÚ
from insa;

select count(*) from insa where city='¼­¿ï';
select count(decode(substr(ssn, 8, 1), '1', '1', '3', '1')) ¼­¿ï³²ÀÚ
from insa where city='¼­¿ï';

select count(distinct buseo) from insa;

-- sum, avg, max, min
select sum(basicpay), avg(basicpay), max(basicpay),
min(basicpay) from insa;

select name, sum(basicpay) from insa;
-- ¿À·ù(ÀÏ¹Ý Çʵå¿Í Áý°èÇÔ¼ö´Â °°ÀÌ »ç¿ë ºÒ°¡)

-- group by(±×·ìº° Åë°è)
select sum(basicpay) from insa
group by buseo;
select buseo, sum(basicpay) from insa
group by buseo;

select buseo, jikwi, count(*) from insa
group by buseo, jikwi
order by buseo;

select buseo, count(*) Àοø¼ö from insa
where substr(ssn, 8, 1) in ('2', '4')
group by buseo;

select buseo,
count(decode(substr(ssn, 8, 1), '1', '1', '3', '1')) ³²ÀÚ,
count(decode(substr(ssn, 8, 1), '2', '1', '4', '1')) ¿©ÀÚ
from insa
group by buseo;

select count(*) from insa where buseo='°³¹ßºÎ';

- having
±×·ì ¶Ç´Â Áý°è¿¡ ´ëÇÑ °Ë»ö Á¶°ÇÀ» ÁöÁ¤ÇÑ´Ù. havingÀº select ¹®ÇÏ°í¸¸ »ç¿ëµÉ ¼ö ÀÖ´Ù.

select buseo, count(*) from insa
group by buseo
having count(*) >= 7;

-- ºÎ¼­º° Àοø¼ö°¡ °¡Àå ¸¹Àº ºÎ¼­(rownum´Â µÎ°³ ÀÌ»óÀÇ ºÎ¼­°¡
-- °¡Àå ¸¹Àº Àοø¼ö¸¦ °¡Áø °æ¿ì ºÎ¼­ Çϳª¸¸ Ãâ·Â µÈ´Ù.)
select * from (select buseo, count(*) Àοø¼ö from insa group by buseo
order by Àοø¼ö desc) where rownum =1;

select buseo, Àοø¼ö from (select buseo, count(*) Àοø¼ö,
rank() over(order by count(*) desc) r from insa
group by buseo ) i where i.r = 1;

-- ¿©ÀÚ Àοø¼ö°¡ °¡Àå ¸¹Àº ºÎ¼­
select buseo, Àοø¼ö from (select buseo, count(*) Àοø¼ö,
rank() over(order by count(*) desc) r from insa
where substr(ssn, 8, 1) in ('2', '4')
group by buseo ) i where i.r = 1;

-- Ãâ½Åµµº° ¼ºº° Àοø¼ö
select city,count(decode(substr(ssn,8, 1),1,1,3,1)) ³²ÀÚ,
count(decode(substr(ssn,8,1),2,1,4,1)) ¿©ÀÚ
from insa group by city;

select city,
decode(substr(ssn,8, 1),1,'³²ÀÚ',2,'¿©ÀÚ',3,'³²ÀÚ',4,'¿©ÀÚ') ¼ºº°
,count(*) Àοø¼ö from insa group by city,
decode(substr(ssn,8, 1),1,'³²ÀÚ',2,'¿©ÀÚ',3,'³²ÀÚ',4,'¿©ÀÚ')
order by city;

-- ÀÔ»ç³âµµº° Àοø¼ö ±¸Çϱâ
select to_char(ibsadate, 'yyyy') ÀÔ»ç³âµµ, count(*) Àοø¼ö
from insa
group by to_char(ibsadate, 'yyyy')
order by ÀÔ»ç³âµµ;

-- ±âº»±ÞÀÌ Æò±Õ ÀÌÇÏÀÎ »ç¿øÃâ·Â(À̸§, ±âº»±Þ)
select avg(basicpay) from insa;
select name, basicpay
from insa
where basicpay <=
(select avg(basicpay) from insa);

-- ºÎ¼­º° ³²ÀÚÀοø¼ö°¡ 5¸í ÀÌ»óÀÎ ºÎ¼­¿Í ³²ÀÚÀοø¼ö
select buseo, count(*) ³²ÀÚÀοø¼ö
from insa where substr(ssn,8,1) in (1, 3)
group by buseo;

select buseo, count(*) ³²ÀÚÀοø¼ö
from insa where substr(ssn,8,1) in (1, 3)
group by buseo
having count(*)>=5;

-- ºÎ¼­º° ¿©ÀÚÀοø¼ö°¡ 3¸íÀÌ»óÀÎ ºÎ¼­¿Í ¿©ÀÚÀοø¼öÃâ·Â
select buseo, count(*) from insa
where substr(ssn, 8, 1) in (2, 4)
group by buseo
having count(*) >= 3;

-- ±âº»±Þ+¼ö´çÀÌ °¡Àå ¸¹Àº »ç¶÷ÀÇ À̸§, ±âº»±Þ+¼ö´ç Ãâ·Â
select name, (basicpay+sudang) ±Þ¿©
from insa
where (basicpay+sudang) =
(select max(basicpay+sudang) from insa);

-- ÀÔ»ç¿ùº° Àοø¼ö ±¸Çϱâ(¿ù, Àοø¼ö), ¿ù ¿À¸§Â÷¼ø
select to_char(ibsadate, 'mm') ¿ù, count(*) Àοø¼ö
from insa
group by to_char(ibsadate, 'mm')
order by ¿ù ;

select to_number(to_char(ibsadate, 'mm')) || '¿ù' as ¿ù,
count(*)||'¸í' Àοø¼ö
from insa
group by to_char(ibsadate, 'mm')
order by to_char(ibsadate, 'mm');

-- rollup : ±×·ìÈ­ ÇÏ°í ±×·ì¿¡ ´ëÇÑ ºÎºÐÇÕ
select buseo, jikwi, sum(basicpay) from insa
group by rollup(buseo, jikwi);

-- cube(rollup °á°ú¿¡ group by ÀýÀÇ Á¶°Ç¿¡ µû¶ó ¸ðµç °¡´ÉÇÑ
-- ±×·ìÇÎ Á¶ÇÕ¿¡ µû¸¥ °á°ú Ãâ·Â
select buseo, jikwi, sum(basicpay) from insa
group by cube(buseo, jikwi);

-- grouping ÇÔ¼ö
grouping ÇÔ¼ö´Â rollupÀ̳ª cube ¿¬»êÀÚ¿Í ÇÔ²² »ç¿ëÇÏ¿© grouping ÇÔ¼ö¿¡ ±â¼úµÈ Ä÷³ÀÌ
±×·ìÇÎ ½Ã Áï, rollupÀ̳ª cube ¿¬»ê ½Ã »ç¿ëÀÌ µÇ¾ú´ÂÁö¸¦ º¸¿© ÁÖ´Â ÇÔ¼ö

select buseo, jikwi, grouping(buseo), grouping(jikwi), avg(basicpay) as Æò±Õ±Þ¿©
from insa group by rollup (buseo, jikwi);

select buseo, jikwi, grouping(buseo), grouping(jikwi), avg(basicpay) as Æò±Õ±Þ¿©
from insa group by cube (buseo, jikwi);

-- grouping sets ÇÔ¼ö
grouping sets ÇÔ¼ö´Â group by Àý¿¡¼­ ±×·ì Á¶°ÇÀ» ¿©·¯ °³ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ÇÔ¼öÀÌ´Ù.
grouping sets ÇÔ¼öÀÇ °á°ú´Â °¢ ±×·ì Á¶°Ç¿¡ ´ëÇØ º°µµ·Î group byÇÑ °á°ú¸¦ union allÇÑ °á°ú¿Í µ¿ÀÏÇÏ´Ù.

select buseo , jikwi, null, avg(basicpay) from insa group by buseo , jikwi
union all
select null, jikwi, city, avg(basicpay) from insa group by jikwi, city;

select buseo , jikwi, city, avg(basicpay) from insa
group by grouping sets ((buseo , jikwi), (jikwi, city));

-- rownum : Äõ¸®ÀÇ °á°ú·Î ³ª¿À´Â °¢°¢ÀÇ Çàµé¿¡ ´ëÇÑ ¼ø¼­ °ªÀ» ³ªÅ¸³»´Â ÀÇ»ç Ä÷³
select rownum, insa.name, basicpay from insa;

select rownum, name, basicpay from insa
order by basicpay desc; -- »ç¿ëÇÏ¸é ¾ÈµÊ..¿Ö??

select rownum, data.* from (
select name, basicpay from insa
order by basicpay desc) data;

select rownum, data.* from (
select name, basicpay from insa
order by basicpay desc) data
where rownum >=10 and rownum <=15; -- ¾ÈµÊ

select * from (
select rownum rnum, data.* from (
select name, basicpay from insa
order by basicpay desc) data
) where rnum >=10 and rnum <=15;


-- ºÐ¼® ÇÔ¼ö
-- rank() over( )
-- ±×·ì ³»¿¡¼­ À§Ä¡(¼øÀ§)¸¦ ¹ÝȯÇÑ´Ù.
-- over : ¼øÀ§¸¦ ºÎ¿©Çϱâ À§ÇÑ ÁýÇÕÀÇ Á¤·Ä ±âÁØ°ú ºÐÇÒ ±âÁØÀÇ Á¤ÀÇ
-- partition by : value expression1À» ±âÁØÀ¸·Î ºÐÇÒ, »ý·«Çϸé Àüü ÁýÇÕÀ» ´ë»óÀ¸·Î ¼øÀ§ºÎ¿©
-- order by : °¢ ºÐÇÒ ³»¿¡¼­ µ¥ÀÌÅ͸¦ Á¤·ÄÇÏ´Â ±âÁØ Ä÷³ ÁöÁ¤
-- nulls first | nulls last : Á¤·Ä °á°ú¿¡¼­ null °ªÀÇ À§Ä¡ ÁöÁ¤

select name, basicpay,
rank() over(order by basicpay desc) ¼øÀ§
from insa;

select name, basicpay, sudang,
rank() over(order by basicpay desc, sudang desc) ¼øÀ§
from insa;

select name, basicpay, buseo,
rank() over(partition by buseo
order by basicpay desc) ¼øÀ§
from insa;

-- 1~10µî±îÁö Ãâ·Â(À̸§, ±âº»±Þ, ¼øÀ§)
select * from (
select name, basicpay,
rank() over(order by basicpay desc) as r
from insa) where r >= 1 and r <= 10;

select * from (
select name, basicpay from insa
order by basicpay desc
) where rownum <=10; -- ¾ÈµÊ

-- ±âº»±Þ »óÀ§ 10%¸¸ Ãâ·Â(À̸§,±âº»±Þ)
select name, basicpay from (
select name, basicpay,
rank() over(order by basicpay desc) r
from insa
) where r <=
trunc((select count(*) from insa) * 0.1);

-- ºÎ¼­º° ±âº»±ÞÀÌ °¡Àå ³ôÀº »ç¶÷ Ãâ·Â(À̸§ ºÎ¼­ Á÷À§ ±Þ¿©)
select name, buseo, jikwi, basicpay from (
select name, buseo,basicpay, jikwi,
rank() over(partition by buseo
order by basicpay desc) r
from insa)
where r=1;

select name, buseo, jikwi, pay from (
select name, buseo,basicpay+sudang as pay, jikwi,
rank() over(partition by buseo
order by basicpay+sudang desc) r
from insa)
where r=1;

-- dense_rank() over( ) ÇÔ¼ö
-- k ÇÔ¼ö¿Í µ¿ÀÏÇÏÁö¸¸ µ¿ÀÏÇÑ ¼øÀ§°¡ ¹ß»ýÇÒ °æ¿ì ¿¬¼ÓÀûÀ¸·Î ¼øÀ§¸¦ ºÎ¿©ÇÑ´Ù.
-- ¿¹¸¦ µé¾î "100, 100, 90"ÀÇ ¼øÀ§¸¦ desc ¼øÀ¸·Î rank ÇÔ¼ö·Î ºÎ¿©Çϸé "1, 1, 3"ÀÌ µÇÁö¸¸
-- dense_rank ÇÔ¼ö´Â "1, 1, 2"°¡ µÈ´Ù.

-- row_number() over( ) ÇÔ¼ö
-- ºÐÇÒº°·Î Á¤·ÄµÈ °á°ú¿¡ ´ëÇØ ¼øÀ§¸¦ ºÎ¿©ÇÏ´Â ±â´ÉÀÌ´Ù. ºÐÇÒÀº Àüü ÇàÀ» ƯÁ¤ Ä÷³À» ±âÁØÀ¸·Î
-- ºÐ¸®ÇÏ´Â ±â´ÉÀ¸·Î group by Àý¿¡¼­ ±×·ìÈ­ ÇÏ´Â ¹æ¹ý°ú °°Àº °³³äÀÌ´Ù.
-- µ¿ÀÏÇÑ °ªÀÌ ÀÖ´Â °æ¿ì rank ÇÔ¼ö´Â 1, 1, 3 Çü½ÄÀ¸·Î Ãâ·ÂÇÏÁö¸¸ row_number´Â 1, 2, 3 ¼øÀ¸·Î Ãâ·Â

select name, basicpay,
row_number() over(order by basicpay desc) from insa;

-- count() over()
Á¶°Ç¿¡ ¸¸Á·ÇÏ´Â ÇàÀÇ ¼ö ¹Ýȯ

-- °³¹ßºÎ Á÷¿ø Áß À̸§, ±âº»±ÞÀ» Ãâ·ÂÇÏ°í °¢ Á÷¿øÀÇ ±Þ¿©º¸´Ù °°°Å³ª Àû°Ô ¹Þ´Â »ç¶÷ÀÇ Àοø¼ö¸¦ Ãâ·Â
select name, basicpay,
count(*) over(order by basicpay)
from insa
where buseo='°³¹ßºÎ';

select name, basicpay,
count(*) over(order by basicpay desc)
from insa
where buseo='°³¹ßºÎ';

-- sum() over()
Á¶°Ç¿¡ ¸¸Á·ÇÏ´Â ÇàÀÇ ÇÕ ¹Ýȯ

select name, buseo, jikwi, basicpay,
sum(basicpay) over(order by buseo, jikwi),
sum(basicpay) over(partition by buseo
order by jikwi)
from insa;

-- avg() over()
Á¶°Ç¿¡ ¸¸Á·ÇÏ´Â ÇàÀÇ Æò±Õ ¹Ýȯ

select name, city, basicpay,
basicpay -
round(avg(basicpay) over(partition by city order by city))
"µµ½ÃÆò±Õ°úÂ÷ÀÌ",
basicpay -
(select round(avg(basicpay)) from insa)
"ÀüüÆò±Õ°úÂ÷ÀÌ"
from insa;

-- first_value() over()
Á¤·ÄµÈ °ª Áß¿¡¼­ ù ¹ø° °ªÀ» ±¸ÇÑ´Ù.

-- insa Å×ÀÌºí¿¡¼­ Àüü »ç¿øÀÇ ±Þ¿©¿Í, °¢ ºÎ¼­ÀÇ ÃÖ°í ±Þ¿©¸¦ Ãâ·ÂÇÏ°í ºñ±³Çϱâ
select name, buseo, basicpay,
first_value(basicpay) over(partition by buseo order by basicpay desc)
from insa;

-- À̸§, ±âº»±Þ, ÃÖ´ë±âº»±Þ°úÀÇ Â÷ÀÌ
select name,basicpay,
first_value(basicpay) over(order by basicpay desc) - basicpay Â÷ÀÌ
from insa;

-- first¿Í last
-- first¿Í last´Â ±× ÀÚü°¡ ÇÔ¼ö°¡ ¾Æ´Ï¶ó ºÐ¼® ÇÔ¼ö¿¡ »ç¿ëµÇ´Â Å°¿öµåÀÌ´Ù.
-- ƯÁ¤ ±×·ì¿¡ µû¶ó ÃÖ´ë°ª±« ÃÖ¼Ò°ªÀ» ÃßÃâÇÑ´Ù.

-- Çü½Ä
-- Áý°èÇÕ¼ö keep (dense_rank first[last] order by expr [asc | desc])
-- over(partition by expr ...)

-- ºÎ¼­º° ÃÖ´ë ±Þ¿©¸¦ ¹Þ´Â »ç¶÷°ú ÃÖ´ë±Þ¿©, ÃÖ¼Ò±Þ¿©¸¦ ¹Þ´Â »ç¶÷°ú ÃÖ¼Ò ±Þ¿© Ãâ·Â
select buseo,
max(num || ' ' || name) keep (dense_rank first order by basicpay desc) ÃÖ´ë±Þ¿©À̸§,
max(basicpay) ÃÖ´ë±Þ¿©,
min(num || ' ' || name) keep (dense_rank last order by basicpay desc) ÃÖ¼Ò±Þ¿©À̸§,
min(basicpay) ÃÖ¼Ò±Þ¿©
from insa
group by busdeo;

 

 

4. Å×À̺íÀÛ¼º/¼öÁ¤/»èÁ¦

-- µ¥ÀÌÅÍ µñ¼Å³Ê¸®(data dictionary) : table°ú viewµéÀÇ ÁýÇÕÀ¸·Î database¿¡
-- ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÏ´Â Áß¿äÇÑ ºÎºÐÀ¸·Î database »ý¼º½Ã sys schema ¾ÈÀÇ
-- ³»ºÎ table·Î ±¸¼º

select count(*) from dictionary;
select count(*) from user_tables;
select count(*) from tabs;
select * from tabs; -- user_tables ¿Í µ¿ÀÏ
select * from tab;

-- Ä÷³¸í¸¸ È®ÀÎ
select cname from col where tname='insa';

-- Ä÷³¸í ¹× ÀÚ·áÇüµî Ãâ·Â
select column_name, data_type, data_length,data_precision from user_tab_columns where table_name='insa';
select column_name, data_type, data_length,data_precision from cols where table_name='insa';

-- Á¦¾àÁ¶°Ç È®ÀÎ
select * from user_constraints where table_name='insa';

select constraint_name, table_name, constraint_type from user_constraints;

-- »ç¿ëÀÚ¿¡°Ô ÁÖ¾îÁø ±ÇÇÑ
select * from user_sys_privs;

-- ÀÚ·áÇü
-- ¹®ÀÚ µ¥ÀÌÅÍ Å¸ÀÔ
-- char(n) : °íÁ¤±æÀÌ ¹®ÀÚ µ¥ÀÌÅ͸¦ ÀúÀåÇϸç ÃÖ´ë ±æÀÌ´Â 2000ÀÚÀÌ°í ±æÀ̸¦ ¸í½ÃÇÏÁö ¾ÊÀ¸¸é ±âº» ±æÀÌ´Â 1
-- nls(±¹°¡º° ¾ð¾î ÁýÇÕ)´Â Çѱ۰ú ¿µ¹®¸¸ °¡´É ÇÏ´Ù. ³²Àº °ø°£Àº °ø¹é(space)·Î ä¿î´Ù.

-- varchar2(n) : °¡º¯ ±æÀÌ ¹®ÀÚ µ¥ÀÌÅ͸¦ ÀúÀåÇϸç ÃÖ´ë ±æÀÌ´Â 4000ÀÚÀÌ°í, ¹Ýµå½Ã ±æÀ̸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù.
-- nls(±¹°¡º° ¾ð¾î ÁýÇÕ)´Â Çѱ۰ú ¿µ¹®¸¸ °¡´ÉÇÏ´Ù.
-- varchar ´Â ÃÖ´ë 2000°³ ¹®ÀÚ¸¦ ÀúÀåÇϸç varchar2¿Í´Â ´Ù¸£°Ô varchar(10)·Î ¼±¾ðÇϸé
-- nullÀ» ä¿ö ½ÇÁ¦·Î´Â 10°³ÀÇ °ø°£À» »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ varchar2(10)´Â ÇÊ¿äÇÑ ¹®ÀÚ±îÁö¸¸ ÀúÀåÇÏ´Â
-- variable lengthÀ̸ç ÃÖ´ë 4000°³ ¹®ÀÚ±îÁö ÀúÀåÇÒ ¼ö ÀÖ´Ù.

-- nchar, nvarchar2 : ´Ù¾çÇÑ ¾ð¾îÀÇ ¹®ÀÚ °ª(±¹°¡º° ¾ð¾î ÁýÇÕ : nls)À» ÀúÀåÇÏ°í Á¶È¸ÇÒ ¼ö ÀÖ´Ù.
-- ¹ÙÀÌÆ® ´ÜÀ§°¡ ¾Æ´Ñ ¹®ÀÚ ´ÜÀ§·Î Ä÷³ ±æÀ̸¦ ÁöÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î nchar(7) ´Â Çѹ®ÀÚ°¡
-- 2byteÀÎ °æ¿ì 14byte°¡ »ç¿ëµÈ´Ù.

-- ¼ýÀÚ µ¥ÀÌÅÍ Å¸ÀÔ
-- number(p, s) : p(1~38)´Â Á¤¹Ðµµ·Î Àüü ÀÚ¸®¼ö¸¦ ³ªÅ¸³»¸ç ±âº» °ªÀÌ 38ÀÌ°í s(-84~127)´Â
-- ¼Ò¼öÁ¡ ÀÌÇÏÀÇ ÀÚ¸´¼öÀÌ´Ù. Á¤¼ö³ª ½Ç¼ö ÀúÀåÇϱâ À§ÇÑ °¡º¯±æÀÌÀÇ Ç¥ÁØ ³»ºÎ Çü½ÄÀÌ´Ù.
-- »ç¿ë ¿¹
-- number : number(38, 0)°ú µ¿ÀÏ
-- number(5) : ´Ù¼¸ ÀÚ¸® Á¤¼ö
-- number(10, 3) : 1234567.6789 ÀÔ·Â ½Ã 1234567.679°¡ ÀúÀåµÇ¸ç 12345678.678 ÀÔ·Â ½Ã overflow ¿¡·¯°¡ ¹ß»ý ÇÑ´Ù.

-- ³¯Â¥ µ¥ÀÌÅÍ Å¸ÀÔ
-- date : ¡º³â/¿ù/ÀÏ ½Ã:ºÐ:ÃÊ¡»±îÁö ÀúÀåÇϸç, ±âº»ÀûÀ¸·Î ³â/¿ù/ÀÏ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.

-- Å×À̺í ÀÛ¼º
-- ¾ÆÀ̵ð ¼ýÀÚ 7
-- À̸§ ¹®ÀÚ 20
-- ³ªÀÌ ¼ýÀÚ 3
-- ÀüÈ­¹øÈ£ ¹®ÀÚ 25 (¿ìÆí¹øÈ£, Çйø .. : ¹®ÀÚ)

-- Å×À̺í ÀÛ¼º
create table test1 (
id number(7)
, name varchar2(20)
, age number(3)
, tel varchar2(25)
);

-- Å×ÀÌºí ¸ñ·Ï È®ÀÎ
select * from tab;
select table_name from tabs;

-- Å×ÀÌºí ±¸Á¶ È®ÀÎ
desc test1;

-- Å×ÀÌºí¿¡ Çʵå Ãß°¡
alter table Å×À̺íÀ̸§ add (Ä÷³¸í datatype [default °ª] [, Ä÷³¸í datatype]...);

alter table test1 add (birth date, bigo varchar2(255));
desc test1;

-- Å×À̺íÀÇ Ä÷³Æø ¹× ÀÚ·áÇü º¯°æ
alter table Å×À̺í¸í modify (Ä÷³¸í datatype [default °ª] [, Ä÷³¸í datatype]...);

alter table test1 modify (bigo varchar2(200));
desc test1;

-- Å×À̺íÀÇ Çʵå¸í º¯°æ
alter table Å×À̺í¸í rename column º¯°æÀüÄ÷³¸í to »õ·Î¿îÄ÷³¸í;

alter table test1 rename column bigo to memo
desc test1;

-- Å×À̺íÀÇ ÇÊµå »èÁ¦
alter table Å×À̺í¸í drop column Ä÷³¸í;

alter table test1 drop column age;
desc test1;

-- Å×À̺í¸í º¯°æ : Å×À̺í, ºä, ½ÃÄö½º, ½Ã³Ê´ÔÀÇ À̸§À» º¯°æ
rename old_name to new_name;

rename test1 to exam1;
select * from tab;

-- ±âÁ¸ Å×À̺íÀ» ÀÌ¿ëÇÏ¿© Å×À̺í ÀÛ¼º
create table Å×À̺í¸í [Ä÷³¸í (, Ä÷³¸í) ,...] as subquery;

create table insa1 as select num, name, basicpay,
sudang, basicpay+sudang pay from insa;

select * from tab;
desc insa1
select * from insa1;

-- Å×ÀÌºí ±¸Á¶¸¸ º¹»ç(Á¦¾àÁ¶°ÇÀº º¹»ç µÇÁö ¾Ê´Â´Ù)
create table insa2 as select * from insa where 1=0;

-- Å×ÀÌºí »èÁ¦
drop table Å×À̺í¸í [cascade constraints] [purge];

-- ÈÞÁöÅë
drop table insa1; -- ÈÞÁöÅë¿¡ »èÁ¦µÈ Å×À̺í ÀúÀå
select * from tab;

-- ÈÞÁöÅë È®ÀÎ
select object_name, original_name, droptime, dropscn
from recyclebin;

-- ÈÞÁöÅë Å×ÀÌºí ³»¿ë È®ÀÎ(ÈÞÁöÅë Á¤º¸ È®ÀÎ ÈÄ object_name ¸íÀ¸·Î È®ÀÎ)
select * from "bin$lmg0n7nosncafq8lkjzm2q==$0" ;

-- ÈÞÁöÅë º¹¿ø(insa1 Àº »èÁ¦Çϱâ ÀüÀÇ ¿ø·¡ Å×À̺í¸í)
flashback table insa1 to before drop;
select * from tab;

-- ÈÞÁöÅë º¹¿ø(bin À̸§(object_name)À¸·Î µÇµ¹¸®±â)
flashback table "bin$lmg0n7nosncafq8lkjzm2q==$0"
to before drop;

-- ÈÞÁöÅë ºñ¿ì±â
drop table insa2;
purge recyclebin;
select * from tab;

-- ÈÞÁöÅë¿¡ ¹ö¸®Áö ¾Ê°í ¹Ù·Î Å×ÀÌºí »èÁ¦
drop table insa1 purge;
select * from tab;

 

 

5. ÀÚ·á Ãß°¡/¼öÁ¤/»èÁ¦

-- Å×ÀÌºí¿¡ µ¥ÀÌÅÍ Ãß°¡
-- insert into Å×À̺í¸í [(Ä÷³¸í1, Ä÷³¸í2, ...)] values (°ª1, °ª2, ...)
-- ÇÑ°³ÀÇ Å×ÀÌºí¿¡ ÇϳªÀÇ Çุ Ãß°¡ ÇÒ ¼ö ÀÖ´Ù.

select * from tab;
drop table test1 purge;
drop table insa1 purge;
drop table insa2 purge;

create table test1 (
num number(7) primary key
,name varchar2(20) not null
,birth date not null
,memo varchar2(255)
);

insert into test1 values (1, 'È«±æµ¿', '2000-10-10', 'Å×½ºÆ®');
insert into test1 (num, name, birth, memo)
values (2, 'À̼ø½Å', '1999-01-01', 'Ã湫°ø');
insert into test1 values (3, '¿À¶óŬ', '1999-12-12'); --¿À·ù(Çʵ尳¼ö¿Í °ªÀÇ °³¼ö°¡ ´Þ¶ó¼­)
insert into test1 values (3, '¿À¶óŬ', '1999-12-12', null);
insert into test1 (num, name, birth) values (4, '¼Ò³à½Ã´ë', '1988-01-01');

select * from test1;

commit; -- Æ®·£Àè¼Ç¿Ï·á(µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀå)
rollback; -- Æ®·£Àè¼ÇÃë¼Ò(µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåµÇÁö ¾ÊÀ½)

insert into test1 values (1, 'ȣȣȣ', '1999-10-10', 'Å×½ºÆ®');
-- ¿À·ù(Á¦¾àÁ¶°Ç À§¹Ý, ±âº»Å°´Â Áߺ¹À» Çã¿ëÇÏÁö ¾Ê´Â´Ù.)

insert into test1 (num, name, memo) values (5, 'À̼ø½Å', 'Ã湫°ø');
-- ¿À·ù(birth´Â not null ¼Ó¼ºÀ» °¡Áö°í Àִµ¥ birth¸¦ ÀÔ·ÂÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î)

insert into test1 (num, name, memo, birth) values (5, 'À̼ø½Å', 'Ã湫°ø', '05/05/88');
-- ¿À·ù(³¯Â¥ Çü½ÄÀÌ ¸ÂÁö ¾Ê¾Æ¼­)

insert into test1 (num, name, memo, birth)
values (5, 'À̼ø½Å', 'Ã湫°ø',
to_date('05/05/88', 'mm/dd/yy'));
-- yy´Â ½Ã½ºÅ۽ð£À» ±âÁØÀ¸·ÎÇϹǷΠ2088 Ãâ·Â
commit;

-- ¾Æ·¡Ã³·³ ÇØ¾ß 1988
insert into test1 (num, name, memo, birth)
values (6, 'À̼ø½Å', 'Ã湫°ø',
to_date('05/05/88', 'mm/dd/rr'));
commit;
select * from test1

-- ¿©·¯Çà Ãß°¡
insert into Å×À̺í¸í [(Ä÷³¸í, Ä÷³¸í, ...)] subquery;

create table test2 as select num, name, birth from test1 where 1=0;
-- ±¸Á¶¸¸º¹»ç(Á¦¾à Á¶°ÇÀº º¹»ç µÇÁö ¾ÊÀ½)
desc test2 -- È®ÀÎ

-- Á¦¾àÁ¶°Ç È®ÀÎ
select constraint_name, table_name, constraint_type from user_constraints;

-- ¿©·¯Çà Ãß°¡(±âÁ¸ Å×À̺íÀÇ ÀڷḦ Ãß°¡)
insert into test2 select num, name, birth from test1;
commit;
select * from test2;

insert into test2(name, birth)
select name, birth from test1;
commit;
select * from test2;

-- ÇϳªÀÇ insert¹®À» ÀÌ¿ë ¿©·¯ Å×ÀÌºí¿¡ µ¥ÀÌÅÍ Ãß°¡
insert all | first
[into Å×À̺í_1 values (Ä÷³_1, Ä÷³_2,...)]
[into Å×À̺í_2 values (Ä÷³_1, Ä÷³_2,...)]
.......
subquery;

-- all : ¼­ºê Äõ¸®ÀÇ °á°ú ÁýÇÕÀ» ÇØ´çÇÏ´Â insert Àý¿¡ ¸ðµÎ ÀÔ·Â
-- first : ¼­ºê Äõ¸®ÀÇ °á°ú ÁýÇÕÀ» ÇØ´çÇϴ ù ¹ø° insert Àý¿¡ ÀÔ·Â

create table test3 as select * from test1 where 1=0;
create table test4 as select * from test1 where 1=0;

insert all
into test3 values(num, name, memo, birth)
into test4 (num, name) values (num, name)
select * from test1;
commit;

select * from test3;
select * from test4;

-- Á¶°Ç¿¡ ¸¸Á·ÇÏ´Â ÀڷḸ ¿©·¯ Å×ÀÌºí¿¡ Ãß°¡
insert all
when Á¶°ÇÀý_1 then
into [Å×À̺í_1] values (Ä÷³_1, Ä÷³_2, ...)
when Á¶°ÇÀý_2 then
into [Å×À̺í_2] values (Ä÷³_1, Ä÷³_2, ...)
........
else
into [Å×À̺í_3] values (Ä÷³_1, Ä÷³_2, ...)
subquery;

create table test5 as select * from test1 where 1=0;
create table test6 as select * from test1 where 1=0;

insert all
when num >3 then
into test5 values(num, name, memo, birth)
when num <=3 then
into test6 (num, name) values (num, name)
select * from test1;
commit;

select * from test5;
select * from test6;

-- ¼öÁ¤
-- update Å×À̺í¸í set Ä÷³¸í= º¯°æÇÒ°ª[, Ä÷³¸í= º¯°æÇÒ°ª, ...] [where Á¶°Ç];

select * from test1;

update test1 set birth='2010-10-10', memo='¼öÁ¤';
-- Àý´ë·Î ÀÌ·¸°Ô ÇÏ¸é ¾ÈµÈ´Ù. ÀÌ·¸°Ô ¼öÁ¤Çϸé ÂѰܳ­´Ù.(Àüü°¡ ´Ù ¼öÁ¤µÇ¹Ç·Î)
-- whereÁ¶°Ç Ãß°¡ÇØ¾ß ÇÑ´Ù.
select * from test1;
rollback;

update test1 set birth='2010-10-10', memo='¼öÁ¤'
where num=1;
commit;
select * from test1;

update test1 set num=111 where num=1;
-- ±âº»Å°´Â nc ¼Ó¼ºÀ» °®Áö ¾Ê´Â´Ù. Áï º¯°æ °¡´É ÇÏ´Ù.
commit;
select * from test1;

update test1 set num=2 where num=111;
-- ¿À·ù(±âº»Å° Áߺ¹)

create table score (
num number(7) primary key
,name varchar2(20) not null
,com number(3)
,excel number(3)
,word number(3)
);

insert into score(num, name)
select num, name from insa where num<=1007;
commit;

select * from score;

update score set com=35, excel=95, word=100 where num=1001;
update score set com=85, excel=80, word=80 where num=1002;
update score set com=45, excel=65, word=55 where num=1003;
update score set com=75, excel=75, word=60 where num=1004;
update score set com=85, excel=85, word=80 where num=1005;
update score set com=85, excel=65, word=85 where num=1006;
update score set com=65, excel=90, word=80 where num=1007;
commit;

select num, name, com, excel, word, com+excel+word as tot,
round((com+excel+word)/3, 1) as ave,
case
when com>=40 and excel>=40 and word>=40 and
(com+excel+word)/3 >= 60 then 'ÇÕ°Ý'
when (com+excel+word)/3 < 60 then 'ºÒÇÕ°Ý'
else '°ú¶ô'
end as pan
from score;

-- ¿©ÀÚÀÇ excel Á¡¼ö¿¡ + 5(insa Å×À̺í ÂüÁ¶)
update score set excel=excel+5
where num in (select num from insa
where substr(ssn, 8, 1) in (2, 4));
commit;

-- ÀÚ·á »èÁ¦
delete [from] Å×À̺í¸í [where Á¶°Ç];

select * from tab;
select * from test1;

-- ¸ðµç ÀÚ·á »èÁ¦(Å×ÀÌºí ±¸Á¶´Â Áö¿öÁöÁö ¾Ê´Â´Ù.)
delete from test1;
commit;
select * from test1;
drop table test1 purge;

-- Á¶°Ç¿¡ ¸¸Á·ÇÏ´Â µ¥ÀÌÅÍ »èÁ¦
select * from test2;
delete from test2 where num=1; -- fromÀº »ý·« °¡´É
commit;
select * from test2;

-- ¸ðµç ÀÚ·á »èÁ¦
truncate table test2;
-- ¸ðµç ÀڷḦ »èÁ¦ÇÏ´Â °æ¿ì deleteº¸´Ù ºü¸§
-- rollback ºÒ°¡(ÀÚµ¿ commit)

select * from test2;
drop table test2 purge

-- score Å×À̺íÀÇ ¿©ÀÚ¸¸ »èÁ¦
select * from score;
delete from score where num in
(select num from insa where substr(ssn, 8, 1) in (2, 4));
select * from score;
commit;

select * from tab;

drop table test2 purge;
drop table test3 purge;
drop table test4 purge;
drop table test5 purge;
drop table test6 purge;

select * from tab;

-- merge(º´ÇÕ)
merge into Å×À̺í_¸í º°Äª
using ´ë»óÅ×À̺í/ºä º°Äª
on Á¶ÀÎÁ¶°Ç
when matched then
update set
Ä÷³_1=°ª_1
,Ä÷³_2=°ª_2
when not matched then
insert (Ä÷³_1, Ä÷³_2, ...)
values(°ª_1, °ª_2, ...);

create table test1(
id number primary key
,name varchar2(20)
,pay number
,sudang number
);

create table test2(
id number primary key
,sudang number
);

insert into test1(id, name, pay, sudang) values
(1, 'a', 100, 10);
insert into test1(id, name, pay, sudang) values
(2, 'b', 150, 20);
insert into test1(id, name, pay, sudang) values
(3, 'c', 130, 0);

insert into test2(id, sudang) values (2, 5);
insert into test2(id, sudang) values (3, 15);
insert into test2(id, sudang) values (4, 10);
commit;

merge into test2 s
using (select id, sudang from test1) t
on (s.id = t.id)
when matched then
update set s.sudang=s.sudang+t.sudang
when not matched then
insert (s.id, s.sudang) values (t.id, t.sudang);

select * from test1;
select * from test2;

merge into test2 s
using test1 t
on (s.id = t.id)
when matched then
update set s.sudang=s.sudang+t.sudang
when not matched then
insert (s.id, s.sudang) values (t.id, t.sudang);

drop table test1 purge;
drop table test2 purge;

 

 

6. Á¦¾àÁ¶°Ç

-- Á¦¾àÁ¶°Ç È®ÀÎ
desc user_constraints; -- user_constraints ±¸Á¶ È®ÀÎ

select * from user_constraints where table_name='insa'; -- ¾î¶² Ä÷³¿¡ Á¦¾àÁ¶°ÇÀÌ ºÎ¿©µÇ¾ú´ÂÁö È®ÀÎ ºÒ°¡
-- p : ±âº»Å°, c : not null µî, u : unique, r : ÂüÁ¶Å° µî

select constraint_name, table_name, constraint_type from user_constraints;

-- ÇöÀç user°¡ °¡Áö°í ÀÖ´Â column¿¡ ÇÒ´çµÈ Á¦¾àÁ¶°Ç¿¡ ´ëÇÑ Á¤º¸
select * from user_cons_columns; -- ¾î¶² Ä÷³¿¡ ±âº»Å°°¡ ºÎ¿©µÇ¾ú´ÂÁö È®ÀÎ °¡´É

-- °³Ã¼ ¹«°á¼º(primary key, unique)
¸±·¹À̼ǿ¡ ÀúÀåµÇ´Â Æ©ÇÃ(tuple)ÀÇ À¯ÀϼºÀ» º¸ÀåÇϱâ À§ÇÑ Á¦¾àÁ¶°Ç

-- ÂüÁ¶ ¹«°á¼º(foreign key)
ÂüÁ¶ ¹«°á¼ºÀº ¸±·¹ÀÌ¼Ç °£ÀÇ µ¥ÀÌÅÍÀÇ ÀÏ°ü¼ºÀ» º¸ÀåÇϱâ À§ÇÑ Á¦¾àÁ¶°ÇÀÌ´Ù

-- Ä÷³ ·¹º§ ±âº»Å° ÁöÁ¤
Ä÷³ Á¤ÀÇ ½Ã ÇØ´ç Ä÷³º°·Î ÁöÁ¤ÇÏ´Â ¹«°á¼º Á¦¾àÁ¶°ÇÀÌ´Ù.

create table Å×À̺í¸í (
Ä÷³¸í µ¥ÀÌÅÍŸÀÔ [constraint Á¦¾àÁ¶°Ç¸í] primary key
);

create table test1 (
id number primary key
,name varchar2(20)
,tel varchar2(25)
);

-- Á¦¾à Á¶°Ç È®ÀÎ
select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

-- ÇöÀç user°¡ °¡Áö°í ÀÖ´Â column¿¡ ÇÒ´çµÈ Á¦¾àÁ¶°Ç¿¡ ´ëÇÑ Á¤º¸
select * from user_cons_columns;

-- Á¦¾à Á¶°Ç À̸§ ºÎ¿©
create table test2 (
id number constraint pk_test2_id primary key
,name varchar2(20)
,tel varchar2(25)
);

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

-- Å×ÀÌºí ·¹º§ ±âº»Å°
Çϳª ÀÌ»óÀÇ Ä÷³À» ÂüÁ¶Çϰųª ÇϳªÀÇ Ä÷³¿¡ µÎ °³ ÀÌ»óÀÇ Á¦¾àÁ¶°ÇÀ» ÁöÁ¤ÇÏ´Â °æ¿ì »ç¿ëÇÑ´Ù.

create table Å×À̺í¸í (
Ä÷³¸í µ¥ÀÌÅÍŸÀÔ
,constraint Á¦¾àÁ¶°Ç¸í primary key(Ä÷³¸í [,Ä÷³¸í])
);

create table test3 (
id number
,name varchar2(20)
,tel varchar2(25)
,constraint pk_test3_id primary key (id)
);

create table test4 (
id number(4)
,code varchar2(4)
,name varchar2(20)
,constraint pk_test4_id primary key (id, code)
);

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

-- ÀÚ·á ÀÔ·Â
insert into test4(id, code, name) values (1, '1111', 'a');
insert into test4(id, code, name) values (1, '2222', 'b');
insert into test4(id, code, name) values (1, '2222', 'c');
-- ¿À·ù : Á¦¾àÁ¶°Ç À§¹Ý
insert into test4(id, code, name) values (1, null, 'c');
-- ¿À·ù : ±âº»Å°´Â nullÀÌ µÉ¼ö ¾ø´Ù.
commit;

select * from test4;

-- ±âº»Å° »èÁ¦
alter table Å×À̺í¸í drop primary key;
alter table Å×À̺í¸í drop constraint Á¦¾àÁ¶°ÇÀ̸§;

alter table test4 drop primary key;

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;
where table_name='TEST4'; -- Á¶°ÇÀº ´ë¼Ò¹®ÀÚ ºñ±³

-- ÀÌ¹Ì Á¸ÀçÇÏ´Â Å×ÀÌºí¿¡ ±âº»Å° Ãß°¡
alter table Å×À̺í¸í add constraint Á¦¾àÁ¶°ÇÀ̸§ primary key(Çʵå[, Çʵå]);

alter table test4 add constraint pk_test4_id primary key(id);
-- ¿À·ù : test4 Å×À̺íÀÇ id¿¡ À¯ÀϼºÀ» À§¹ÝÇÏ´Â µ¥ÀÌÅÍ°¡ ÀÖÀ¸¹Ç·Î

alter table test4 add constraint pk_test4_id primary key(id, code);

-- unique
-- Å×ÀÌºí¿¡¼­ ÁöÁ¤ÇÑ Ä÷³ÀÇ µ¥ÀÌÅÍ°¡ Áߺ¹µÇÁö ¾Ê°í À¯ÀÏÇÏ´Ù.
-- nullÀ» Çã¿ëÇÒ °æ¿ì nullÀº Áߺ¹ÀÌ °¡´ÉÇÏ´Ù.

-- Ä÷³ ·¹º§
create table Å×À̺í¸í (
Ä÷³¸í µ¥ÀÌÅÍŸÀÔ constraint Á¦¾àÁ¶°Ç¸í unique
);

-- Å×ÀÌºí ·¹º§
create table Å×À̺í¸í (
Ä÷³¸í µ¥ÀÌÅÍŸÀÔ
,constraint Á¦¾àÁ¶°Ç¸í unique(Ä÷³¸í)
);

create table test5(
id number not null
,ssn varchar2(14)
-- ,ssn varchar2(14) constraint uk_test5_ssn unique
,tel varchar2(20)
,constraint pk_test5_id primary key (id)
,constraint uk_test5_ssn unique (ssn)
);

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

insert into test5 (id) values (1);
-- ssnÀÌ not nullÀÌ ¾Æ´Ï¹Ç·Î null Çã¿ë
insert into test5 (id) values (2);
-- unique¿¡¼­ nullÀº Áߺ¹ Çã¿ë
insert into test5 (id, ssn) values (3, '1');
insert into test5 (id, ssn) values (4, '1');
-- ¿À·ù : ssnÀÌ Áߺ¹ÀûÀÎ µ¥ÀÌÅÍ À̹ǷÎ
commit;

select * from test5;


-- Ä÷³ ·¹º§
create table Å×À̺í¸í (
Ä÷³¸í µ¥ÀÌÅÍŸÀÔ constraint Á¦¾àÁ¶°Ç¸í check(Á¶°Ç)
);
create table Å×À̺í¸í (
Ä÷³¸í µ¥ÀÌÅÍŸÀÔ check(Á¶°Ç)
);

-- Å×ÀÌºí ·¹º§
create table Å×À̺í¸í (
Ä÷³¸í µ¥ÀÌÅÍŸÀÔ
,constraint Á¦¾àÁ¶°Ç¸í check(Á¶°Ç)
);

-- gender Ä÷³¿¡ ³²ÀÚ¿Í ¿©ÀÚ¸¸ ÀÔ·ÂÀ» Çã¿ë ÇÒ °æ¿ì
gender varchar2(4) check(gender check(gender in ('³²ÀÚ', '¿©ÀÚ'))

-- score Ä÷³¿¡ 0~100 Á¡¸¸ ÀÔ·ÂÀ» Çã¿ë ÇÒ °æ¿ì
score number(3) check (score between 0 and 100)

-- Ä÷³ ·¹º§
create table test2 (
id number
,name varchar2(20)
,score number(3) check (score between 0 and 100)
,constraint pk_test2_id primary key(id)
);

¶Ç´Â
-- Å×ÀÌºí ·¹º§
create table test2 (
id number
,name varchar2(20)
,score number(3)
,constraint pk_test2_id primary key(id)
,constraint ck_test2_score
check (score between 0 and 100)
);

¶Ç´Â
-- Ä÷³ ·¹º§(Á¦¾àÁ¶°Ç¸í ÁöÁ¤)
create table test2 (
id number
,name varchar2(20)
,score number(3) constraint ck_test2_score
check (score between 0 and 100)
,constraint pk_test2_id primary key(id)
);

select constraint_name, table_name,
constraint_type, search_condition
from user_constraints;

-- Á¸ÀçÇÏ´Â Çʵ忡 check Á¦¾à Ãß°¡
alter table Å×À̺í¸í add constraint Á¦¾àÁ¶°Ç¸í check (Á¶°Ç);

alter table test1 add constraint ck_test1_score
check (score between 0 and 100);

-- Á¦¾à Á¶°Ç È®ÀÎ
select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

insert into test1 (id, ssn, name, score)
values (4, '888', 'bbb', 80);
commit;

insert into test1 (id, ssn, name, score)
values (5, '999', 'hhh', 101);
-- ¿À·ù : check Á¦¾à À§¹Ý

-- not null Ãß°¡
-- Å×ÀÌºí¿¡¼­ ÁöÁ¤ÇÑ Ä÷³ÀÇ µ¥ÀÌÅÍ°¡ null(¶Ç´Â '') °ªÀ» °®Áö ¸øÇÑ´Ù. ' ' ó·³ °ø¹éÀÌ ÀÖ´Â °æ¿ì´Â nullÀÌ ¾Æ´Ï´Ù.

-- Å×ÀÌºí »ý¼º½Ã
create table Å×À̺í¸í (
Çʵå¸í ÀÚ·áÇü not null,
);

-- Á¸ÀçÇÏ´Â Å×ÀÌºí¿¡ not null Ãß°¡
alter table test2 modify Ä÷³¸í not null;
alter table test2 modify (Ä÷³¸í ÀÚ·áÇü not null);
alter table Å×À̺í¸í constraint Á¦¾àÁ¶°Ç¸í check(Ä÷³¸í is not null);

alter table test2 modify name not null;
¶Ç´Â
alter table test2 modify (name varchar2(20) not null);

-- default(ÃʱⰪ)
-- insertÇÒ ¶§ °ªÀ» ÀÔ·ÂÇÏÁö ¾ÊÀº °æ¿ì default¿¡¼­ ¼³Á¤ÇÑ °ªÀ¸·Î ÀÔ·Â
-- insert¿Í update ¹®¿¡¼­ ƯÁ¤ °ªÀÌ ¾Æ´Ñ µðÆúÆ®°ªÀ» ÀÔ·ÂÇÒ ¼ö µµ ÀÖ´Ù.

create table Å×À̺í¸í (
Çʵå¸í ÀÚ·áÇü default °ª,
);

create table ex1(
no number(6) not null
,sal number(8, 2)
,nowdate date default sysdate
);

insert into ex1 values(1111, 30000, '');
insert into ex1 values(2222, 40000, default);
insert into ex1 (no, sal) values (2222, 40000);
commit;
select * from ex1;

update ex1 set nowdate=default where no=1111;

select * from ex1;

-- default Á¦°Å
alter table Å×À̺í¸í modify Ä÷³¸í default null;

alter table ex1 modify nowdate default null;

-- È®ÀÎ
select column_name, data_type, data_precision, data_length, nullable, data_default
from user_tab_columns where table_name='ex1';

-- Å×ÀÌºí »èÁ¦
drop table ex1 purge;

-- Á¦¾àÁ¶°Ç Á¦°Å
select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

-- ±âº»Å° Á¦°Å
alter table Å×À̺í¸í drop primary key;
alter table Å×À̺í¸í drop constraint Á¦¾àÁ¶°ÇÀ̸§;

-- not null Á¦°Å
alter table Å×À̺í¸í modify Ä÷¯¸í null;
alter table Å×À̺í¸í drop constraint Á¦¾àÁ¶°ÇÀ̸§;

-- ±âŸ Á¦¾àÁ¶°Ç Á¦°Å
alter table Å×À̺í¸í drop constraint Á¦¾àÁ¶°ÇÀ̸§;

-- ÂüÁ¶(¿Ü·¡, foreign)Å°
-- µÎ Å×À̺íÀÇ µ¥ÀÌÅÍ °£ ¿¬°áÀ» ¼³Á¤ÇÏ°í °­Á¦ Àû¿ëÇÏ´Â µ¥ »ç¿ëµÇ´Â ¿­ÀÌ´Ù. ÇÑ Å×À̺íÀÇ ±âº» Å° °ªÀÌ ÀÖ´Â ¿­À»
-- ´Ù¸¥ Å×ÀÌºí¿¡ Ãß°¡Çϸé Å×ÀÌºí °£ ¿¬°áÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¶§ µÎ ¹ø° Å×ÀÌºí¿¡ Ãß°¡µÇ´Â ¿­ÀÌ ¿Ü·¡ Å°°¡ µÈ´Ù.
-- ºÎ¸ð Å×À̺íÀÌ ¸ÕÀú »ý¼ºµÈ ÈÄ ÀÚ½Ä Å×À̺í(foreign key¸¦ Æ÷ÇÔÇÏ´Â Å×À̺í)ÀÌ »ý¼ºµÇ¾î¾ß ÇÑ´Ù.
-- foreign key´Â ºÎ¸ð Å×À̺íÀÇ primary key, unique¸¸ ÂüÁ¶ÇÒ ¼ö ÀÖ°í, Ä÷³ÀÇ °ª°ú ÀÏÄ¡Çϰųª null °ªÀ̾î¾ß ÇÑ´Ù.
-- ºÎ¸ðÅ×À̺íÀÇ Ä÷³¸í°ú ÀÚ½ÄÅ×À̺íÀÇ Ä÷³¸íÀº ÀÏÄ¡ÇÏÁö ¾Ê¾Æµµ µÇÁö¸¸ ÀÚ·áÇüÀº ÀÏÄ¡ÇØ¾ß ÇÑ´Ù.
-- ÂüÁ¶ ¹«°á¼º Á¦¾àÁ¶°Ç¿¡¼­ ºÎ¸ð Å×À̺íÀÇ ÂüÁ¶ Å° Ä÷³¿¡ Á¸ÀçÇÏÁö ¾Ê´Â °ªÀ» ÀÚ½Ä Å×ÀÌºí¿¡ ÀÔ·ÂÇÏ¸é ¿À·ù°¡ ¹ß»ýÇÑ´Ù.
-- on delete set nullÀº ÀÚ½Ä Å×À̺íÀÌ ÂüÁ¶ÇÏ´Â ºÎ¸ð Å×À̺íÀÇ °ªÀÌ »èÁ¦µÇ¸é ÀÚ½Ä Å×À̺íÀÇ °ªÀ» null °ªÀ¸·Î º¯°æ½ÃŲ´Ù.

create table Å×À̺í¸í (
Ä÷³¸í ÀÚ·áÇü
,constraint Á¦¾àÁ¶°ÇÀ̸§ foreign key(Ä÷³¸í [,Ä÷³¸í])
references ÂüÁ¶ÇÒÅ×À̺í(Ä÷³¸í [,Ä÷³¸í])
[on delete cascade]
);

create table exam1 (
code number primary key
,name varchar2(20)
);

create table exam2 (
id number primary key
,name varchar2(100)
,code number
,constraint fk_exam2_code foreign key(code)
references exam1(code)
);

-- exam2(ÂüÁ¶ Å×ÀÌºí¿¡ ÀÚ·á ¸ÕÀú Ãß°¡)
insert into exam2(id, name, code) values(1, 'È«±æµ¿', 1);
-- ¿À·ù(ÂüÁ¶Å° À§¹Ý, ÂüÁ¶´çÇÏ´Â Å×ÀÌºí¿¡ ¾ø´Â Äڵ带 ÀÔ·ÂÇßÀ¸¹Ç·Î)

-- exam1¿¡ Ãß°¡
insert into exam1(code, name) values(100, '½Å¹ß');
insert into exam1(code, name) values(200, '°¡¹æ');

insert into exam2(id, name, code) values(1, 'È«±æµ¿', 100);
insert into exam2(id, name, code) values(1, 'È«±æµ¿', 100); -- ¿À·ù(±âº»Å° Áߺ¹)
insert into exam2(id, name, code) values(2, 'È«±æµ¿', 100);

update exam1 set code=300 where code=100;
-- ¿À·ù(100¹øÀÌ ÂüÁ¶ ´çÇÏ°í ÀÖÀ¸¹Ç·Î)

update exam1 set code=400 where code=200;
-- ÂüÁ¶´çÇÏ°í ÀÖÁö ¾ÊÀ¸¹Ç·Î ¼öÁ¤ °¡´É

delete from exam1 where code=100;
-- ¿À·ù(exam2 Å×ÀÌºí¿¡¼­ 100À» ÂüÁ¶ÇÏ°í ÀÖÀ¸¹Ç·Î)

delete from exam1 where code=200;
-- »èÁ¦°¡´É(exam2¿¡¼­ ÂüÁ¶ÇÏ°í Àִ°ÍÀÌ ¾øÀ¸¹Ç·Î)

drop table exam1 purge;
-- »èÁ¦ ºÒ°¡(ÂüÁ¶ ´çÇÏ°í ÀÖÀ¸¹Ç·Î)

-- ÂüÁ¶Å° »èÁ¦
alter table Å×À̺í¸í drop constraint ÂüÁ¶Å°Á¦¾àÁ¶°Ç¸í;

alter table exam2 drop constraint fk_exam2_code;

-- Á¸ÀçÇÏ´Â Å×ÀÌºí¿¡ ÂüÁ¶Å° Ãß°¡
alter table Å×À̺í¸í add
constraint Á¦¾àÁ¶°Ç¸í foreign key(Ä÷³¸í[, Ä÷³¸í])
references ÂüÁ¶ÇÒÅ×À̺í¸í(Ä÷³¸í[, Ä÷³¸í]);

alter table exam2 add
constraint fk_exam2_code foreign key(code)
references exam1(code);

drop table exam2 purge;
drop table exam1 purge;

create table exam1 (
code number primary key
,name varchar2(20)
);

create table exam2 (
id number primary key
,name varchar2(100)
,code number
,constraint fk_exam2_code foreign key(code)
references exam1(code)
on delete cascade
);

insert into exam1(code, name) values (100, '½Å¹ß');
insert into exam1(code, name) values (200, '°¡¹æ');
insert into exam1(code, name) values (300, '¿Ê');

insert into exam2(id, name, code)
values(1, 'È«±æµ¿', 100);
insert into exam2(id, name, code)
values(2, 'À̱âÀÚ', 100);
insert into exam2(id, name, code)
values(3, 'È«±æµ¿', 200);
insert into exam2(id, name, code)
values(4, '½É½ÉÇØ', 100);

select * from exam1;
select * from exam2;

-- ÀÚ·á »èÁ¦(exam1À» »èÁ¦Çϸé ÂüÁ¶µÈ exam2 ÀÚ·áµµ »èÁ¦)
-- on delete cascade ¶§¹®¿¡
delete from exam1 where code=100;
select * from exam1;
select * from exam2;

drop table exam1; -- ¿À·ù
drop table exam1 cascade constraints;
-- Å×À̺í°ú Á¦¾àÁ¶°Çµµ »èÁ¦

select * from tab;

select * from exam2; -- ÂüÁ¶ÇÑ Ä÷³ÀÇ µ¥ÀÌÅÍ´Â null·Î º¯°æ

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

drop table exam2 recyclebin;

-- Á¦¾à Á¶°Ç È°¼ºÈ­/ºñÈ°¼ºÈ­
create table exam1 (
id number primary key
,name varchar2(20)
);

select constraint_name, table_name, status,
constraint_type from user_constraints;

-- ±âº»Å° ºñÈ°¼ºÈ­
alter table exam1 disable primary key cascade;

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

-- name¿¡ not null Á¦¾à¼³Á¤
alter table exam1 add constraint exam1_name_nn
check(name is not null);

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

insert into exam1(id, name) values (1, null);
-- ¿À·ù(name : not null)
insert into exam1(id, name) values (1, 'È«±æµ¿');
insert into exam1(id, name) values (1, 'À̼ø½Å');
-- °¡´É : ±âº»Å°°¡ ºñÈ°¼ºÈ­ µÈ »óÅÂÀ̹ǷΠÁߺ¹ Çã¿ë

-- not null ºñÈ°¼ºÈ­
alter table exam1 disable constraint exam1_name_nn cascade;

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

insert into exam1(id, name) values (3, null);
select * from exam1;

-- ±âº»Å°È°¼ºÈ­
alter table exam1 enable constraint sys_c005440;
-- ¿À·ù : À¯ÀϼºÀ» À§¹ÝÇÏ´Â ÀÚ·á°¡ ÀÖÀ¸¹Ç·Î

delete from exam1 where name='À̼ø½Å';

alter table exam1 enable constraint sys_c005440;
-- °¡´É : À¯ÀϼºÀ» À§¹ÝÇÏ´Â ÀÚ·á°¡ ¾øÀ¸¹Ç·Î

select constraint_name, table_name, r_constraint_name, constraint_type, search_condition
from user_constraints;

drop table exam1 purge;

 

 

7. Á¶ÀÎ

-- equi Á¶ÀÎ
-- µÎ °³ ÀÌ»óÀÇ Å×ÀÌºí¿¡ °ü°èµÇ´Â Ä÷³µéÀÇ °ªµéÀÌ ÀÏÄ¡ÇÏ´Â °æ¿ì¿¡ »ç¿ëÇÏ´Â °¡Àå ÀϹÝÀûÀÎ join ÇüÅ·Î
-- where Àý¿¡ '='(µîÈ£)¸¦ »ç¿ëÇÑ´Ù.
-- equi joinÀº ´Ü¼ø join ¶Ç´Â ³»ºÎ joinÀ̶ó°íµµ ÇÑ´Ù.

select * from book;
select * from danga;

-- Çü½Ä-1
select Å×À̺í¸í1.Ä÷³¸í, Å×À̺í¸í2.Ä÷³¸í from Å×À̺í¸í1, Å×À̺í¸í2 [, Å×À̺í¸í3 ]
where Å×À̺í¸í1.Ä÷³¸í1=Å×À̺í¸í2.Ä÷³¸í1 [and Á¶°Ç];

select b.b_id, title, c_name, price
from book b, danga d where b.b_id = d.b_id;

-- Çü½Ä-2
select Å×À̺í¸í1.Ä÷³¸í, Å×À̺í¸í2.Ä÷³¸í from Å×À̺í¸í1
join Å×À̺í¸í2 using (Ä÷³¸í1)
join Å×À̺í¸í3 using (Ä÷³¸í2);

select b_id, title, c_name, price
from book join danga using(b_id);

-- Çü½Ä-3
select Å×À̺í¸í1.Ä÷³¸í, Å×À̺í¸í2.Ä÷³_¸í from Å×À̺í¸í1
join Å×À̺í¸í2 on Å×À̺í¸í1.Ä÷³¸í1=Å×À̺í¸í2.Ä÷³¸í1;

select b.b_id, title, c_name, price
from book b join danga d
on b.b_id = d.b_id;

-- Çü½Ä-4
select Å×À̺í¸í1.Ä÷³¸í, Å×À̺í¸í2.Ä÷³¸í from Å×À̺í¸í1
natural join Å×À̺í¸í2;

-- ¸¸¾à matchµÇ´Â Ä÷³ÀÌ ¿©·¯ °³ ÀÏ °æ¿ì, natural join¿¡¼­´Â ƯÁ¤ Ä÷³À» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¹Ç·Î
-- matchµÇ´Â Ä÷³ ¸ðµÎ¸¦ ¿¬°á Á¶°ÇÀ¸·Î »ç¿ëÇÑ´Ù.
-- natural joinÀÇ °æ¿ì matchµÇ´Â Ä÷³ÀÌ ¿©·¯ °³ÀÏ °æ¿ì ¸ðµÎ joinÁ¶°ÇÀ¸·Î »ç¿ëÇϹǷÎ,
-- ½ÇÇà¼Óµµ³ª performance¸é¿¡¼­ ÁÁÁö ¾Ê´Ù.

select b_id, title, c_name, price
from book natural join danga;

-- ÆǸŠ½ÇÀû
-- Ã¥ÄÚµå, Ã¥¸í, ¼ö·®, ´Ü°¡, °í°´¸í, ±Ý¾×
select b.b_id, title, p_su, price, g_name, p_su*price ±Ý¾×
from book b join danga d on b.b_id=d.b_id
join panmai p on b.b_id=p.b_id
join gogaek g on p.g_id=g.g_id;

select b.b_id, title, p_su, price, g_name, p_su*price ±Ý¾×
from book b ,danga d, panmai p, gogaek g
where b.b_id=d.b_id
and b.b_id=p.b_id
and p.g_id=g.g_id;

-- Ã¥ÄÚµå, Ã¥¸í, ÀüüÆǸűǼö(ÆÇ¸ÅµÈ Ã¥ÀÇ)
select b.b_id, title, p_su from book b join panmai p
on b.b_id=p.b_id;
select b.b_id, title, sum(p_su) 񀬔 from book b join panmai p
on b.b_id=p.b_id
group by b.b_id, title;

-- Ã¥ÄÚµå, Ã¥¸í, ´Ü°¡, ÀüüÆǸűǼö, ±Ý¾×(ÆÇ¸ÅµÈ Ã¥ÀÇ)
select b.b_id, title, price, sum(p_su) 񀬔,
sum(p_su*price) ±Ý¾×
from book b join panmai p on b.b_id=p.b_id
join danga d on b.b_id=d.b_id
group by b.b_id, title, price;

-- ÆÇ¸ÅµÈ Àüü±Ç¼ö°¡ 10±Ç ÀÌ»óÀΠ常Ãâ·Â
-- (Ã¥ÄÚµå, Ã¥¸í, ¼ö·®)
select b.b_id, title, sum(p_su) 񀬔 from
book b join panmai p on b.b_id=p.b_id
group by b.b_id, title
having sum(p_su)>=10;

-- ÆÇ¸ÅµÈ Ã¥ÄÚµå¿Í Ã¥À̸§ Ãâ·Â(Áߺ¹ ¹èÁ¦)
select distinct b.b_id, title from
book b join panmai p on b.b_id=p.b_id;

-- °¡Àå ÆǸŠ±Ç¼ö°¡ ¸¹Àº Ã¥ÄÚµå¿Í Ã¥À̸§
select b_id, title from (
select b_id, title, 񀬔, rank() over(order by 񀬔 desc) r from (
select b.b_id, title, sum(p_su) 񀬔 from book b
join panmai p on b.b_id=p.b_id
group by b.b_id, title
)
) where r=1;

select b_id, title from (
select b.b_id, title, sum(p_su) 񀬔,
rank() over(order by sum(p_su) desc) r
from book b
join panmai p on b.b_id=p.b_id
group by b.b_id, title
) where r=1;

-- °í°´º° ÆǸűݾ×(°í°´ÄÚµå, °í°´¸í, ÆǸűݾ×)
select g.g_id, g_name, (p_su*price) ±Ý¾×
from panmai p, danga d, gogaek g
where p.b_id=d.b_id and g.g_id = p.g_id;

select g.g_id, g_name, sum(p_su*price) ±Ý¾×
from panmai p, danga d, gogaek g
where p.b_id=d.b_id and g.g_id = p.g_id
group by g.g_id, g_name;

-- outer join(¿ÜºÎ Á¶ÀÎ)
-- join Á¶°ÇÀ» ¸¸Á·ÇÏÁö ¾Ê´Â ÇàÀ» º¸±â À§ÇÑ Ãß°¡ÀûÀÎ joinÀÇ ÇüÅÂÀÌ´Ù.
-- ÀϹÝÀûÀÎ joinÀ¸·Î ¾òÀ» ¼ö ¾ø´Â µ¥ÀÌÅ͸¦ ±¸ÇÏ°í ½ÍÀ» ¶§ »ç¿ëÇϸç, '+' ¿¬»êÀÚ¸¦ »ç¿ëÇÑ´Ù.
-- outer joinÀº Á¶ÀÎ Á¶°ÇÀÇ ¾çÃø Ä÷³ °ª Áß¿¡¼­ Çϳª°¡ nullÀÎ °æ¿ì¿¡µµ Á¶ÀÎ °á°ú¸¦
-- Ãâ·ÂÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ´Ù.
-- equi joinÀº Á¶ÀÎ Á¶°Ç¿¡¼­ ¾çÃø Ä÷³ °ª Áß¿¡¼­ Çϳª¶óµµ nullÀ̸é '=' ºñ±³ °á°ú°¡
-- °ÅÁþÀÌ µÇ¾î Á¶ÀÎ °á°ú·Î Ãâ·ÂµÇÁö ¾Ê´Â´Ù.

select b.b_id, title, p_su from book b
join panmai p on b.b_id=p.b_id; --equi Á¶ÀÎ

-- left outer join
-- ¿ÞÂÊ Å×À̺íÀÇ µ¥ÀÌÅÍ´Â ¸ðµÎ Ãâ·ÂÇÏ°í ¿À¸¥ÂÊ Å×À̺íÀº Á¶°Ç¿¡ ¸Â´Â µ¥ÀÌÅ͸¸ Ãâ·Â

select Å×À̺í1¸í.Ä÷³¸í, Å×À̺í2¸í.Ä÷³¸í from Å×À̺í1¸í, Å×À̺í2¸í
where Å×À̺í1¸í.Ä÷³¸í=Å×À̺í2¸í.Ä÷³¸í(+);

¶Ç´Â

select Å×À̺í1¸í.Ä÷³¸í, Å×À̺í2¸í.Ä÷³¸í from Å×À̺í1¸í
left outer join Å×À̺í2¸í
on Å×À̺í1¸í.Ä÷³¸í=Å×À̺í2¸í.Ä÷³¸í;

select b.b_id, title, p_su from book b
left outer join panmai p on b.b_id=p.b_id;

select b.b_id, title, p_su from book b, panmai p
where b.b_id=p.b_id(+);

-- right outer join
¿À¸¥ÂÊ Å×À̺íÀÇ µ¥ÀÌÅÍ´Â ¸ðµÎ Ãâ·ÂÇÏ°í ¿ÞÂÊ Å×À̺íÀº Á¶°Ç¿¡ ¸Â´Â µ¥ÀÌÅ͸¸ Ãâ·Â

select Å×À̺í1¸í.Ä÷³¸í, Å×À̺í2¸í.Ä÷³¸í from Å×À̺í1¸í, Å×À̺í2¸í
where Å×À̺í1¸í.Ä÷³¸í(+)=Å×À̺í2¸í.Ä÷³¸í;

¶Ç´Â

select Å×À̺í1¸í.Ä÷³¸í, Å×À̺í2¸í.Ä÷³¸í from Å×À̺í1¸í
right outer join Å×À̺í2¸í
on Å×À̺í1¸í.Ä÷³¸í=Å×À̺í2¸í.Ä÷³¸í;

select b.b_id, title, p_su from panmai p
right outer join book b on b.b_id=p.b_id;

select b.b_id, title, p_su from panmai p, book b
where p.b_id(+) = b.b_id;
-- b.b_id(+) = p.b_id; -- ¾ÈµÊ

select b.b_id, title, price, p_su, p_su*price amt from book b
left outer join danga d on b.b_id=d.b_id
left outer join panmai p on b.b_id=p.b_id;

select b.b_id, title, price, nvl(p_su, 0) p_su,
nvl(p_su, 0)*price amt from book b
left outer join danga d on b.b_id=d.b_id
left outer join panmai p on b.b_id=p.b_id;

-- Çѱǵµ ÆǸŵÇÁö ¾ÊÀº Ã¥
select b.b_id, title, p_su from book b
left outer join panmai p on b.b_id=p.b_id;
select b.b_id, title from book b
left outer join panmai p on b.b_id=p.b_id
where p_su is null;

-- full outer join(left¿Í right outer join °áÇÕÇüÅÂ)

select Å×À̺í1¸í.Ä÷³¸í, Å×À̺í2¸í.Ä÷³¸í
from Å×À̺í1¸í full outer join Å×À̺í2¸í on Å×À̺í1¸í.Ä÷³¸í=Å×À̺í2¸í.Ä÷³¸í;

select g.g_id, g_name, b_id from panmai p
full outer join gogaek g on p.g_id=g.g_id;

select a.num, b.num, a.name,b.name,
a.buseo, b.buseo,a.city, b.city from
(
select num, name, buseo, city from insa
where city='ÀÎõ'
) a
full outer join
(
select num, name, buseo, city from insa
where buseo='°³¹ßºÎ'
) b
on a.num=b.num;

-- non-equi Á¶ÀÎ
-- µÎÅ×ÀÌºí¿¡ °ü·Ã¼ºÀÖ´Â Ä÷³ÀÌ ¾ø°í ÇÑÅ×À̺í Ä÷³ÀÇ °ªÀÌ ´Ù¸¥ Å×À̺í Ä÷³¿¡
-- Æ÷ÇÔµÈ °æ¿ì »ç¿ë(= ´ë½Å >, between »ç¿ë)

select b.b_id, title, price from book b
join danga d on b.b_id = d.b_id;

select b.b_id, title, price from book b
join danga d on b.b_id between d.b_id and d.b_id;

-- cross join
»óÈ£ Á¶ÀÎÀº Á¶Àο¡ Æ÷ÇÔµÈ Å×À̺íÀÇ Ä«Æ¼¼Ç °ö(cartisian product)À» ¹ÝȯÇÑ´Ù.

select b.b_id, title, price from book b
cross join danga d;

-- self join
ÀÚ½ÅÀÇ Å×À̺íÀ» alias¸¦ »ç¿ëÇÏ¿© ¸¶Ä¡ µÎ °³ÀÇ Å×À̺íó·³ joinÇÏ´Â ÇüÅÂÀÌ´Ù.

select a1.b_id, a1.name, a2.name from au_book a1
join au_book a2 on a1.b_id = a2.b_id
order by a1.b_id

select a1.b_id, a1.name, a2.name from au_book a1
join au_book a2 on a1.b_id = a2.b_id and a1.name > a2.name
order by a1.b_id

 

 

8. ¼­ºêÄõ¸®

-- ¼­ºêÄõ¸®(subquery)
-- ÇÏÀ§ Äõ¸®´Â ´ÜÀÏ °ªÀ» ¹ÝȯÇϸç select, insert, update, delete ¹®À̳ª ´Ù¸¥
-- ÇÏÀ§ Äõ¸® ³»ºÎ¿¡ ÁßøµÈ select Äõ¸® ÀÌ´Ù.
-- ÇÏÀ§ Äõ¸®´Â ½ÄÀÌ Çã¿ëµÇ´Â ¸ðµç À§Ä¡¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ´Üµ¶À¸·Î ½ÇÇà °¡´É ÇÏ´Ù.

--¼­Á¡ÄÚµå ¼­Á¡¸í ÆǸűݾ×ÇÕ ºñÀ²
select g.g_id, g_name, sum(p_su*price) amt,
round(sum(p_su*price) / (
select sum(p_su*price) from panmai p1, danga d1
where p1.b_id=d1.b_id
) * 100, 1) ºñÀ²
from gogaek g join panmai p on g.g_id=p.g_id
join danga d on p.b_id=d.b_id
group by g.g_id, g_name;

-- 1. ³âµµº° ÆǸÅÇöȲ Ãâ·Â
-- (³âµµ ÆǸűݾ×)
select to_char(p_date, 'yyyy') ³âµµ, sum(p_su*price) amt
from danga d join panmai p on p.b_id=d.b_id
group by to_char(p_date, 'yyyy');

-- 2. ³âµµº° ¼­Á¡ ÆǸÅÇöȲ Ãâ·Â
-- (³âµµ ¼­Á¡ÄÚµå ¼­Á¡¸í ÆǸűݾ×)
select to_char(p_date, 'yyyy') ³âµµ, g.g_id, g_name,
sum(p_su*price) amt
from gogaek g join panmai p on g.g_id=p.g_id
join danga d on p.b_id=d.b_id
group by to_char(p_date, 'yyyy'),
g.g_id, g_name
order by ³âµµ;

-- 3. ³âµµº° ¼­Á¡ ÆǸÅÇöȲÀÌ °¡Àå ¸¹Àº ÀÚ·á Ãâ·Â
-- (³âµµ ¼­Á¡ÄÚµå ¼­Á¡¸í ÆǸűݾ×)
select ³âµµ, g_id, g_name, amt from (
select ³âµµ, g_id, g_name, amt,
rank() over(partition by ³âµµ order by amt desc) r
from (
select to_char(p_date, 'yyyy') ³âµµ, g.g_id, g_name,
sum(p_su*price) amt
from gogaek g join panmai p on g.g_id=p.g_id
join danga d on p.b_id=d.b_id
group by to_char(p_date, 'yyyy'),
g.g_id, g_name
order by ³âµµ
)
) where r=1;

-- with
-- ¼­ºêÄõ¸®¸¦ ¹Ì¸® ºí·°À¸·Î Á¤ÇÑÈÄ »ç¿ë(¿©·¯¹ø »ç¿ëµÉ °æ¿ì °£°á)

with year_panmai as (
select to_char(p_date, 'yyyy') ³âµµ, g.g_id, g_name,
sum(p_su*price) amt
from gogaek g join panmai p on g.g_id=p.g_id
join danga d on p.b_id=d.b_id
group by to_char(p_date, 'yyyy'),
g.g_id, g_name
order by ³âµµ
)
select ³âµµ, g_id, g_name, amt from (
select ³âµµ, g_id, g_name, amt,
rank() over(partition by ³âµµ order by amt desc) r
from year_panmai
) where r=1;

-- ÆÇ¸ÅµÈ Ã¥ÄÚµå, Ã¥À̸§
select distinct book.b_id, title from book join panmai
on book.b_id = panmai.b_id;
select b_id, title from book
where b_id in (select distinct b_id from panmai);
-- any : ºñ±³ÇÔ¼öÁßÇϳª°¡ÂüÀ̸éÂü
select b_id, title from book
where b_id = any (select distinct b_id from panmai);
-- some : ºñ±³ÇÔ¼öÁßÀϺΰ¡ÂüÀ̸éÂü
select b_id, title from book
where b_id = some (select distinct b_id from panmai);

-- ÆǸŵÇÁö ¾ÊÀº Ã¥ÄÚµå, Ã¥À̸§
select b_id, title from book
where not b_id in (select b_id from panmai);
select book.b_id, title from book left outer join panmai
on book.b_id = panmai.b_id
where p_su is null;

-- exists : Çϳª¶óµµ Á¸ÀçÇϸé Âü

select title from book where
exists (select * from panmai where p_su > 10 and substr(b_id, 1, 1) = 'a');

-- ¾Æ·¡¿Í µ¿ÀÏ

select title from book ;


-- »ó°ü ÇÏÀ§ ºÎÁúÀÇ
-- »óÈ£ ¿¬°ü ¼­ºê Äõ¸®(correlated sub query)´Â sub query°¡ main queryÀÇ °ªÀ» ÀÌ¿ëÇÏ°í,
-- ±×·¸°Ô ±¸ÇØÁø sub queryÀÇ °ªÀ» ´Ù½Ã main query°¡ ´Ù½Ã ÀÌ¿ëÇÏ°Ô µÈ´Ù.

-- ¼­Á¡º°·Î 1ȸ ÁÖ¹® ¼ö·®ÀÌ °¡Àå ¸¹Àº Ã¥(¼­Á¡¸í, Ã¥À̸§, ¼ö·®)
-- rank() over() ÇÔ¼ö·Îµµ ±¸ÇÒ ¼ö ÀÖÀ½.
select g1.g_id, g1.g_name, title, p_su
from book b1 join panmai p1 on b1.b_id=p1.b_id
join gogaek g1 on p1.g_id=g1.g_id
where p_su =
(select max(p_su) from panmai p2
where p2.g_id = p1.g_id)
order by g1.g_id;

-- ±âº»±ÞÀ» ±âÁØÀ¸·Î ¼øÀ§ ºÎ¿©
select name, basicpay,
(select count(i2.basicpay) + 1 from insa i2
where i2.basicpay > i1.basicpay) ¼øÀ§
from insa i1;

 

 

9. ºä ½ÃÄö½º

-- VIEW
ºä¶õ ÀÌ¹Ì Æ¯Á¤ÇÑ µ¥ÀÌÅͺ£À̽º ³»¿¡ Á¸ÀçÇÏ´Â Çϳª ÀÌ»óÀÇ Å×ÀÌºí¿¡¼­
»ç¿ëÀÚ°¡ ¾ò±â ¿øÇÏ´Â µ¥ÀÌÅ͵鸸À» Á¤È®ÇÏ°í ÆíÇÏ°Ô °¡Á®¿À±â À§ÇÏ¿©
»çÀü¿¡ ¿øÇÏ´Â Ä÷³µé ¸¸À» ¸ð¾Æ¼­ ¸¸µé¾î ³õÀº °¡»óÀÇ Å×À̺í·Î
Æí¸®¼º ¹× º¸¾È¿¡ ¸ñÀûÀÌ ÀÖ´Ù.

CREATE [OR REPLACE] VIEW ºäÀ̸§
AS subquery

-- »ç¿ëÀÚ ±ÇÇÑ È®ÀÎ
-- »ç¿ëÀÚ °èÁ¤
SQL>SELECT * FROM USER_SYS_PRIVS;

-- »ç¿ëÀÚ ±ÇÇÑ ºÎ¿©(RESOURCE·ÑÀÇ ±ÇÇÑ ¸¸À¸·Î´Â ºä¸¦ »ý¼ºÇÒ ¼ö ¾ø´Ù.)
-- SYS °èÁ¤
-- ¼­¹ö¿¡ ÀÖ´Â ¸ðµç ½Ã½ºÅÛ ±ÇÇÑ Ãâ·Â
CMD>sqlplus sys/¾ÏÈ£ as sysdba
SQL>SELECT * FROM system_privilege_map;

-- »ç¿ëÀÚ¿¡°Ô ºä¸¦ ¸¸µé ¼ö ÀÖ´Â ±ÇÇÑ ºÎ¿©
SQL>GRANT CREATE VIEW TO »ç¿ëÀÚ;

-- »ç¿ëÀÚ °èÁ¤
-- ±ÇÇÑ È®ÀÎ
SQL>CONN »ç¿ëÀÚ/¾ÏÈ£
SQL>SELECT * FROM USER_SYS_PRIVS;

-- Ã¥ÄÚµå, Ã¥À̸§, ´Ü°¡, °í°´ÄÚµå, °í°´¸í, ÆǸų¯Â¥, ÆǸżö·®
SELECT b.b_id, title, price, g.g_id, g_name, p_date, p_su
FROM BOOK b
JOIN PANMAI p ON b.b_id=p.b_id
JOIN danga d ON b.b_id = d.b_id
JOIN gogaek g ON g.g_id = p.g_id;

-- ºä ÀÛ¼º
CREATE VIEW viewPan
AS
SELECT b.b_id, title, price, g.g_id, g_name, p_date, p_su
FROM BOOK b
JOIN PANMAI p ON b.b_id=p.b_id
JOIN danga d ON b.b_id = d.b_id
JOIN gogaek g ON g.g_id = p.g_id;

SELECT * FROM viewPan;

-- ºä ¼öÁ¤
CREATE OR REPLACE VIEW viewPan
AS
SELECT b.b_id, title, price, g.g_id, g_name, p_date, p_su
, p_su*price amt
FROM BOOK b
JOIN PANMAI p ON b.b_id=p.b_id
JOIN danga d ON b.b_id = d.b_id
JOIN gogaek g ON g.g_id = p.g_id;

SELECT * FROM viewPan;

CREATE OR REPLACE VIEW yearPan
AS
SELECT TO_CHAR(p_date, 'YYYY') ³âµµ, g.g_id, g_name,
SUM(p_su*price) amt
FROM GOGAEK g JOIN PANMAI p ON g.g_id=p.g_id
JOIN DANGA d ON p.b_id=d.b_id
GROUP BY TO_CHAR(p_date, 'YYYY'),
g.g_id, g_name
ORDER BY ³âµµ DESC;

SELECT * FROM yearPan;

 

-- ºä Á¤º¸ È®ÀÎ
DESC viewPAN;
SELECT view_name, text FROM user_views;

-- ºä »èÁ¦
DROP VIEW yearPan;
SELECT view_name, text FROM user_views;

-- ºä¸¦ ÀÌ¿ëÇÑ ÀÚ·á ÀÔ·Â ¹× ¼öÁ¤, »èÁ¦
CREATE TABLE TestA(
a_id NUMBER(4) PRIMARY KEY NOT NULL
,name VARCHAR2(20) NOT NULL
,city VARCHAR2(20) NOT NULL
,memo VARCHAR2(100)
);

CREATE TABLE TestB(
b_id NUMBER(4) PRIMARY KEY NOT NULL
,a_id NUMBER(4) CONSTRAINT FK_TestB_id
REFERENCES TestA(a_id)
ON DELETE CASCADE
,score NUMBER(3)
);

INSERT INTO TestA(a_id, name, city, memo)
VALUES (1, 'È«±æµ¿', '¼­¿ï', NULL);
INSERT INTO TestA(a_id, name, city, memo)
VALUES (2, 'À̼ø½Å', 'ºÎ»ê', NULL);
INSERT INTO TestA(a_id, name, city, memo)
VALUES (3, '¾î·Á¿ö', '¼­¿ï', 'C/C++');
INSERT INTO TestA(a_id, name, city, memo)
VALUES (4, 'À̱âÀÚ', 'ÀÎõ', NULL);

INSERT INTO TestB(b_id, a_id, score) VALUES (1, 1, 80);
INSERT INTO TestB(b_id, a_id, score) VALUES (2, 2, 70);
INSERT INTO TestB(b_id, a_id, score) VALUES (3, 3, 90);
INSERT INTO TestB(b_id, a_id, score) VALUES (4, 4, 60);

COMMIT;

SELECT * FROM TestA;
SELECT * FROM TestB;

-- testView1 ºä
-- a_id, b_id, name, memo, score
CREATE OR REPLACE VIEW testView1
AS
SELECT a_id, b_id, name, memo, score
FROM TestA a JOIN TestB b USING(a_id);

-- testView2 ºä
-- a_id, name, city
CREATE OR REPLACE VIEW testView2
AS
SELECT a_id, name, city FROM TestA;

-- ÀÚ·á ÀÔ·Â
INSERT INTO testView1 (a_id, b_id, name, memo, score)
VALUES (5, 5, 'ÀԷµɱî', NULL, 90);
-- ¿À·ù : ÇÑ ¹ø¿¡ µÎ °³ÀÇ Å×ÀÌºí¿¡ ÀÔ·ÂÇÒ ¼ö ¾ø´Ù.
-- (´Ü¼ø ºä°¡ ¾Æ´Ñ °æ¿ì Ãß°¡ ºÒ°¡)

INSERT INTO testView2 (a_id, name) VALUES (5, 'ÀԷµɱî');
-- ¿À·ù : TestA Å×À̺íÀÇ city´Â NULL µÉ ¼ö ¾ø´Ù.

INSERT INTO testView2 (a_id, name, city)
VALUES (5, 'ÀԷµɱî', '±Ã±Ý');
-- TestA Å×ÀÌºí¿¡ ÀÔ·Â

SELECT * FROM TestA

UPDATE testView1 SET name='Àç¹Õ´Ù',
score=100 WHERE a_id = 1;
-- ¿À·ù : ÇÑ ¹ø¿¡ µÎ °³ÀÇ Å×À̺íÀ» ¼öÁ¤ÇÒ ¼ö ¾ø´Ù.
-- (´Ü¼ø ºä°¡ ¾Æ´Ñ °æ¿ì ¼öÁ¤ ºÒ°¡)

-- ´Ü¼ø ºä´Â ¼öÁ¤ °¡´É ÇÏ´Ù.
UPDATE testView2 SET name='Àç¹Õ´Ù' WHERE a_id = 1;
SELECT * FROM TestA;

-- WITH CHECK OPTION
ºä¸¦ ÅëÇØ ÂüÁ¶ ¹«°á¼º(reference integrity)À» °Ë»çÇÒ ¼ö ÀÖ°í DB ·¹º§¿¡¼­ÀÇ constraint Àû¿ëÀÌ °¡´ÉÇÏ´Ù. Áï, WITH CHECK OPTION ÀýÀ» »ç¿ëÇÑ ºä¿¡¼­ INSERT¿Í UPDATE¸¦ ¼öÇàÇÏ¸é ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.

-- testView2 ºä ¸¦ city °¡ '¼­¿ï'ÀÎ ÀڷḸ °®´Â ºä·Î ¼öÁ¤
CREATE OR REPLACE VIEW testView2
AS
SELECT a_id, name, city FROM TestA WHERE city = '¼­¿ï';

SELECT * FROM testView2;

-- testView2 ºä¸¦ ÀÌ¿ëÇÏ¿© a_id°¡ 1ÀÎ ÀÚ·áÀÇ city ¸¦ 'ºÎ»ê'À¸·Î ¼öÁ¤
UPDATE testView2 SET city='ºÎ»ê' WHERE a_id = 1; -- ¼öÁ¤ µÊ.

-- testView2 ºä ¿¡ WITH CHECK OPTIONÀ» ºÎ¿©ÇÏ¿© ¼öÁ¤ÇÑ´Ù.
CREATE OR REPLACE VIEW testView2
AS
SELECT a_id, name, city FROM TestA WHERE city = '¼­¿ï'
WITH CHECK OPTION CONSTRAINT ch_testView2;

-- testView2 ºä¸¦ ÀÌ¿ëÇÏ¿© a_id°¡ 3ÀÎ ÀÚ·áÀÇ city ¸¦ 'ºÎ»ê'À¸·Î ¼öÁ¤ÇÑ´Ù.
UPDATE testView2 SET city='ºÎ»ê' WHERE a_id = 3; -- ¿À·ù

- testView1, testView2 ºä ¹× Å×ÀÌºí »èÁ¦
DROP VIEW testView1;
DROP VIEW testView2;
DROP TABLE testB PURGE;
DROP TABLE testA PURGE;

-- ¸ÓÆ®¸®¾ó¶óÀÌÁî ºä(MATERIALIZED VIEW)
/*
½ÇÁ¦ µ¥ÀÌÅÍ(Åë°èÁ¤º¸)¸¦ ÀÚ½ÅÀÌ °¡Áö°í ÀÖÀ¸¸ç, master Å×À̺íÀ̶ó°í ºÒ¸®´Â ±âÁØÀÌ µÇ´Â Å×ÀÌºí¿¡ INSERT, UPDATE, DELETE°¡ ¹ß»ýÇÏ¸é »õ·Î¿î µ¥ÀÌÅ͸¦ MATERIALIZED ºä¿¡ ¹Ý¿µ

- SUM, MIN, MAX, AVG, COUNT µî ±×·ìÇÔ¼ö¸¦ ¹Ì¸® °è»êÇØ ³õÀ» ¶§ »ç¿ë
- USER_SEGMENTS ¿¡¼­ È®ÀÎ °¡´É

-- ¿É¼Ç
- BUILD IMMEDIATE : MView »ý¼º°ú µ¿½Ã¿¡ µ¥ÀÌÅ͵鵵 »ý¼º
- BUILD DEFERRED : MView¸¦ »ý¼ºÀº ÇÏÁö¸¸, ±× ¾ÈÀÇ µ¥ÀÌÅÍ´Â ÃßÈÄ¿¡ »ý¼º
- REFRESH : MViewÀÇ µ¥ÀÌÅ͸¦ »õ·Î °íÄ¡´Â ½Ã±â¿Í ¹æ¹ýÀ» °áÁ¤

1) ½Ã±â

1) ON COMMIT - ±âÃÊ Å×ÀÌºí¿¡ Commit ÀÌ ÀϾ ¶§ Refresh °¡ ÀϾ´Â ¹æ¾ÈÀ̸ç,
ÀÌ´Â 1 °³ÀÇ Å×ÀÌºí¿¡ COUNT(*), SUM(*)°ú °°Àº ÁýÇÕ ÇÔ¼ö¸¦ »ç¿ëÇϰųª,
MView¿¡ Á¶Àθ¸ÀÌ ÀÖ´Â °æ¿ì, Group By Àý¿¡ »ç¿ëµÈ Ä÷³¿¡ ´ëÇØ COUNT(col) ÇÔ¼ö°¡ ±â¼úµÈ °æ¿ì¸¸ »ç¿ëÀÌ °¡´É

2) ON DEMAND - »ç¿ëÀÚ°¡ DBMS_MVIEW ÆÐÅ°Áö (REFRESH, REFRESH_ALL_MVIEWS,
REFRESH_DEPENDENT) ¸¦ ½ÇÇà ÇÑ °æ¿ì Refresh µÇ´Â °æ¿ì

2) ¹æ¹ý

1) COMPLETE - MViewÀÇ Á¤ÀÇ¿¡ µû¶ó MViewÀÇ µ¥ÀÌÅÍ Àüü°¡ Refresh µÇ´Â °ÍÀ¸·Î
ATOMIC_REFRESH=TRUE¿Í COMPLETEÀ¸·Î ¼³Á¤ÇÑ °æ¿ì

2) FAST - »õ·Î¿î µ¥ÀÌÅÍ°¡ »ðÀ﵃ ¶§¸¶´Ù Á¡ÁøÀûÀ¸·Î Refresh µÇ´Â ¹æ¾È

3) FORCE - ÀÌ °æ¿ì ¸ÕÀú Fast Refresh°¡ °¡´ÉÇÑÁö Á¡°Ë ÈÄ °¡´ÉÇϸé À̸¦ Àû¿ëÇÏ°í,
¾Æ´Ï¸é Complete Refresh¸¦ Àû¿ë(µðÆúÆ®)

4) NEVER - Refresh¸¦ ¾²Áö ¾Ê´Â´Ù.

- ENABLE QUERY REWRITE : MView »ý¼º½Ã ÀÌ ¿É¼ÇÀ» ÁÖ¾î¾ß¸¸ ÀÓÀÇÀÇ SQL¹®ÀåÀ» 󸮽Ã
Query Rewrite¸¦ °í·ÁÇÑ´Ù. ÀÌ´Â Äõ¸® ÀçÀÛ¼ºÀÇ ±â´ÉÀÌ´Ù. ÀÌÀüÀÇ Äõ¸®¸¦ ¼öÁ¤ ÇÏÁö ¾Ê°í ÀçÀÛ¼ºÀÌ °¡´É ÇÑ ±â´É
*/

-- »ç¿ëÀÚ¿¡°Ô ±ÇÇÑ ¼³Á¤
-- QUERY REWRITE : Äõ¸® ÀçÀÛ¼º ±ÇÇÑ
-- SYS »ç¿ëÀÚ(sqlplus sys/¾ÏÈ£ as sysdba)
GRANT QUERY REWRITE TO »ç¿ëÀÚ;
GRANT CREATE MATERIALIZED VIEW TO »ç¿ëÀÚ;

-- »ç¿ëÀÚ
SELECT * FROM USER_SYS_PRIVS;

SELECT * FROM USER_SEGMENTS;

CREATE MATERIALIZED VIEW panmview
BUILD IMMEDIATE
REFRESH
COMPLETE
ON DEMAND
ENABLE QUERY REWRITE
AS
SELECT TO_CHAR(p_date, 'YYYY') ³âµµ,
TO_CHAR(p_date, 'MM') ¿ù,
SUM(p_su*price) ±Ý¾×
FROM PANMAI JOIN DANGA d ON p.b_id=d.b_id
GROUP BY TO_CHAR(p_date, 'YYYY'),
TO_CHAR(p_date, 'MM') ;

SELECT * FROM TAB;
SELECT * FROM panmview;

INSERT INTO panmai (id, g_id, b_id, p_date, p_su)
VALUES (11, 6, 'b-1', '2010-05-05', 20);
COMMIT;

SELECT * FROM panmview;
-- Ãß°¡µÈ ÀÚ·á°¡ ¹Ý¿µµÇÁö ¾ÊÀ½(ON DEMAND ¶§¹®¿¡)

-- ¼öµ¿À¸·Î Àç½ÇÇà
EXECUTE dbms_mview.refresh('panmview');
SELECT * FROM panmview;

DROP MATERIALIZED VIEW panmview;

DELETE FROM PANMAI WHERE id=11;
COMMIT;

CREATE MATERIALIZED VIEW panmview
BUILD IMMEDIATE
REFRESH
COMPLETE
ON COMMIT
ENABLE QUERY REWRITE
AS
SELECT TO_CHAR(p_date, 'YYYY') ³âµµ,
TO_CHAR(p_date, 'MM') ¿ù,
SUM(p_su*price) ±Ý¾×
FROM PANMAI JOIN DANGA d ON p.b_id=d.b_id
GROUP BY TO_CHAR(p_date, 'YYYY'),
TO_CHAR(p_date, 'MM')
;

SELECT * FROM panmview;

INSERT INTO panmai (id, g_id, b_id, p_date, p_su)
VALUES (11, 6, 'b-1', '2010-05-05', 20);
COMMIT;

SELECT * FROM panmview;
-- ¹Ù·Î ¹Ý¿µ(ON COMMIT)

DELETE FROM PANMAI WHERE id=11;
COMMIT;

DROP MATERIALIZED VIEW panmview;

-- SEQUENCE
ƯÁ¤ Ä÷³¿¡ ´ëÇØ À¯ÀÏÇÑ °ªÀ» ¿¬¼ÓÀûÀ¸·Î »ý¼º½ÃÅ°±â À§ÇØ »ç¿ëÇÏ´Â ¹æ¹ýÀ¸·Î
¿À¶óŬ¿¡¼­ Á¦°øÇÏ´Â °ÍÀÌ sequence¶ó´Â °´Ã¼ÀÌ´Ù.

-- »ç¿ëÀÚ¿¡°Ô ½ÃÄö½º¸¦ ¸¸µé ¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø´Â °æ¿ì ±ÇÇÑ ºÎ¿©(RESOURCE ·Ñ¿¡
±âº»ÀûÀ¸·Î ½ÃÄö½º¸¦ ¸¸µé¼öÀÖ´Â ±ÇÇÑ ÀÖÀ½)
-- SYS °èÁ¤
CMD>sqlplus sys/¾ÏÈ£ as sysdba
SQL>GRANT CREATE SEQUENCE TO »ç¿ëÀÚ;

-- ºÎ¿©µÈ ±ÇÇÑ È®ÀÎ
SQL>CONN »ç¿ëÀÚ/¾ÏÈ£
SQL>SELECT * FROM USER_SYS_PRIVS;

-- 100ºÎÅÍ 1¾¿ Áõ°¡ÇÏ´Â ½ÃÄö½º ÀÛ¼º
CREATE SEQUENCE seq1 INCREMENT BY 1
START WITH 100
MINVALUE 1
MAXVALUE 10000;

-- 3ºÎÅÍ 999 ±îÁö 3¾¿ Áõ°¡ÇÏ´Â ½ÃÄö½º(¹Ì¸® 5°³¾¿ ij½Ã)
CREATE SEQUENCE seq2 INCREMENT BY 3
MINVALUE 3
MAXVALUE 999
CACHE 5;

-- ÃÖ´ë°ª¿¡ µµ´ÞÇϸé óÀ½ºÎÅÍ ´Ù½Ã ½ÃÀÛ
CREATE SEQUENCE seq3 INCREMENT BY 3
START WITH 9
MINVALUE 3
MAXVALUE 12
CYCLE
CACHE 2;

-- 1ºÎÅÍ Áõ°¡ÇÏ´Â °¡Àå °£´ÜÇÑ ½ÃÄö½º
CREATE SEQUENCE seq4;

-- ½ÃÄö½º ¸ñ·Ï È®ÀÎ
SELECT * FROM seq;
SELECT * FROM user_sequences;

-- ½ÃÄö½º È°¿ë
CREATE TABLE seqtest (
num1 NUMBER
,num2 NUMBER
,num3 NUMBER
,num4 NUMBER
);

INSERT INTO seqtest VALUES (seq1.NEXTVAL, SEQ2.NEXTVAL,
SEQ3.NEXTVAL, seq4.nextval);
SELECT * FROM seqtest;

DELETE FROM seqtest;

INSERT INTO seqtest VALUES (seq1.NEXTVAL, SEQ2.NEXTVAL,
SEQ3.NEXTVAL, seq4.nextval);
SELECT * FROM seqtest;

INSERT INTO seqtest VALUES (seq1.currVAL, SEQ2.currVAL,
SEQ3.currVAL, seq4.currval);
SELECT * FROM seqtest;

-- ½ÃÄö½º »èÁ¦
DROP SEQUENCE ½ÃÄö½º¸í;

DROP SEQUENCE seq1;
DROP SEQUENCE seq2;
DROP SEQUENCE seq3;
DROP SEQUENCE seq4;

SELECT * FROM seq;
DROP TABLE seqtest PURGE;

 

 

10. °èÃþÀû ÁúÀÇ

-- °èÃþÀû ÁúÀÇ
¿À¶óŬ¿¡¼­´Â °èÃþÀûÀÎ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ Ä÷³À¸·ÎºÎÅÍ µ¥ÀÌÅ͸¦ °Ë»öÇÏ¿©
°èÃþÀûÀ¸·Î Ãâ·ÂÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.
SELECT ¹®¿¡¼­ START WITH¿Í CONNECT BY ÀýÀ» ÀÌ¿ëÇÏ¿© µ¥ÀÌÅ͸¦ °èÃþÀûÀÎ ÇüÅ·ΠÃâ·ÂÇÒ ¼ö ÀÖ´Ù.

-- START WITH : Àý °èÃþÀûÀÎ Ãâ·Â Çü½ÄÀ» Ç¥ÇöÇϱâ À§ÇÑ ÃÖ»óÀ§ Çà

-- CONNECT BY : Àý °èÃþ°ü°èÀÇ µ¥ÀÌÅ͸¦ ÁöÁ¤ÇÏ´Â Ä÷³

-- PRIOR ¿¬»êÀÚ : CONNECT BY´Â PRIOR ¿¬»êÀÚ¿Í ÇÔ²² »ç¿ëÇÏ¿© ºÎ¸ð ÇàÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
PRIOR ¿¬»êÀÚÀÇ À§Ä¡¿¡ µû¶ó top-down ¹æ½ÄÀÎÁö bottom up ¹æ½ÄÀÎÁö¸¦ °áÁ¤ÇÑ´Ù.
PRIOR ¿¬»êÀÚ°¡ ºÙÀº ÂÊÀÇ Ä÷³ÀÌ ºÎ¸ð ÇàÀÌ µÈ´Ù.

-- WHERE Àý : where ÀýÀÌ JOINÀ» Æ÷ÇÔÇÏ°í ÀÖÀ» °æ¿ì CONNECT BY ÀýÀ» ó¸®Çϱâ Àü¿¡ JOIN Á¶°ÇºÎ¸¦
Àû¿ëÇÏ¿© ó¸®ÇÏ°í, JOINÀ» Æ÷ÇÔÇÏ°í ÀÖÁö ¾ÊÀ» °æ¿ì CONNECT BY ÀýÀ» ó¸®ÇÑ ÈÄ¿¡ WHERE ÀýÀÇ Á¶°ÇÀ» ó¸®ÇÑ´Ù.

-- LEVEL : °èÃþÀû ÁúÀǹ®¿¡¼­ °Ë»öµÈ °á°ú¿¡ ´ëÇØ °èÃþº°·Î ·¹º§ ¹øÈ£ Ç¥½Ã, ·çÆ® ³ëµå´Â 1,
ÇÏÀ§ ·¹º§·Î °¥¼ö·Ï 1¾¿ Áõ°¡

-- ¿¹Á¦

CREATE TABLE exam(
num NUMBER PRIMARY KEY
,dname VARCHAR2(50) NOT NULL
,loc VARCHAR2(50)
,parent NUMBER
);

INSERT INTO exam VALUES(10, '°ø°ú´ëÇÐ', NULL, NULL);
INSERT INTO exam VALUES(100, 'Á¤º¸¹Ìµð¾îÇкÎ', NULL, 10);
INSERT INTO exam VALUES(200, '¸ÞÄ«Æ®·Î´Ð½ºÇкÎ', NULL, 10);
INSERT INTO exam VALUES(101, 'ÄÄÇ»ÅÍ°øÇаú', '1È£°ü', 100);
INSERT INTO exam VALUES(102, '¸ÖƼ¹Ìµð¾îÇаú', '2È£°ü', 100);
INSERT INTO exam VALUES(201, 'ÀüÀÚ°øÇаú', '3È£°ü', 200);
INSERT INTO exam VALUES(202, '±â°è°øÇаú', '4È£°ü', 200);

SELECT num, dname, loc, LEVEL, parent FROM exam
START WITH num=10 -- Ãâ·Â ½ÃÀÛÇÒ ÃÖ»óÀ§Çà
CONNECT BY PRIOR num=parent; -- °èÃþ°ü°èÁöÁ¤
-- PRIOR ¿¬»êÀÚ°¡ ºÙÀºÂÊÀÌ ºÎ¸ð

SELECT LPAD(' ', (LEVEL-1)*4) || dname AS Á¶Á÷µµ FROM exam
START WITH num=10
CONNECT BY PRIOR num=parent;

SELECT num, dname, loc, LEVEL, parent FROM exam
START WITH num=102
CONNECT BY PRIOR parent=num;

-- Á¤º¸¹Ìµð¾î Çкθ¸ Ãâ·Â ÇÏÁö ¾ÊÀ½
SELECT num, dname, loc, LEVEL, parent FROM exam
WHERE num != 100
START WITH num=10
CONNECT BY PRIOR num=parent;

-- Á¤º¸¹Ìµð¾îÇкΠ¹× Á¤º¸¹Ìµð¾îÇкÎÀÇ °úµµ Ãâ·ÂÇÏÁö ¾ÊÀ½
SELECT num, dname, loc, LEVEL, parent FROM exam
START WITH num=10
CONNECT BY PRIOR num=parent AND num != 100;

 

 

11. Æ®·£Àè¼Ç

-- Æ®·£Àè¼Ç
Æ®·£Àè¼Ç(transaction)Àº ÇϳªÀÇ ³í¸®Àû ÀÛ¾÷ ´ÜÀ§·Î ¼öÇàµÇ´Â ÀÏ·ÃÀÇ ÀÛ¾÷À¸·Î Å×ÀÌºí¿¡
INSERT, UPDATE, DELETE ¹®À¸·Î Áö½ÃÇÏ°í, COMMITÀ» ½ÇÇàÇÏ¸é ¸ðµç º¯°æ »çÇ×ÀÌ ¿µ±¸È÷ µ¥ÀÌÅͺ£À̽º¿¡
ÀúÀåµÇ¸ç, ROLLBACKÀº ¸¶Áö¸· COMMITÀ̳ª ROLLBACK ÀÌÈÄÀÇ º¯°æ »çÇ×À» Ãë¼ÒÇÏ°í µ¥ÀÌÅͺ£À̽º¸¦
¿ø·¡ÀÇ »óÅ·ΠµÇµ¹·Á ÁØ´Ù. Áï, Æ®·£Àè¼Ç¿¡¼­ µ¥ÀÌÅͺ£À̽º¸¦ º¯°æÇ϶ó´Â ¸í·ÉÀÌ COMMITÀÌ°í,
COMMIT Àü±îÁö º¯°æµÈ °ÍÀ» µÇµ¹¸®´Â °ÍÀÌ ROLLBACKÀÌ´Ù.

-- COMMIT
-- ROLLBACK
-- SAVEPOINT
-- transaction ³»ÀÇ ÇÑ ½ÃÁ¡À» Ç¥½ÃÇÑ´Ù.
-- ROLLBACK TO SAVEPOINT ¸í·É¾î·Î Ç¥½Ã ÁöÁ¡±îÁö ROLLBACKÇϴµ¥ ¾²ÀδÙ.

-- ¿¹Á¦

CREATE TABLE test AS SELECT num, name, city FROM insa;

SELECT * FROM test;

INSERT INTO test VALUES(2000, 'test', '¼­¿ï');
SELECT * FROM test;

SAVEPOINT a;

UPDATE test SET city='¿ï»ê' WHERE num=1001;
SELECT * FROM test;

ROLLBACK TO a; -- UPDATE´Â ·Ñ¹éµÇ°í INSERT´Â ·Ñ¹éµÇÁö ¾ÊÀ½

SELECT * FROM test;

UPDATE test SET city='ºÎ»ê' WHERE num=1001;
SELECT * FROM test;

ROLLBACK;

SELECT * FROM test;
INSERT INTO test VALUES(2000, 'Å×½ºÆ®', 'ÀÎõ');
COMMIT;

SELECT * FROM test;
ROLLBACK; -- COMMIT°¡ µÈ »óÅ¿¡¼­´Â ·Ñ¹éµÇÁö ¾ÊÀ½

SELECT * FROM test;

DROP TABLE test PURGE;



-- SET TRANSACTION : ´Ù¾çÇÑ Æ®·£Àè¼Ç ¼Ó¼ºÀ» ÁöÁ¤
-- Ä¿³¼¼Ç 1
CREATE TABLE test (
id NUMBER(3) PRIMARY KEY,
value VARCHAR2(30),
score NUMBER(3)
);

INSERT INTO test VALUES (1, 'a', 80);
INSERT INTO test VALUES (2, 'b', 80);
SELECT * FROM test; -- È®ÀÎ

-- Ä¿³¼¼Ç 2
SELECT * FROM test;
-- Ãß°¡µÈ °á°ú¸¦ È®ÀÎ ÇÒ ¼ö ¾ø´Ù.

-- Ä¿³¼¼Ç 1
COMMIT;

-- Ä¿³¼¼Ç 2
SELECT * FROM test;

-- Ä¿³¼¼Ç 1
SET TRANSACTION READ ONLY; -- INSERT, UPDATE, DELETE°¡ µÇÁö ¾Ê°í SELECT¸¸ °¡´É
DELETE FROM test; -- ¿À·ù

ROLLBACK;
SET TRANSACTION READ WRITE;



-- SET AUTOCOMMIT
SQL>show autocommit -- »óÅÂÈ®ÀÎ
autocommit OFF
SQL>set autocommit on
SQL>show autocommit
autocommit IMMEDIATE
SQL>set autocommit 3
SQL>show autocommit
¸ðµç 3 DML¹®¿¡ AUTOCOMMIT ON
SQL>set autocommit off


-- LOCK : ÇöÀçÀÇ Æ®·£Àè¼ÇÀÌ »ç¿ëÇÏ°í ÀÖ´Â µ¥ÀÌÅÍ¿¡ ´ëÇØ ´Ù¸¥ Æ®·£Àè¼ÇÀÇ °Ë»öÀ̳ª º¯°æÀ» ¸·¾Æ ¿©·¯
Æ®·£Àè¼ÇÀÌ µ¿½Ã¿¡ °°Àº µ¥ÀÌÅ͸¦ »ç¿ë ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °Í

-- Ä¿³¼¼Ç 1
SELECT * FROM test;
UPDATE test SET score = 200
WHERE id = 1;
SET TIME ON;

-- Ä¿³¼¼Ç 2
SELECT * FROM test
FOR UPDATE WAIT 5;
-- 5ÃÊ ÈÄ ¿À·ù¹ß»ý ¸Þ½ÃÁö

-- Ä¿³¼¼Ç 1
ROLLBACK;

LOCK TABLE test IN EXCLUSIVE MODE;
-- EXCLUSIVE : Àá±ä Å×ÀÌºí¿¡ Äõ¸®¸¸ Çã¿ë
-- NOWAIT : ´Ù¸¥ »ç¿ëÀÚ°¡ ÀÌ¹Ì lock ÇÏ¿´´õ¶óµµ ¹Ù·Î Àڽſ¡°Ô Á¦¾î±ÇÀÌ ³Ñ°Ü ¿Àµµ·Ï ÇÔ.

DELETE FROM test;

-- Ä¿³¼¼Ç 2
UPDATE test SET score = 100 WHERE id = 1;
-- Ä¿³Ø¼Ç 1ÀÌ COMMIT ¶Ç´Â ROLLBACK ÇÒ ¶§ ±îÁö ¸ØÃç ÀÖÀ½.

-- Ä¿³¼¼Ç 1
ROLLBACK;

 

 

12. PL/SQL


-- PLSQL
PL/SQL(Procedural Language extensions to SQL)Àº ÇÁ·Î±×·¡¹Ö¾ð¾îÀÇ Æ¯¼ºÀ» °¡Áö´Â SQLÀÇ È®ÀåÀ̸ç,
µ¥ÀÌÅÍ Á¶ÀÛ°ú ÁúÀÇ ¹®ÀåÀº PL/SQLÀÇ ÀýÂ÷Àû ÄÚµå ¾È¿¡ Æ÷ÇԵȴÙ. ¶ÇÇÑ PL/SQLÀ» »ç¿ëÇϸé
SQL·Î ÇÒ ¼ö ¾ø´Â ÀýÂ÷Àû ÀÛ¾÷ÀÌ °¡´ÉÇÏ´Ù. ¿©±â¿¡¼­ ÀýÂ÷ÀûÀ̶õ ¾î¶² °ÍÀÌ ¾î¶»°Ô ¿Ï·áµÇ´ÂÁö ±× ¹æ¹ýÀ»
Á¤È®ÇÏ°Ô Äڵ忡 ±â¼ú ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

-- SQLGATEµµ È®ÀÎ °¡´É

-- SQLPLUS¿¡¼­ DBMS_OUTPUT.PUT_LINE('°ª'); À¸·Î È­¸é¿¡ Ãâ·Â
SET SERVEROUTPUT ON

-- DBMS_OUTPUT.PUT_LINE('°ª');
Ãâ·Â ÈÄ ¶óÀÎ ³Ñ±è

-- DBMS_OUTPUT.PUT('°ª');
Ãâ·Â ÈÄ ¶óÀÎ ³Ñ±âÁö ¾ÊÀ½

-- DBMS_OUTPUT.NEW_LINE();
¶óÀÎ ³Ñ±è

-- ´ëÀÔ¹® Çü½Ä
º¯¼ö := °ª;


-- %TYPE
-- Å×À̺í Ä÷³ ÀÚ·áÇüÀ» ÂüÁ¶ÇÏ´Â ÀÚ·áÇü

DECLARE
vname insa.name%TYPE;
vpay NUMBER;
BEGIN
SELECT name, basicpay+sudang INTO vname, vpay
FROM INSA WHERE num=1001;
DBMS_OUTPUT.PUT_LINE('À̸§ : ' || vname);
DBMS_OUTPUT.PUT_LINE('±Þ¿© : ' || vpay);
END;
/ -- ½ÇÇà


-- %ROWTYPE
-- Å×ÀÌºí ½ºÅ°¸¶¿Í °°Àº ±¸Á¶Ã¼º¯¼ö

DECLARE
vdata insa%ROWTYPE;
BEGIN
SELECT name, basicpay INTO vdata.name, vdata.basicpay
FROM INSA WHERE num=1001;
DBMS_OUTPUT.PUT_LINE('À̸§ : ' || vdata.name);
DBMS_OUTPUT.PUT_LINE('±Þ¿© : ' || vdata.basicpay);
END;
/


-- »ç¿ëÀÚ Á¤ÀÇ ±¸Á¶Ã¼ º¯¼ö

DECLARE
TYPE myData IS RECORD
(
vname insa.name%TYPE
,vpay NUMBER
);
vdata myData;
BEGIN
SELECT name, basicpay+sudang INTO
vdata.vname, vdata.vpay
FROM INSA WHERE num=1001;
DBMS_OUTPUT.PUT_LINE('À̸§ : ' || vdata.vname);
DBMS_OUTPUT.PUT_LINE('±Þ¿© : ' || vdata.vpay);
END;
/


-- IF Á¶°Ç THEN ~ ELSIF Á¶°Ç THEN ~ ELSE ~ END IF ¹®
TRUE¸é THEN°ú ELSE»çÀÌÀÇ ¹®ÀåÀ» ¼öÇàÇÏ°í FALSE³ª NULLÀ̸é ELSE¿Í END IF»çÀÌÀÇ ¹®ÀåÀ» ¼öÇàÇÑ´Ù.

DECLARE
vpay NUMBER;
vname insa.name%TYPE;
vtax NUMBER;
BEGIN
SELECT name, basicpay+sudang INTO vname, vpay
FROM INSA WHERE num=1001;
IF vpay >= 2500000 THEN
vtax := vpay * 0.03;
ELSIF vpay >= 2000000 THEN
vtax := vpay * 0.02;
ELSE
vtax := 0;
END IF;
DBMS_OUTPUT.PUT_LINE('À̸§ : ' || vname);
DBMS_OUTPUT.PUT_LINE('±Þ¿© : ' || vpay);
DBMS_OUTPUT.PUT_LINE('¼¼±Ý : ' || vtax);
END;
/

-- WHILE Á¶°Ç LOOP ~ END LOOP
Á¦¾î Á¶°ÇÀÌ TRUEÀÎ µ¿¾È¸¸ ÀÏ·ÃÀÇ ¹®ÀåÀ» ¹Ýº¹Çϱâ À§ÇØ WHILE LOOP¹®ÀåÀ» »ç¿ëÇÑ´Ù.

-- EXIT [WHEN condition];
EXIT ¹®À» ÀÌ¿ëÇϸé END LOOP ¹® ´ÙÀ½ ¹®À¸·Î Á¦¾î¸¦ º¸³»±â ¶§¹®¿¡ ·çÇÁ¸¦ Á¾·áÇÒ ¼ö ÀÖ´Ù.

-- LOOP ~ END LOOP
¹Ýº¹¹®À¸·Î "EXIT WHEN Á¶°Ç"ÀÌ ½ÇÇ๮ ¾Õ°ú µÚ ¾î´À °÷À̳ª À§Ä¡ÇÒ ¼ö ÀÖÀ¸¸ç "EXIT WHEN Á¶°Ç"¿¡¼­ Á¶°ÇÀ» ¸¸Á·ÇÏ¸é ºüÁ® ³ª°£´Ù.

DECLARE
n NUMBER := 0;
s NUMBER := 0;
BEGIN
WHILE n < 100 LOOP
n := n + 1;
s := s + n;
END LOOP;
DBMS_OUTPUT.PUT_LINE('°á°ú : ' || s);
END;
/

------------------------------------------------------------------
DECLARE
n NUMBER := 1;
s NUMBER := 0;
BEGIN
WHILE n <= 100 LOOP
s := s + n;
n := n + 2;
END LOOP;
DBMS_OUTPUT.PUT_LINE('°á°ú : ' || s);
END;

------------------------------------------------------------------
DECLARE
n NUMBER := 0;
s NUMBER := 0;
BEGIN
WHILE n < 100 LOOP
n := n + 1;
IF MOD(n, 2) = 1 THEN
s := s + n;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('°á°ú : ' || s);
END;
/

------------------------------------------------------------------
DECLARE
n NUMBER := 1;
m NUMBER := 0;
g NUMBER;
BEGIN
WHILE n < 9 LOOP
n := n + 1;
DBMS_OUTPUT.PUT_LINE(n || '´Ü');
m := 0;
WHILE m < 9 LOOP
m := m + 1;
g := n * m;
DBMS_OUTPUT.PUT_LINE(n || '*' || m || '='|| g);
END LOOP;
END LOOP;
END;
/

------------------------------------------------------------------
DECLARE
n NUMBER := 0;
s NUMBER := 0;
BEGIN
LOOP
n := n + 1;
s := s + n;
EXIT WHEN n=100;
END LOOP;
DBMS_OUTPUT.PUT_LINE('°á°ú : ' || s);
END;
/


-- FOR ~ LOOP
FOR ¿¡¼­ »ç¿ëµÇ´Â º¯¼ö´Â ÀÚµ¿ ¼±¾ðµÇ¹Ç·Î µû·Î ¼±¾ðÇÏÁö ¾Ê¾Æµµ µÊ
"½ÃÀÛ¼ö"¿¡¼­ 1¾¿ Áõ°¡ÇÏ¿© "³¡³¯ ¼ö"°¡ µÉ ¶§±îÁö ¹Ýº¹ ¼öÇàÇϸç, FOR¹®¿¡ »ç¿ëµÇ´Â º¯¼ö´Â ÀÚµ¿ ¼±¾ðµÇ¹Ç·Î µû·Î ¼±¾ðÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

-- FOR¹®
FOR counter IN [REVERSE] ½ÃÀÛ¼ö .. ³¡³¾¼ö LOOP
½ÇÇ๮;
END LOOP;

REVERSE : "³¡³¯¼ö"¿¡¼­ "½ÃÀÛ¼ö"±îÁö ¹Ýº¹ÇÔÀ¸·Î½á À妽º°¡ 1¾¿ °¨¼ÒµÇµµ·Ï ÇÑ´Ù.

------------------------------------------------------------------
DECLARE
s NUMBER := 0;
BEGIN
FOR n IN 1 .. 100 LOOP
s := s + n;
END LOOP;
DBMS_OUTPUT.PUT_LINE('°á°ú : ' || s);
END;
/

------------------------------------------------------------------
DECLARE
BEGIN
FOR n IN REVERSE 10 .. 1 LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(n));
END LOOP;
END; -- °á°ú ¾È³ª¿È
/

------------------------------------------------------------------
DECLARE
BEGIN
FOR n IN REVERSE 1 .. 10 LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(n));
END LOOP;
END;


-- FOR ¸¦ ÀÌ¿ëÇÑ SELECT ¹®
FOR ·¹ÄÚµåÀ̸§ IN SELECT¹® LOOP
½ÇÇ๮;
END LOOP;

------------------------------------------------------------------
DECLARE
BEGIN
FOR rec IN (SELECT name, buseo, basicpay FROM insa) LOOP
DBMS_OUTPUT.PUT_LINE(rec.name || ' ' ||
rec.buseo || ' ' || rec.basicpay);
END LOOP;
END;

13-1. ÇÁ·Î½ÃÁ®

-- ÇÁ·Î½ÃÁ®(Stored Procedure)
PL/SQL¿¡¼­ °¡Àå ´ëÇ¥ÀûÀÎ ±¸Á¶ÀÎ ½ºÅä¾îµå ÇÁ·Î½ÃÀú´Â °³¹ßÀÚ°¡ ÀÚÁÖ ½ÇÇàÇØ¾ß ÇÏ´Â ¾÷¹« È帧À» ¹Ì¸® ÀÛ¼ºÇÏ¿© µ¥ÀÌÅͺ£À̽º ³»¿¡ ÀúÀåÇØ µÎ¾ú´Ù°¡ ÇÊ¿äÇÒ ¶§¸¶´Ù È£ÃâÇÏ¿© ½ÇÇàÇÒ ¼ö ÀÖ´Ù.


-- Å×À̺íÀÇ ÇÁ·Î½ÃÀú, ÇÔ¼ö, ÆÐÅ°Áö µî »óÈ£ ÂüÁ¶µÇ´Â °ü°è È®ÀÎ
SELECT * FROM user_dependencies;

-- »ç¿ëÀÚ¿¡°Ô ÇÁ·Î½ÃÁ®¸¦ ¸¸µé ¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø´Â °æ¿ì ±ÇÇÑ ¼³Á¤
(RESOURCE ·Ñ¿¡ ±âº»ÀûÀ¸·Î ÇÁ·Î½ÃÁ®¸¦ ¸¸µé¼öÀÖ´Â ±ÇÇÑ ÀÖÀ½)
-- SYS °èÁ¤
-- »ç¿ëÀÚ¿¡°Ô ÇÁ·Î½ÃÀú¸¦ ¸¸µé ¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾ø´Â °æ¿ì ºÎ¿©
GRANT CREATE PROCEDURE TO »ç¿ëÀÚ¸í;

-- »ç¿ëÀÚ °èÁ¤
-- ºÎ¿©µÈ ±ÇÇÑ È®ÀÎ
SELECT * FROM USER_SYS_PRIVS;

-- Çü½Ä
CREATE [OR REPLACE] PROCEDURE ÇÁ·Î½ÃÀúÀ̸§
[(
¸Å°³º¯¼ö IN ÀÚ·áÇü, // ÀԷ¿ë, Àμö¿¡¼­´Â ÀÚ·á Çü¿¡¼­´Â Å©±â¸¦ ÁöÁ¤ÇÏ¸é ¾È µÈ´Ù.
¸Å°³º¯¼ö OUT ÀÚ·áÇü, // Ãâ·Â¿ë
¸Å°³º¯¼ö IN OUT ÀÚ·áÇü // ÀÔ/Ãâ·Â¿ë
)]
IS
[º¯¼öÀÇ ¼±¾ð]
BEGIN
.............
[EXCEPTION]
.............
END;



IN ÆĶó¹ÌÅÍ : È£ÃâÀÚ¿¡ ÀÇÇØ ÇÁ·Î½ÃÀú·Î Àü´ÞµÇ´Â ÆĶó¹ÌÅÍÀ̸ç,
'Àбâ' Àü¿ëÀÇ °ªÀ¸·Î ÇÁ·Î½ÃÀú´Â ÀÌ ÆĶó¹ÌÅÍÀÇ °ªÀ» º¯°æÇÒ ¼ö ¾ø´Ù.(µðÆúÆ® ¸ðµå)

OUT ÆĶó¹ÌÅÍ : ÇÁ·Î½ÃÀú¿¡¼­ °ªÀ» º¯°æÇÒ ¼ö ÀÖ°í, '¾²±â' ±â´ÉÀ¸·Î ÇÁ·Î½ÃÀú°¡ Á¤º¸¸¦ È£ÃâÀÚ¿¡°Ô µ¹·ÁÁÖ´Â ±â´ÉÀÌ´Ù.
OUT ÆĶó¹ÌÅÍ´Â µðÆúÆ®°ªÀ» ÁöÁ¤ÇÒ ¼ö ¾ø´Ù.

IN OUT ÆĶó¹ÌÅÍ : ÇÁ·Î½ÃÀú°¡ ÀÐ°í ¾²´Â ÀÛ¾÷À» µ¿½Ã¿¡ ÇÒ ¼ö ÀÖ´Â ÆĶó¹ÌÅÍÀÌ´Ù.

-- PROCEDURE
SELECT * FROM TAB;
DROP TABLE EXAM PURGE;
DROP TABLE EXAM1 PURGE;

SELECT * FROM seq;

-- ½ÃÄö½º ÀÛ¼º
CREATE SEQUENCE seq1 START WITH 1;
SELECT * FROM seq;

-- Å×À̺í ÀÛ¼º
CREATE TABLE EXAM1 (
id NUMBER PRIMARY KEY
,name VARCHAR2(20)
,score NUMBER
);

-- Å×ÀÌºí¿¡ ÀڷḦ Ãß°¡ÇÏ´Â ÇÁ·Î½ÃÀú ÀÛ¼º
CREATE OR REPLACE PROCEDURE proInsExam1
IS
BEGIN
INSERT INTO EXAM1(id, name, score) VALUES (SEQ1.NEXTVAL, 'È«±æµ¿', 80);
COMMIT;
END;


-- ¼Ò½ºÈ®ÀÎ
SELECT TEXT FROM user_source;


-- ÇÁ·Î½ÃÀú ¸ñ·Ï È®ÀÎ
SELECT object_name FROM user_procedures;


-- ÇÁ·Î½ÃÀú ½ÇÇà
EXECUTE proInsExam1;
SELECT * FROM EXAM1;

-- ÇÁ·Î½ÃÀú ¼öÁ¤
-- IN
CREATE OR REPLACE PROCEDURE proInsExam1
(
pname IN exam1.name%TYPE
,pscore IN exam1.score%TYPE
)
IS
BEGIN
INSERT INTO EXAM1(id, name, score) VALUES (
SEQ1.NEXTVAL, pname, pscore);
COMMIT;
END;

EXECUTE proInsExam1('À̼ø½Å', 100);
SELECT * FROM EXAM1;

------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE proViewExam1
(
pid IN NUMBER
)
IS
vname exam1.name%TYPE;
vscore exam1.score%TYPE;
BEGIN
SELECT name, SCORE INTO vname, vscore FROM EXAM1 WHERE id = pid;
DBMS_OUTPUT.PUT_LINE(vname || ' ' || vscore);
DBMS_OUTPUT.PUT_LINE('À¯Àú : ' || USER);
END;
EXECUTE proViewExam1(1);

 

------------------------------------------------------------------
-- 1. exam1 Å×ÀÌºí¿¡ pan varchar2(10) Çʵå Ãß°¡
ALTER TABLE exam1 ADD (pan varchar2(10));

-- 2. Á¡¼ö°¡ ÀԷµǸé pan Çʵ忡 ´ÙÀ½ÀÇ Á¶°Ç¿¡ µû¶ó °ªÀ» ´ëÀÔÇϵµ·Ï
-- proInsExam1 ÇÁ·Î½ÃÀú ¼öÁ¤
-- 80Á¡ÀÌ»ó ¿ì¼ö, 60Á¡ÀÌ»ó º¸Åë, 60¹Ì¸¸ ºÒÇÕ°Ý
-- ½ÇÇà ¿¹
-- EXECUTE proInsExam1('À̱âÀÚ', 80);
-- SELECT * FROM exam1
-- 1 À̱âÀÚ 80 ¿ì¼ö

CREATE OR REPLACE PROCEDURE proInsExam1
(
pname IN exam1.NAME%TYPE
,pscore IN exam1.SCORE%TYPE
)
IS
vpan VARCHAR2(10);
BEGIN
IF pscore >= 80 THEN
vpan := '¿ì¼ö';
ELSIF pscore >= 60 THEN
vpan := 'º¸Åë';
ELSE
vpan := 'ºÒÇÕ°Ý';
END IF;

INSERT INTO exam1 (id, name, score, pan) VALUES
(SEQ1.NEXTVAL, pname, pscore, vpan);
COMMIT;
END;

EXECUTE proInsExam1('ÀÌÀÌÀÌ', 80);
SELECT * FROM EXAM1;

 

-- 3. ÀÚ·á ¼öÁ¤ ÇÁ·Î½ÃÀú ÀÛ¼º
-- ½ÇÇ࿹
-- EXECUTE proUpdateExam1('À̱âÀÚ', 60, 1);
-- SELECT * FROM exam1
-- 1 À̱âÀÚ 60 º¸Åë

CREATE OR REPLACE PROCEDURE proUpdateExam1
(
pname IN exam1.NAME%TYPE
,pscore IN exam1.SCORE%TYPE
,pid IN exam1.id%TYPE
)
IS
vpan VARCHAR2(10);
BEGIN
IF pscore >= 80 THEN
vpan := '¿ì¼ö';
ELSIF pscore >= 60 THEN
vpan := 'º¸Åë';
ELSE
vpan := 'ºÒÇÕ°Ý';
END IF;

UPDATE EXAM1 SET name=pname, score=pscore
, pan=vpan WHERE id=pid;
COMMIT;
END;

EXECUTE proUpdateExam1('À̱âÀÚ', 60, 1);
SELECT * FROM EXAM1;

-- »èÁ¦ ÇÁ·Î½ÃÀú ÀÛ¼º
CREATE OR REPLACE PROCEDURE proDeleteExam1
(
pid IN exam1.id%TYPE
)
IS
BEGIN
DELETE FROM EXAM1 WHERE id=pid;
COMMIT;
END;

EXECUTE proDeleteExam1(1);
SELECT * FROM EXAM1;


-- ÇÁ·Î½ÃÀú ½Ç½À

------------------------------------------------------------------
-- Å×À̺íÀÌ Á¸ÀçÇϸé Å×ÀÌºí »èÁ¦
DROP TABLE mem2 PURGE;
DROP TABLE mem1 PURGE;

------------------------------------------------------------------
CREATE TABLE mem1 (
id VARCHAR2(20) NOT NULL PRIMARY KEY
,pwd VARCHAR2(20) NOT NULL
,name VARCHAR2(20) NOT NULL
);

CREATE TABLE mem2 (
id VARCHAR2(20) NOT NULL PRIMARY KEY
,birth DATE
,tel VARCHAR2(20)
,CONSTRAINT fk_mem2_id FOREIGN KEY(id)
REFERENCES mem1(id)
);

------------------------------------------------------------------
SELECT constraint_name, table_name,
r_constraint_name, constraint_type
FROM user_constraints;


-- Ãâ·Â¿ë View ÀÛ¼º
CREATE OR REPLACE VIEW memberView
AS
SELECT mem1.id, pwd, name, birth, tel
FROM mem1 LEFT OUTER JOIN mem2 ON mem1.id=mem2.id;

SELECT * FROM memberView;

------------------------------------------------------------------
-- Ãß°¡ ÇÁ·Î½ÃÁ®
CREATE OR REPLACE PROCEDURE proInsMember
(
pid IN mem1.id%TYPE
,ppwd IN mem1.pwd%TYPE
,pname IN mem1.name%TYPE
,pbirth IN mem2.birth%TYPE
,ptel IN mem2.tel%TYPE
)
IS
BEGIN
INSERT INTO mem1 (id, pwd, name) VALUES (pid, ppwd, pname);

IF pbirth IS NOT NULL OR ptel IS NOT NULL THEN
INSERT INTO mem2 (id, birth, tel) VALUES (pid, pbirth, ptel);
END IF;
COMMIT;
END;

------------------------------------------------------------------
-- Å×½ºÆ®
EXECUTE proInsMember('1111', '1111', 'È«±æµ¿', NULL, NULL);
EXECUTE proInsMember('2222', '2222', 'È«±æµ¿', '', '');
EXECUTE proInsMember('3333', '3333', 'À̼ø½Å', NULL, '');
EXECUTE proInsMember('4444', '4444', 'À̼ø½Å', '2000-10-10', '');
EXECUTE proInsMember('1111', '4444', 'À̼ø½Å', '2000-10-10', '111-111');
-- ¿À·ù
EXECUTE proInsMember('5555', '6666', 'ÇãÇãÇã', '2000-10-10', '111-111');
EXECUTE proInsMember('6666', '6666', 'ÈÄÈÄÈÄÈÄ', NULL, '111-111');

SELECT * FROM mem1;
SELECT * FROM mem2;

EXECUTE proInsMember('4444', '4444', 'À̼ø½Å', '2000-10-10', '');

------------------------------------------------------------------
-- ¼öÁ¤ ÇÁ·Î½ÃÁ® - 1
CREATE OR REPLACE PROCEDURE proUpMember
(
pid IN mem1.id%TYPE
,ppwd IN mem1.pwd%TYPE
,pname IN mem1.name%TYPE
,pbirth IN mem2.birth%TYPE
,ptel IN mem2.tel%TYPE
)
IS
vCount NUMBER;
BEGIN
SELECT COUNT(*) INTO vCount FROM mem2 WHERE id=pid;

UPDATE mem1 SET pwd=ppwd, name=pname WHERE id=pid;

IF pbirth IS NOT NULL OR ptel IS NOT NULL THEN
IF vCount=1 THEN
UPDATE mem2 SET birth=pbirth, tel=ptel WHERE id=pid;
ELSE
INSERT INTO mem2 (id, birth, tel) VALUES (pid, pbirth, ptel);
END IF;
ELSE
DELETE FROM mem2 WHERE id=pid;
END IF;

COMMIT;
END;

------------------------------------------------------------------
-- ¼öÁ¤ Å×½ºÆ®
EXECUTE proUpMember('5555', '4444', 'À̼ø½Å', '', '');
EXECUTE proUpMember('3333', '7777', 'ÀÌÀÌÀÌ', '2010-10-10', '');

------------------------------------------------------------------
-- ¼öÁ¤ ÇÁ·Î½ÃÁ® - 2
CREATE OR REPLACE PROCEDURE proUpMember
(
pid IN mem1.id%TYPE
,ppwd IN mem1.pwd%TYPE
,pname IN mem1.name%TYPE
,pbirth IN mem2.birth%TYPE
,ptel IN mem2.tel%TYPE
)
IS
vid mem1.id%TYPE;

CURSOR mem_list IS SELECT id FROM mem2 WHERE id = pid;
BEGIN
UPDATE mem1 SET pwd=ppwd, name=pname WHERE id=pid;

OPEN mem_list;
FETCH mem_list INTO vid;

IF pbirth IS NOT NULL OR ptel IS NOT NULL THEN
IF mem_list%FOUND THEN
UPDATE mem2 SET birth=pbirth, tel=ptel WHERE id=pid;
ELSE
INSERT INTO mem2 (id, birth, tel) VALUES (pid, pbirth, ptel);
END IF;
ELSE
DELETE FROM mem2 WHERE id=pid;
END IF;

COMMIT;
END;

------------------------------------------------------------------
-- »èÁ¦ ÇÁ·Î½ÃÁ®
CREATE OR REPLACE PROCEDURE proDelMember
(
pid IN mem1.id%TYPE
)
IS
BEGIN
DELETE FROM mem2 WHERE id=pid;
DELETE FROM mem1 WHERE id=pid;
COMMIT;
END;

EXECUTE proDelMember('3333');

 

 

13-2. ÇÁ·Î½ÃÁ® ¹®Á¦

-- Å×À̺í ÀÛ¼º
-- ¿£Æ¼Æ¼¸í : mem1, ¿£Æ¼Æ¼¼º°Ý : Å×À̺í
-- Ä÷³
userId ¹®ÀÚ(10) NOT NULL
userPwd ¹®ÀÚ(10) NOT NULL
userName ¹®ÀÚ(20) NOT NULL
userId´Â ±âº»Å°

CREATE TABLE mem1(
userId VARCHAR2(10) NOT NULL
,userPwd VARCHAR2(10) NOT NULL
,userName VARCHAR2(20) NOT NULL
,CONSTRAINT pk_mem1_userId PRIMARY KEY (userId)
);

-- ¿£Æ¼Æ¼¸í : mem2, ¿£Æ¼Æ¼¼º°Ý : Å×À̺í
userId ¹®ÀÚ(10) NOT NULL
userSsn ¹®ÀÚ(14)
userTel ¹®ÀÚ(20)
userBirth ³¯Â¥
userId ´Â ±âº»Å°À̸ç mem1 Å×À̺íÀÇ userIdÀÇ ÂüÁ¶Å°
userSsn´Â À¯´ÏÅ©

CREATE TABLE mem2(
userId VARCHAR2(7) NOT NULL
,userSsn VARCHAR2(14)
,userTel VARCHAR2(20)
,userBirth DATE
,CONSTRAINT pk_mem2_userId PRIMARY KEY (userId)
,CONSTRAINT uk_mem2_userSsn UNIQUE(userSsn)
,CONSTRAINT fk_mem2_userId FOREIGN KEY(userId)
REFERENCES mem1(userId)
);

-- µÎ Å×ÀÌºí¿¡ Ãß°¡ÇÏ°í COMMIT ÇÏ°í SELECT Çغ¼°Í
INSERT INTO mem1(userId, userPwd, userName) VALUES('11', '11', 'ÀÚ¹Ù');
INSERT INTO mem1(userId, userPwd, userName) VALUES('22', '22', '¿À¶óŬ');

INSERT INTO mem2(userId, userSSn, userTel, userBirth) VALUES('22', '', '010-111-1111', '2010-11-10');
COMMIT;

SELECT * FROM mem1;
SELECT * FROM mem2;

-- mem1°ú mem2¸¦ Á¶ÀÎ(OUTER JOIN)ÇÏ¿© ¸ðµç Ä÷³À» Ãâ·ÂÇÏ´Â ºä¸¦ ÀÛ¼ºÇÑ´Ù.(memView)
CREATE OR REPLACE VIEW memView
AS
SELECT mem1.userId, userName, userPwd, userSsn,
userBirth, userTel FROM mem1
LEFT OUTER JOIN mem2 ON mem1.userId=mem2.userId;

SELECT * FROM memView;

-- mem1°ú mem2¿¡ µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ´Â ÇÁ·Î½ÃÁ®¸¦ ÀÛ¼ºÇÑ´Ù.
(ÇÁ·Î½ÃÁ®¸í : memInsert)
´Ü, userSsn, userTel, userBirth ¸ðµÎ°¡ NULLÀÎ °æ¿ì¿¡´Â mem2 Å×ÀÌºí¿¡´Â ÀڷḦ Ãß°¡ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
IF pUserSSn IS NOT NULL OR ..... THEN
END IF;

ÀÌ·±½ÄÀ¸·Î ÇÏ¸é µÈ´Ù.

CREATE OR REPLACE PROCEDURE memInsert
(
pUserId IN mem1.userId%TYPE
,pUserPwd IN mem1.userPwd%TYPE
,pUserName IN mem1.userName%TYPE
,pUserSsn IN mem2.userSsn%TYPE
,pUserTel IN mem2.userTel%TYPE
,pUserBirth IN mem2.userBirth%TYPE
)
IS
BEGIN
INSERT INTO mem1 (userId, userPwd, userName) VALUES (pUserId, pUserPwd, pUserName);

IF pUserSsn IS NOT NULL OR pUserBirth IS NOT NULL OR pUserTel IS NOT NULL THEN
INSERT INTO mem2 (userId, userSsn, userBirth, userTel) VALUES
(pUserId, pUserSsn, pUserBirth, pUserTel);
END IF;
COMMIT;
END;

EXEC memInsert('111','111','±èº´ÅÂ',null,null,'200-10-10');
EXEC memInsert('222','222','°øÇöÀÏ','','','');
EXEC memInsert('333','333','ÃÖ¿¬Áö','111-111','010','2010-10-10');

SELECT * FROM memView;

-- mem1°ú mem2¿¡ µ¥ÀÌÅ͸¦ »èÁ¦ÇÏ´Â ÇÁ·Î½ÃÁ®¸¦ ÀÛ¼ºÇÑ´Ù.
(ÇÁ·Î½ÃÁ®¸í : memDelete)

CREATE OR REPLACE PROCEDURE memDelete
(
pUserId IN mem1.userId%TYPE
)
IS
BEGIN
DELETE FROM mem2 WHERE userId=pUserId;
DELETE FROM mem1 WHERE userId=pUserId;
COMMIT;
END;

EXEC memDelete('22');

SELECT * FROM memView;

-- mem1°ú mem2¿¡ µ¥ÀÌÅ͸¦ ¼öÁ¤ÇÏ´Â ÇÁ·Î½ÃÁ®¸¦ ÀÛ¼ºÇÑ´Ù.
(ÇÁ·Î½ÃÁ®¸í : memUpdate)
´Ü, userSsn, userTel, userBirth ¸ðµÎ°¡ NULLÀ̸鼭 mem2Å×ÀÌºí¿¡ ÀÚ·á°¡ Á¸ÀçÇϸé mem2Å×À̺íÀÇ ÀڷḦ »èÁ¦ÇÏ°í userSsn, userTel, userBirth Áß Çϳª¶óµµ NULLÀÌ ¾Æ´Ï¸é¼­ mem2Å×ÀÌºí¿¡ ÀÚ·á°¡ Á¸ÀçÇÏ¸é ¼öÁ¤ÇÏ°í Á¸ÀçÇÏÁö ¾ÊÀ¸¸é Ãß°¡ÇÑ´Ù.

CREATE OR REPLACE PROCEDURE memUpdate
(
pUserId IN mem1.userId%TYPE
,pUserPwd IN mem1.userPwd%TYPE
,pUserName IN mem1.userName%TYPE
,pUserSsn IN mem2.userSsn%TYPE
,pUserTel IN mem2.userTel%TYPE
,pUserBirth IN mem2.userBirth%TYPE
)
IS
vCount NUMBER;

BEGIN
SELECT COUNT(*) INTO vCount FROM mem2 WHERE userId = pUserId;

UPDATE mem1 SET userPwd=pUserPwd, userName=puserName WHERE userId=pUserId;

IF pUserSsn IS NOT NULL OR pUserBirth IS NOT NULL OR pUserTel IS NOT NULL THEN
IF vCount!=0 THEN
UPDATE mem2 SET userSsn=pUserSsn, userBirth=pUserBirth, userTel=pUserTel WHERE userId=pUserId;
ELSE
INSERT INTO mem2 (userId, userSsn, userBirth, userTel) VALUES (pUserId, pUserSsn, pUserBirth, pUserTel);
END IF;
ELSE
DELETE FROM mem2 WHERE userId=pUserId;
END IF;

COMMIT;
END;

EXEC memUpdate('11','111','ÇÁ·Î½ÃÁ®',null,null,'200-10-10');

SELECT * FROM memView;

14. »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö

-- Stored Function(»ç¿ëÀÚ ÇÔ¼ö)
½ºÅä¾îµå ÇÔ¼ö´Â ½Ã½ºÅÛ ÇÔ¼öó·³ Äõ¸®¿¡¼­ È£ÃâÇϰųª ÀúÀå ÇÁ·Î½ÃÀúó·³ EXECUTE ¹®À» ÅëÇØ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.

-- Çü½Ä(Àμö³ª RETURN ¿¡¼­´Â ÀÚ·áÇüÀÇ Å©±â¸¦ ¸í½ÃÇÏÁö ¾Ê´Â´Ù.)
CREATE [OR REPLACE] FUNCTION ÇÔ¼öÀ̸§
[(
¸Å°³º¯¼ö1 IN ÀÚ·áÇü,
¸Å°³º¯¼ö2 IN ÀÚ·áÇü;
)]
RETURN datatype;
IS
[º¯¼öÀÇ ¼±¾ð]
BEGIN
.............
RETURN (°ª);
[EXCEPTION]
.............
END;

-- ÇÔ¼ö ¸ñ·Ï È®ÀÎ
SELECT object_name FROM user_procedures;

-- ÇÕÀ» ±¸ÇÏ´Â ÇÔ¼ö ¸¸µé±â
CREATE OR REPLACE FUNCTION fnSum
(
n IN NUMBER
)
RETURN NUMBER -- Àμö³ª RETURN ¿¡¼­´Â ÀÚ·áÇüÀÇ Å©±â¸¦ ¸í½ÃÇÏÁö ¾Ê´Â´Ù.
IS
s NUMBER := 0;
BEGIN
FOR i IN 1..n LOOP
s := s + i;
END LOOP;
RETURN (s);
END;

SELECT fnSUM(100) FROM DUAL;

-----------------------------------------------------
-- fnPow(10, 2) : 10ÀÇ 2½Â
CREATE OR REPLACE FUNCTION fnPow
(
n1 IN NUMBER
,n2 IN NUMBER
)
RETURN NUMBER
IS
s NUMBER := 1;
BEGIN
IF n2 > 0 THEN
FOR i IN 1..n2 LOOP
s := s * n1;
END LOOP;
ELSE
FOR i IN 1..(-n2) LOOP
s := s / n1;
END LOOP;
END IF;
RETURN s;
END;

SELECT fnPow(2, 10), fnPow(2, -2) FROM DUAL;

-- ÁֹιøÈ£°¡Áö°í ¼ºº° ±¸Çϱ⠶Ǵ »ýÀÏ, ³ªÀÌµî °è»ê


-- ¼ºº°
CREATE OR REPLACE FUNCTION fnSex
(
ssn IN VARCHAR2
)
RETURN VARCHAR2
IS
s VARCHAR2(4) := '¿©ÀÚ';
BEGIN
IF MOD(SUBSTR(ssn, 8, 1), 2)=1 THEN
s := '³²ÀÚ';
END IF;
RETURN s;
END;


-- »ýÀÏ
CREATE OR REPLACE FUNCTION fnBirth
(
ssn IN VARCHAR2
)
RETURN DATE
IS
s VARCHAR2(8);
BEGIN
s := '19' || SUBSTR(ssn, 1, 6);
IF SUBSTR(ssn, 8, 1) IN ('3', '4') THEN
s := '20' || SUBSTR(ssn, 1, 6);
END IF;
RETURN TO_DATE(s, 'YYYYMMDD');
END;


-- ³ªÀÌ
CREATE OR REPLACE FUNCTION fnAge
(
ssn IN VARCHAR2
)
RETURN NUMBER
IS
s VARCHAR2(8);
age NUMBER;
BEGIN
s := '19' || SUBSTR(ssn, 1, 6);
IF SUBSTR(ssn, 8, 1) IN ('3', '4') THEN
s := '20' || SUBSTR(ssn, 1, 6);
END IF;
age := TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE(s, 'YYYYMMDD')) /12);
RETURN age;
END;


SELECT name, fnSex(ssn), fnBirth(ssn), fnAge(ssn) FROM INSA;

15. Ä¿¼­¿Í µ¿Àû SQL

-- Ä¿¼­(Cursor)
-- ÇϳªÀÇ ·¹Äڵ尡 ¾Æ´Ñ ¿©·¯ ·¹ÄÚµå·Î ±¸¼ºµÈ ÀÛ¾÷¿µ¿ª¿¡¼­ SQL¹®À» ½ÇÇàÇÏ°í ±× °úÁ¤¿¡ »ý±ä Á¤º¸¸¦ ÀúÀåÇϱâ À§Çؼ­ CURSOR¸¦ »ç¿ë

1. ¾Ï½ÃÀûÀÎ Ä¿¼­
¾Ï½ÃÀûÀÎ Ä¿¼­´Â ¿À¶óŬÀ̳ª PL/SQL½ÇÇà ¸ÞÄ¿´ÏÁò¿¡ ÀÇÇØ Ã³¸®µÇ´Â SQL¹®ÀåÀÌ Ã³¸®µÇ´Â °÷¿¡ ´ëÇÑ À͸íÀÇ address·Î ¿À¶óŬ µ¥ÀÌÅͺ£À̽º¿¡¼­ ½ÇÇàµÇ´Â ¸ðµç SQL¹®ÀåÀº ¾Ï½ÃÀûÀÎ Ä¿¼­À̸ç, ¾Ï½ÃÀûÀÎ Ä¿¼­ ¼Ó¼ºÀÌ »ç¿ëµÉ ¼ö ÀÖ´Ù.

-- ¾Ï½ÃÀû Ä¿¼­ÀÇ ¼Ó¼º
SQL%ROWCOUNT : ÇØ´ç SQL ¹®¿¡ ¿µÇâÀ» ¹Þ´Â ÇàÀÇ ¼ö
SQL%FOUND : ÇØ´ç SQL ¿µÇâÀ» ¹Þ´Â ÇàÀÇ ¼ö°¡ 1°³ ÀÌ»óÀÏ °æ¿ì TRUE
SQL%NOTFOUND : ÇØ´ç SQL ¹®¿¡ ¿µÇâÀ» ¹Þ´Â ÇàÀÇ ¼ö°¡ ¾øÀ» °æ¿ì TRUE
SQL%ISOPEN : Ç×»ó FALSE, ¾Ï½ÃÀû Ä¿¼­°¡ ¿­·Á ÀÖ´ÂÁöÀÇ ¿©ºÎ °Ë»ö

2. ¸í½ÃÀû(explicit) Ä¿¼­
¸í½ÃÀû Ä¿¼­´Â ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇØ ¼±¾ðµÇ¸ç À̸§ÀÌ ÀÖ´Â Ä¿¼­·Î ¿©·¯ row¸¦ ´Ù·ê ¼ö ÀÖ´Ù.

-- ÀÛ¾÷ ¼ø¼­
CURSOR ¼±¾ð ¡æ Ä¿¼­ OPEN ¡æ FETCH ¡æ Ä¿¼­ CLOSE

-- Ä¿¼­ ¼±¾ð
CURSOR Ä¿¼­À̸§ IS [SELECT ¹®];

½ÇÇàÇÏ°íÀÚ ÇÏ´Â SELECT¹®À» ÀÛ¼º ÇÑ´Ù.

-- Ä¿¼­ OPEN
OPEN Ä¿¼­À̸§;

OPENÀº Ä¿¼­¿¡¼­ ¼±¾ðµÈ SELECT¹®ÀÇ ½ÇÇàÀ» ÀÇ¹Ì ÇÑ´Ù.

-- FETCH
LOOP
FETCH Ä¿¼­À̸§ INTO variable1, variable2 ;
EXIT WHEN [Á¶°Ç];
END LOOP;

OPENµÈ SELECT ¹®¿¡ ÀÇÇØ °Ë»öµÈ ÇϳªÀÇ Çà Á¤º¸¸¦ Àоî OUT º¯¼ö¿¡ ´ëÀÔÇÑ´Ù. ¸¸¾à ¸®ÅÏ µÇ´Â
°á°ú°¡ ¿©·¯ °³ÀÎ °æ¿ì LOOP ~ END LOOP¿Í °°Àº ¹Ýº¹¹®À» ÀÌ¿ëÇÏ¿© ¸¶Áö¸· ÇàÀÌ ÀÐÇôÁú ¶§±îÁö °è¼Ó ÀÐ°Ô µÈ´Ù.

-- Ä¿¼­ CLOSE
CLOSE Ä¿¼­À̸§;

¼±¾ðµÈ SELECT¹®ÀÇ ¼±¾ðÀ» ÇØÁ¦ ÇÑ´Ù.

3. FOR¹®¿¡¼­ Ä¿¼­ »ç¿ë(Cursor FOR Loops)
FOR¹®À» »ç¿ëÇϸé Ä¿¼­ÀÇ OPEN, FETCH, CLOSE°¡ ÀÚµ¿ ¹ß»ýÇϹǷΠµû·Î ±â¼úÇÒ ÇÊ¿ä°¡ ¾ø°í ·¹ÄÚµå
À̸§µµ ÀÚµ¿ ¼±¾ðµÇ¹Ç·Î µû·Î ¼±¾ðÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

-- Çü½Ä
FOR ·¹ÄÚµåÀ̸§ IN Ä¿¼­À̸§ LOOP
¹®Àå;
......
END LOOP;

4. WHERE CURRENT OF
FETCH¹®¿¡ ÀÇÇØ °¡Àå ÃÖ±Ù¿¡ ó¸®µÈ ÇàÀ» ÂüÁ¶Çϱâ À§Çؼ­ "WHERE CURRENT OF Ä¿¼­À̸§ " Àý·Î DELETE³ª UPDATE¹® ÀÛ¼ºÀÌ °¡´ÉÇÏ´Ù. ÀÌ ÀýÀ» »ç¿ëÇϱâ À§Çؼ­´Â ÂüÁ¶ÇÏ´Â Ä¿¼­°¡ ÀÖ¾î¾ß Çϸç, FOR UPDATEÀýÀÌ Ä¿¼­ ¼±¾ð query¹®Àå ¾È¿¡ ÀÖ¾î¾ß ÇÑ´Ù.

-----------------------------------------------------
DECLARE
vName insa.name%TYPE;
vBasicPay insa.basicpay%TYPE;

CURSOR insa_list IS
SELECT name, basicpay FROM insa;

BEGIN
OPEN insa_list;
LOOP
FETCH insa_list INTO vName, vBasicpay;
-- EXIT WHEN insa_list%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vName || ' ' || vbasicpay);
EXIT WHEN vName = 'À̱âÀÚ';
END LOOP;

CLOSE insa_list;
END;
/

-----------------------------------------------------
CREATE OR REPLACE PROCEDURE curTest
IS
vName insa.name%TYPE;
vBasicPay insa.basicpay%TYPE;
CURSOR insa_list IS
SELECT name, basicpay FROM insa;
BEGIN
OPEN insa_list;
LOOP
FETCH insa_list INTO vName, vBasicpay;
EXIT WHEN insa_list%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vName || ' ' || vbasicpay);
END LOOP;
CLOSE insa_list;
END;
/
EXECUTE curTest

-----------------------------------------------------
-- Á¶°Ç ¸¸Á· µ¥ÀÌÅÍ °¡Á®¿À±â
CREATE OR REPLACE PROCEDURE curTest
(
pcity insa.city%TYPE
)
IS
vName insa.name%TYPE;
vBasicPay insa.basicpay%TYPE;
vCity insa.city%TYPE;
CURSOR insa_list IS
SELECT name, basicpay,city FROM insa WHERE city=pcity;
BEGIN
OPEN insa_list;
LOOP
FETCH insa_list INTO vName, vBasicpay, vCity;
EXIT WHEN insa_list%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vName || ' ' || vbasicpay || ' ' vcity);
END LOOP;
CLOSE insa_list;
END;
/
EXECUTE curTest('¼­¿ï');

-----------------------------------------------------
-- Ä¿¼­¿¡¼­ FOR : ÀÚµ¿ OPEN, ÀÚµ¿ CLOSE
CREATE OR REPLACE PROCEDURE curTest
IS
CURSOR insa_list IS
SELECT * FROM insa;
BEGIN
FOR rec IN insa_list LOOP
DBMS_OUTPUT.PUT_LINE(rec.Name || ' ' || rec.basicpay);
END LOOP;
END;
EXECUTE curTest

-----------------------------------------------------
-- ÆĶó¹ÌÅÍ°¡ ÀÖ´Â Ä¿¼­
CREATE OR REPLACE PROCEDURE CURTEST
(
pcity INSA.CITY%TYPE
)
IS
vName insa.name%TYPE;
vBasicPay insa.basicpay%TYPE;

CURSOR insa_list(ppcity INSA.CITY%TYPE) IS
SELECT name, basicpay FROM INSA WHERE city=ppcity;

BEGIN
OPEN insa_list(pcity);
LOOP
FETCH insa_list INTO vName, vBasicpay;
EXIT WHEN insa_list%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vName || ' ' || vbasicpay);
END LOOP;
CLOSE insa_list;
END;

EXECUTE CURTEST('¼­¿ï');

-- SYS_REFCURSOR
-- REF CURSOR : 9i ÀÌÀü
-- SYS_REFCURSOR : 9i ÀÌÈÄ

-- Å×À̺íÀÇ ¿©·¯ ·Î¿ì¸¦ ¹Ýº¹ÀûÀ¸·Î Á¶È¸Çϱâ À§ÇØ ·¹ÆÛ·±½º Ä¿¼­(reference cursor)¸¦ »ç¿ëÇÑ´Ù.

-----------------------------------------------------
-- Å×À̺í ÀÛ¼º
CREATE TABLE score(
num NUMBER(7) PRIMARY KEY NOT NULL
,name VARCHAR2(20)
,birth DATE
,kor NUMBER(3)
,eng NUMBER(3)
,mat NUMBER(3)
);
INSERT INTO score (num, name, birth, kor, eng, mat)
VALUES (1, 'È«±æµ¿', '2000-10-10', 80, 80, 80);
INSERT INTO score (num, name, birth, kor, eng, mat)
VALUES (2, 'À̱âÀÚ', '2000-11-11', 90, 50, 50);
COMMIT;

-----------------------------------------------------
-- ÇÁ·Î½ÃÁ® - 1
CREATE OR REPLACE PROCEDURE select_score
(
pRc IN sys_refcursor
)
IS
varNum SCORE.num%TYPE;
varName SCORE.name%TYPE;
varBirth SCORE.birth%TYPE;
varKor SCORE.kor%TYPE;
varEng SCORE.eng%TYPE;
varMat SCORE.mat%TYPE;
BEGIN
LOOP
FETCH pRc INTO varNum, varName, varBirth,
varKor, varEng, varMat;
EXIT WHEN pRc%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(varNum || ' ' ||
varName || ' ' || (varKor+varEng+varMat));
END LOOP;
END;

-----------------------------------------------------
-- ÇÁ·Î½ÃÁ® - 2
CREATE OR REPLACE PROCEDURE list_score
IS
pResult SYS_REFCURSOR;
BEGIN
OPEN pResult FOR SELECT num, name,
birth, kor, eng, mat FROM score;
select_score(pResult);
CLOSE pResult;
END;

-- ½ÇÇà
EXEC list_score;

-- µ¿Àû SQL
ÀÀ¿ë ÇÁ·Î±×·¥ °³¹ß ½Ã ÀÚÁÖ ½ÇÇàµÇ´Â SQL¹®ÀÌ Á¸ÀçÇÒ ¶§ Á¤Àû SQL¹®À» ÀÌ¿ëÇÏ¿© ±¸ÇöÇÏ´Â °æ¿ì ¿©·¯ ¹ø ¹Ýº¹ ÀÛ¼º ½ÇÇàÇØ¾ß ÇÑ´Ù.

-- ÁÖÀÇ
RESOURCE ·ÑÀº Å×À̺íÀ» »ý¼ºÇÒ ¼ö ÀÖÁö¸¸ µ¿Àû SQLÀ» ÀÌ¿ëÇÏ¿© Å×À̺íÀ» »ý¼ºÇÒ¼ö ´Â ¾ø´Ù. µ¿Àû SQL·Î Å×À̺íÀ» »ý¼ºÇϱâ À§Çؼ­´Â CREATE TABLE ±ÇÇÑÀ» ¼³Á¤ ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

-- SYS °èÁ¤
cmd>sqlplus sys/"¾ÏÈ£" AS sysdba;
sql>GRANT CREATE TABLE TO »ç¿ëÀÚ;

------------------------------------------------------------
EXECUTE IMMEDIATE dynamic_sql_string
[INTO {define_var1 [, define_var2] ... | plsql_record }]
[USING [IN | OUT | IN OUT] bind_arg1 [,
[IN | OUT | IN OUT] bind_arg2] ...];

------------------------------------------------------------
-- µ¿ÀûÀ¸·Î Å×ÀÌºí »ý¼º
CREATE OR REPLACE PROCEDURE dynTest1
(
pTname VARCHAR2
)
IS
sql_stmt VARCHAR2(4000);
BEGIN
sql_stmt:='CREATE TABLE ' || pTname;
sql_stmt:=sql_stmt || '(num NUMBER PRIMARY KEY,';
sql_stmt:=sql_stmt || ' name VARCHAR2(20) )';

-- µ¿ÀûÀ¸·Î Äõ¸® ½ÇÇà
FOR temp IN (SELECT TNAME FROM TAB WHERE TNAME = UPPER(pTname)) LOOP
EXECUTE IMMEDIATE 'DROP TABLE '||pTname||' PURGE';
DBMS_OUTPUT.PUT_LINE('Å×ÀÌºí »èÁ¦........');
EXIT;
END LOOP;
EXECUTE IMMEDIATE sql_stmt;
DBMS_OUTPUT.PUT_LINE('Å×ÀÌºí »ý¼º........');
END;

EXEC dynTest1('xyz');

------------------------------------------------------------
-- µÎ¹ø° ¿¹Á¦
CREATE OR REPLACE PROCEDURE dynTest2
IS
sql_stmt VARCHAR2(200);
v_id NUMBER;
a_id NUMBER;
v_memo VARCHAR2(20);

TYPE MyType IS RECORD
(
t_id NUMBER,
t_memo VARCHAR2(20)
);
rec MyType;

BEGIN
-- Å×À̺íÀÌ Á¸ÀçÇÏ¸é »èÁ¦
FOR temp IN (SELECT TNAME FROM TAB WHERE TNAME = 'TEST') LOOP
EXECUTE IMMEDIATE 'DROP TABLE TEST';
EXIT;
END LOOP;

------------------------------------------------------------
-- Å×À̺í ÀÛ¼º
EXECUTE IMMEDIATE 'CREATE TABLE Test (t_id NUMBER, t_memo VARCHAR2(20))';

------------------------------------------------------------
-- ÀÚ·á ÀÔ·Â
sql_stmt := 'INSERT INTO test VALUES(:1, :2)';
FOR n IN 1..5 LOOP
v_id := n;
v_memo := CHR(n+96);

EXECUTE IMMEDIATE sql_stmt USING v_id, v_memo;
END LOOP;
COMMIT;

------------------------------------------------------------
-- ÀÚ·á Ãâ·Â
sql_stmt := 'SELECT * FROM Test WHERE t_id = :id';
a_id := 1;
EXECUTE IMMEDIATE sql_stmt INTO rec USING a_id;

DBMS_OUTPUT.PUT_LINE(rec.t_id || ' ' || rec.t_memo);

------------------------------------------------------------
-- ÀÚ·á ¼öÁ¤(º¯°æ °ªÀ» a_id¿¡ °¡Á®¿È)
v_id := 1;
sql_stmt := 'UPDATE Test SET t_id = 100 WHERE t_id = :1 RETURNING t_id INTO :2';
EXECUTE IMMEDIATE sql_stmt USING v_id RETURNING INTO a_id;
COMMIT;
DBMS_OUTPUT.PUT_LINE(a_id || ' À¸·Î ID º¯°æ');

------------------------------------------------------------
-- ÀÚ·á »èÁ¦
v_id := 3;
sql_stmt := 'DELETE FROM Test WHERE t_id = :id';
EXECUTE IMMEDIATE sql_stmt USING v_id;
COMMIT;
END;

EXEC dynTest2;

 

 

16-1. Æ®¸®°Å

Æ®¸®°Å(TRIGGER)
TRIGGER¶õ DML ÀÛ¾÷ Áï, INSERT, DELETE, UPDATE ÀÛ¾÷ÀÌ ÀϾ ¶§ ÀÚµ¿À¸·Î ½ÇÇàµÇ´Â °´Ã¼·Î ƯÈ÷ ÀÌ·± TRIGGER¸¦ DML TRIGGER¶ó ÇÑ´Ù. TRIGGER´Â µ¥ÀÌÅÍÀÇ ¹«°á¼º »Ó¸¸ ¾Æ´Ï¶ó ´ÙÀ½°ú °°Àº ÀÛ¾÷¿¡µµ »ç¿ëµÈ´Ù.
Æ®¸®°Å ³»¿¡¼­´Â COMMIT, ROLLBACK ¹®À» »ç¿ëÇÒ ¼ö ¾ø´Ù.

-- ¹®Àå Æ®¸®°Å(¹®Àå´ç Çѹø¸¸ ½ÇÇà)
Æ®¸®°Å°¡ ¼³Á¤µÈ Å×ÀÌºí¿¡ Æ®¸®°Å À̺¥Æ®°¡ ¹ß»ýÇÏ¸é ¸¹Àº Çà¿¡ ´ëÇØ º¯°æ ÀÛ¾÷ÀÌ ¹ß»ýÇÏ´õ¶óµµ ¿ÀÁ÷ Çѹø¸¸ Æ®¸®°Å¸¦ ¹ß»ý½ÃÅ°´Â ¹æ¹ý

-- Çà Æ®¸®°Å
Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ¿©·¯ °³ÀÇ Çà¿¡ ´ëÇØ Æ®¸®°Å¸¦ ¹Ýº¹ÀûÀ¸·Î ¿©·¯ ¹ø ¼öÇàÇÏ´Â ¹æ¹ýÀ¸·Î [FOR EACH ROW WHEN Á¶°Ç]Àý Á¤ÀǵȴÙ.

-- Çü½Ä
CREATE [OR REPLACE] TRIGGER Æ®¸®°Å¸í [BEFORE | AFTER]
À̺¥Æ®-1 [OR À̺¥Æ®-2 OR À̺¥Æ®-3] ON Å×À̺í¸í
[FOR EACH ROW [WHEN TRIGGER Á¶°Ç]]
DECLARE
¼±¾ð¹®
BEGIN
PL/SQL ÄÚµå
END;

-- À̺¥Æ®
INSERT, UPDATE, DELETE

-- BEFORE : ±¸¹®À» ½ÇÇàÇϱâ Àü¿¡ Æ®¸®°Å¸¦ ½ÃÀÛ
-- AFTER : ±¸¹®À» ½ÇÇàÇÑ ÈÄ¿¡ Æ®¸®°Å¸¦ ½ÃÀÛ
-- FOR EACH ROW : Çà Æ®¸®°ÅÀÓÀ» ¾Ë¸²
-- WHEN Á¶°Ç : »ç¿ëÀÚÀÇ Æ®¸®°Å À̺¥Æ® Áß¿¡ Á¶°Ç¿¡ ¸¸Á·ÇÏ´Â µ¥ÀÌÅ͸¸ Æ®¸®°Å ÇÑ´Ù.
-- REFERENCING : ¿µÇâ ¹Þ´Â ÇàÀÇ °ªÀ» ÂüÁ¶
-- :OLD : ÂüÁ¶ Àü ¿­ÀÇ °ª(INSERT : ÀÔ·Â Àü ÀÚ·á, UPDATE : ¼öÁ¤ Àü ÀÚ·á, DELETE : »èÁ¦ÇÒ ÀÚ·á)
-- :NEW : ÂüÁ¶ ÈÄ ¿­ÀÇ °ª(INSERT : ÀÔ·ÂÇÒ ÀÚ·á, UPDATE : ¼öÁ¤ÇÒ ÀÚ·á)

ROW Æ®¸®°Å¿¡¼­ Ä÷³ÀÇ ½ÇÁ¦ µ¥ÀÌÅÍ °ªÀ» Á¦¾îÇϴµ¥ »ç¿ëÇÏ´Â ¿¬»êÀÚ´Â :OLD¿Í :NEW ÀÇ»ç ·¹ÄÚµåÀÌ´Ù. ÀÌ ¿¬»êÀÚ¿Í ÇÔ²² Ä÷³ ¸íÀ» ÇÔ²² ±â¼úÇÑ´Ù. ¿¹¸¦ µé¾î, Ä÷³¸íÀÌ salÀ̶ó°í Çϸé, º¯°æÀüÀÇ °ªÀº :OLD.salÀÌ°í º¯°æ ÈÄÀÇ °ªÀº :NEW.sal ó·³ Ç¥±âÇÑ´Ù.

¹®Àå Æ®¸®°Å¿¡¼­´Â :NEW, :OLD ¸¦ ÂüÁ¶ ÇÒ ¼ö ¾ø´Ù.

-- Æ®¸®°Å »óÅ ȮÀÎ
SQL>SELECT trigger_name, trigger_type, table_name FROM user_triggers;

-- Æ®¸®°Å »èÁ¦
DROP TRIGGER Æ®¸®°Å¸í;


-- ±ÇÇѼ³Á¤
-- SYS °èÁ¤
-- »ç¿ëÀÚ¿¡°Ô Æ®¸®°Å¸¦ ¸¸µé ¼ö ÀÖ´Â ±ÇÇÑ ºÎ¿©
GRANT CREATE TRIGGER TO »ç¿ëÀÚ¸í;

-- »ç¿ëÀÚ °èÁ¤
-- ºÎ¿©µÈ ±ÇÇÑ È®ÀÎ
SELECT * FROM USER_SYS_PRIVS;

-- ¹®Àå Æ®¸®°Å ¿¹Á¦
SELECT * FROM tab;

-- EXAM1 Å×À̺íÀÌ Á¸ÀçÇÏ¸é »èÁ¦
DROP TABLE EXAM1 PURGE;

-- ¹®Àå Æ®¸®°Å
CREATE TABLE EXAM1 (
id NUMBER PRIMARY KEY
,name VARCHAR2(20)
);

CREATE TABLE EXAM2 (
memo VARCHAR2(100)
,ilja DATE DEFAULT SYSDATE
);

------------------------------------------------------------
-- exam1 Å×ÀÌºí¿¡ Ãß°¡, ¼öÁ¤, »èÁ¦°¡µÇ¸é ½Ã°£°ú »óÅ ÀúÀå Æ®¸®°Å
-- ¹®Àå, AFTER Æ®¸®°Å
CREATE OR REPLACE TRIGGER trgExam
AFTER DELETE OR INSERT OR UPDATE ON EXAM1
BEGIN
IF INSERTING THEN
INSERT INTO EXAM2(memo) VALUES ('Ãß°¡');
ELSIF UPDATING THEN
INSERT INTO EXAM2(memo) VALUES ('¼öÁ¤');
ELSIF DELETING THEN
INSERT INTO EXAM2(memo) VALUES ('»èÁ¦');
END IF;
END;

------------------------------------------------------------
-- Æ®¸®°Å È®ÀÎ
SELECT trigger_name, trigger_type, table_name
FROM user_triggers;
SELECT TEXT FROM user_source;

INSERT INTO EXAM1(id, name) VALUES(1, 'aaa');
COMMIT;
SELECT * FROM EXAM1;
SELECT * FROM exam2;

-- Å×À̺íÀÇ ÇÁ·Î½ÃÀú, ÇÔ¼ö, ÆÐÅ°Áö µî »óÈ£ ÂüÁ¶µÇ´Â °ü°è È®ÀÎ
SELECT * FROM user_dependencies;

-- ³¯Â¥ Ç¥Çö Çü½Ä º¯°æ
ALTER SESSION SET NLS_DATE_LANGUAGE='KOREAN';

-- BEFORE Æ®¸®°Å
CREATE OR REPLACE TRIGGER trgExam1
BEFORE DELETE OR INSERT OR UPDATE ON EXAM1
BEGIN
IF TO_CHAR(SYSDATE, 'DAY') IN ('Åä¿äÀÏ', 'ÀÏ¿äÀÏ')
OR (TO_CHAR(SYSDATE, 'hh24') >= 12 AND
TO_CHAR(SYSDATE, 'hh24') <= 13) THEN
raise_application_error(-20007, 'Áö±ÝÀº ÀϸøÇØ');
END IF;
END;

-- raise_application_error
-- Ç¥ÁØÈ­µÇÁö ¾ÊÀº ¿¡·¯ ÄÚµå¿Í ¿¡·¯ ¸Þ½ÃÁö¸¦ ¸®ÅÏÇϱâ À§ÇØ raise_application_error ÇÁ·Î½ÃÀú »ç¿ë
-- Äڵ尪Àº -20000~-20999»çÀÌÀÇ ¼ö »ç¿ë

INSERT INTO EXAM1(id, name) VALUES(5, 'bbb');
SELECT * FROM EXAM1;
SELECT * FROM exam2;

-- À§ Æ®¸®°Å ¼öÁ¤
CREATE OR REPLACE TRIGGER trgExam1
BEFORE DELETE OR INSERT OR UPDATE ON EXAM1
BEGIN
IF TO_CHAR(SYSDATE, 'DAY') IN ('Åä¿äÀÏ', 'ÀÏ¿äÀÏ')
OR TO_CHAR(SYSDATE, 'hh24') < 9 OR
TO_CHAR(SYSDATE, 'hh24') > 18 THEN
raise_application_error(-20007, 'Áö±ÝÀº ÀϸøÇØ');
END IF;
END;


-- Å×À̺íÀ» »èÁ¦Çϸé Æ®¸®°Åµµ ÀÚµ¿ÀûÀ¸·Î Áö¿öÁø´Ù.


-- ÇàÆ®¸®°Å
-- :NEW -> ÂüÁ¶ÈÄ ¿­ÀÇ °ª
-- INSERT¿¡ ÀÇÇØ »õ·Î Ãß°¡µÈ(ÇÒ) ·¹ÄÚµå
-- UPDATE¿¡ ÀÇÇØ ¼öÁ¤µÈ(ÇÒ) ·¹ÄÚµå
-- :OLD -> ÂüÁ¶Àü ¿­ÀÇ °ª
-- UPDATE¿¡ ÀÇÇØ ¼öÁ¤µÇ±â Àü ·¹ÄÚµå
-- DELETE¿¡ ÀÇÇØ »èÁ¦µÈ(ÇÒ) ·¹ÄÚµå

------------------------------------------------------------
CREATE TABLE demo1(
id NUMBER,
data VARCHAR2(20)
);

CREATE OR REPLACE TRIGGER demo_trigger
BEFORE INSERT ON demo1 FOR EACH ROW
BEGIN
SELECT TO_CHAR(SYSDATE, 'YYYY') INTO :new.id FROM dual;
END;
/
-- after Æ®¸®°Å´Â :NEW¸¦ ¼öÁ¤ ÇÒ ¼ö ¾ø´Ù.

INSERT INTO demo1(id, data) VALUES(5, '¿ì¸®');
COMMIT;

------------------------------------------------------------
CREATE TABLE exama(
hak VARCHAR2(20) PRIMARY KEY
,name VARCHAR2(20)
,kor NUMBER
,eng NUMBER
,mat NUMBER
);

CREATE TABLE examb(
hak VARCHAR2(20) PRIMARY KEY
,tot NUMBER
,ave NUMBER(5, 1)
,CONSTRAINT fk_examb_hak FOREIGN KEY(hak)
REFERENCES exama(hak)
);

-- Çà Æ®¸®°Å(AFTER) : Ãß°¡
CREATE OR REPLACE TRIGGER triInsExama
AFTER INSERT ON exama
FOR EACH ROW
DECLARE
vtot NUMBER;
vave NUMBER(5, 1);
BEGIN
vtot := :NEW.kor + :NEW.eng + :NEW.mat;
vave := ROUND(vTOt/3, 1);

INSERT INTO examb(hak, tot, ave)
VALUES(:NEW.hak, vtot, vave);
END;

INSERT INTO exama(hak, name, kor, eng, mat) VALUES
('1111', 'È«±æµ¿', 80, 80, 80);
COMMIT;
SELECT * FROM exama;
SELECT * FROM examb;

-- Çà Æ®¸®°Å(BEFORE) : »èÁ¦
CREATE OR REPLACE TRIGGER triDelExama
BEFORE DELETE ON exama
FOR EACH ROW
BEGIN
DELETE FROM examb WHERE hak = :OLD.hak;
END;

DELETE FROM exama WHERE hak = '1111';
COMMIT;
SELECT * FROM exama;
SELECT * FROM examb;

-- Çà Æ®¸®°Å(AFTER) : ¼öÁ¤
CREATE OR REPLACE TRIGGER triUpdateExama
AFTER UPDATE ON exama
FOR EACH ROW
DECLARE
vtot NUMBER;
vave NUMBER(5, 1);
BEGIN
vtot := :NEW.kor + :NEW.eng + :NEW.mat;
vave := ROUND(vtot/3, 1);

UPDATE examb SET tot=vtot, ave=vave
WHERE hak = :NEW.hak; -- :OLD.hak
END;

 

 


16-2. Æ®¸®°Å ½Ç½À


-- »óÇ° Å×À̺í ÀÛ¼º
CREATE TABLE »óÇ° (
»óÇ°ÄÚµå VARCHAR2(6) NOT NULL PRIMARY KEY
,»óÇ°¸í VARCHAR2(30) NOT NULL
,Á¦Á¶»ç VARCHAR2(30) NOT NULL
,¼ÒºñÀÚ°¡°Ý NUMBER
,Àç°í¼ö·® NUMBER DEFAULT 0
);

-- ÀÔ°í Å×À̺í ÀÛ¼º
CREATE TABLE ÀÔ°í (
ÀÔ°í¹øÈ£ NUMBER PRIMARY KEY
,»óÇ°ÄÚµå VARCHAR2(6) NOT NULL CONSTRAINT FK_ibgo_no
REFERENCES »óÇ°(»óÇ°ÄÚµå)
,ÀÔ°íÀÏÀÚ DATE
,ÀÔ°í¼ö·® NUMBER
,ÀÔ°í´Ü°¡ NUMBER
);

-- ÆǸŠÅ×À̺í ÀÛ¼º
CREATE TABLE ÆǸŠ(
ÆǸŹøÈ£ NUMBER PRIMARY KEY
,»óÇ°ÄÚµå VARCHAR2(6) NOT NULL CONSTRAINT FK_pan_no
REFERENCES »óÇ°(»óÇ°ÄÚµå)
,ÆǸÅÀÏÀÚ DATE
,ÆǸżö·® NUMBER
,ÆǸŴܰ¡ NUMBER
);

-- »óÇ° Å×ÀÌºí¿¡ ÀÚ·á Ãß°¡
INSERT INTO »óÇ°(»óÇ°ÄÚµå, »óÇ°¸í, Á¦Á¶»ç, ¼ÒºñÀÚ°¡°Ý) VALUES
('AAAAAA', 'µðÄ«', '»ï½Ì', 100000);
INSERT INTO »óÇ°(»óÇ°ÄÚµå, »óÇ°¸í, Á¦Á¶»ç, ¼ÒºñÀÚ°¡°Ý) VALUES
('BBBBBB', 'ÄÄÇ»ÅÍ', '¿¤µð', 1500000);
INSERT INTO »óÇ°(»óÇ°ÄÚµå, »óÇ°¸í, Á¦Á¶»ç, ¼ÒºñÀÚ°¡°Ý) VALUES
('CCCCCC', '¸ð´ÏÅÍ', '»ï½Ì', 600000);
INSERT INTO »óÇ°(»óÇ°ÄÚµå, »óÇ°¸í, Á¦Á¶»ç, ¼ÒºñÀÚ°¡°Ý) VALUES
('DDDDDD', 'ÇÚµåÆù', '´Ù¿ì', 500000);
INSERT INTO »óÇ°(»óÇ°ÄÚµå, »óÇ°¸í, Á¦Á¶»ç, ¼ÒºñÀÚ°¡°Ý) VALUES
('EEEEEE', 'ÇÁ¸°ÅÍ', '»ï½Ì', 200000);
COMMIT;
SELECT * FROM »óÇ°;

------------------------------------------------------------
-- 3. Æ®¸®°Å ÀÛ¼º
-- 1) ÀÔ°í Å×ÀÌºí¿¡ INSERT Æ®¸®°Å¸¦ ÀÛ¼º ÇÑ´Ù.
-- [ÀÔ°í] Å×ÀÌºí¿¡ ÀÚ·á°¡ Ãß°¡ µÇ´Â °æ¿ì [»óÇ°] Å×À̺íÀÇ [Àç°í¼ö·®]ÀÌ º¯°æ µÇµµ·Ï Æ®¸®°Å¸¦ ÀÛ¼ºÇÑ´Ù.

CREATE OR REPLACE TRIGGER insTrg_Ipgo
AFTER INSERT ON ÀÔ°í
FOR EACH ROW

BEGIN
UPDATE »óÇ° SET Àç°í¼ö·® = Àç°í¼ö·® + :NEW.ÀÔ°í¼ö·®
WHERE »óÇ°ÄÚµå = :NEW.»óÇ°ÄÚµå;
END;
/

-- ÀÔ°í Å×ÀÌºí¿¡ µ¥ÀÌÅÍ ÀÔ·Â
INSERT INTO ÀÔ°í (ÀÔ°í¹øÈ£, »óÇ°ÄÚµå, ÀÔ°íÀÏÀÚ, ÀÔ°í¼ö·®, ÀÔ°í´Ü°¡)
VALUES (1, 'AAAAAA', '2004-10-10', 5, 50000);
INSERT INTO ÀÔ°í (ÀÔ°í¹øÈ£, »óÇ°ÄÚµå, ÀÔ°íÀÏÀÚ, ÀÔ°í¼ö·®, ÀÔ°í´Ü°¡)
VALUES (2, 'BBBBBB', '2004-10-10', 15, 700000);
INSERT INTO ÀÔ°í (ÀÔ°í¹øÈ£, »óÇ°ÄÚµå, ÀÔ°íÀÏÀÚ, ÀÔ°í¼ö·®, ÀÔ°í´Ü°¡)
VALUES (3, 'AAAAAA', '2004-10-11', 15, 52000);
INSERT INTO ÀÔ°í (ÀÔ°í¹øÈ£, »óÇ°ÄÚµå, ÀÔ°íÀÏÀÚ, ÀÔ°í¼ö·®, ÀÔ°í´Ü°¡)
VALUES (4, 'CCCCCC', '2004-10-14', 15, 250000);
INSERT INTO ÀÔ°í (ÀÔ°í¹øÈ£, »óÇ°ÄÚµå, ÀÔ°íÀÏÀÚ, ÀÔ°í¼ö·®, ÀÔ°í´Ü°¡)
VALUES (5, 'BBBBBB', '2004-10-16', 25, 700000);
COMMIT;

SELECT * FROM »óÇ°;
SELECT * FROM ÀÔ°í;

-- 2) ÀÔ°í Å×ÀÌºí¿¡ UPDATE Æ®¸®°Å¸¦ ÀÛ¼º ÇÑ´Ù.
-- [ÀÔ°í] Å×À̺íÀÇ ÀÚ·á°¡ º¯°æ µÇ´Â °æ¿ì [»óÇ°] Å×À̺íÀÇ [Àç°í¼ö·®]ÀÌ º¯°æ µÇµµ·Ï Æ®¸®°Å¸¦ ÀÛ¼ºÇÑ´Ù.

CREATE OR REPLACE TRIGGER upTrg_Ipgo
AFTER UPDATE ON ÀÔ°í
FOR EACH ROW

BEGIN
UPDATE »óÇ° SET Àç°í¼ö·® = Àç°í¼ö·® - :OLD.ÀÔ°í¼ö·® + :NEW.ÀÔ°í¼ö·®
WHERE »óÇ°ÄÚµå = :NEW.»óÇ°ÄÚµå;
END;
/

-- UPDATE Å×½ºÆ®
UPDATE ÀÔ°í SET ÀÔ°í¼ö·® = 30 WHERE ÀÔ°í¹øÈ£ = 5;
COMMIT;
SELECT * FROM »óÇ°;
SELECT * FROM ÀÔ°í;

-- 3) ÀÔ°í Å×ÀÌºí¿¡ DELETE Æ®¸®°Å¸¦ ÀÛ¼º ÇÑ´Ù.
-- [ÀÔ°í] Å×À̺íÀÇ ÀÚ·á°¡ »èÁ¦µÇ´Â °æ¿ì [»óÇ°] Å×À̺íÀÇ [Àç°í¼ö·®]ÀÌ º¯°æ µÇµµ·Ï Æ®¸®°Å¸¦ ÀÛ¼ºÇÑ´Ù.

CREATE OR REPLACE TRIGGER delTrg_Ipgo
AFTER DELETE ON ÀÔ°í
FOR EACH ROW

BEGIN
UPDATE »óÇ° SET Àç°í¼ö·® = Àç°í¼ö·® - :OLD.ÀÔ°í¼ö·®
WHERE »óÇ°ÄÚµå = :OLD.»óÇ°ÄÚµå;
END;
/

-- DELETE Å×½ºÆ®
DELETE FROM ÀÔ°í WHERE ÀÔ°í¹øÈ£ = 5;
COMMIT;
SELECT * FROM »óÇ°;
SELECT * FROM ÀÔ°í;

-- ÀÔ°í Å×À̺íÀÇ Àç°í ¼ö·® ¼öÁ¤ ¹× »èÁ¦´Â »óÇ° Å×À̺íÀÇ Àç°í ¼ö·®ÀÌ Àû°Å³ª ¾øÀ¸¸é ÇÒ ¼ö ¾øÀ¸¹Ç·Î UPDATE ¹× DELETE Æ®¸®°Å¸¦ BEFORE Æ®¸®°Å·Î ¼öÁ¤ÇÏ¾ß »óÇ° Å×À̺íÀÇ Àç°í ¼ö·®¿¡ µû¶ó ¼öÁ¤ ¶Ç´Â »èÁ¦¸¦ ÇÒ¼ö ¾øµµ·Ï ¼öÁ¤ÇÑ´Ù.

-- 4) ÆǸŠÅ×ÀÌºí¿¡ INSERT Æ®¸®°Å¸¦ ÀÛ¼ºÇÑ´Ù.(BEFORE Æ®¸®°Å·Î ÀÛ¼º)
-- [ÆǸÅ] Å×ÀÌºí¿¡ ÀÚ·á°¡ Ãß°¡ µÇ´Â °æ¿ì [»óÇ°] Å×À̺íÀÇ [Àç°í¼ö·®]ÀÌ º¯°æ µÇµµ·Ï Æ®¸®°Å¸¦ ÀÛ¼ºÇÑ´Ù.

CREATE OR REPLACE TRIGGER insTrg_Pan
BEFORE INSERT ON ÆǸÅ
FOR EACH ROW

DECLARE
j_qty NUMBER;

BEGIN

SELECT Àç°í¼ö·® INTO j_qty FROM »óÇ° WHERE »óÇ°ÄÚµå = :NEW.»óÇ°ÄÚµå;
IF :NEW.ÆǸżö·® > j_qty THEN
raise_application_error(-20007, 'ÆǸŠ¿À·ù');
ELSE
UPDATE »óÇ° SET Àç°í¼ö·® = Àç°í¼ö·® - :NEW.ÆǸżö·®
WHERE »óÇ°ÄÚµå = :NEW.»óÇ°ÄÚµå;
END IF;
END;
/

-- ÆǸŠÅ×ÀÌºí¿¡ µ¥ÀÌÅÍ ÀÔ·Â
INSERT INTO ÆǸŠ(ÆǸŹøÈ£, »óÇ°ÄÚµå, ÆǸÅÀÏÀÚ, ÆǸżö·®, ÆǸŴܰ¡) VALUES
(1, 'AAAAAA', '2004-11-10', 5, 1000000);
COMMIT;
SELECT * FROM »óÇ°;
SELECT * FROM ÆǸÅ;

INSERT INTO ÆǸŠ(ÆǸŹøÈ£, »óÇ°ÄÚµå, ÆǸÅÀÏÀÚ, ÆǸżö·®, ÆǸŴܰ¡) VALUES
(1, 'AAAAAA', '2004-11-10', 50, 1000000);
COMMIT;
SELECT * FROM »óÇ°;
SELECT * FROM ÆǸÅ;

-- 5) ÆǸŠÅ×ÀÌºí¿¡ UPDATE Æ®¸®°Å¸¦ ÀÛ¼ºÇÑ´Ù.(BEFORE Æ®¸®°Å·Î ÀÛ¼º)
-- [ÆǸÅ] Å×À̺íÀÇ ÀÚ·á°¡ º¯°æ µÇ´Â °æ¿ì [»óÇ°] Å×À̺íÀÇ [Àç°í¼ö·®]ÀÌ º¯°æ µÇµµ·Ï Æ®¸®°Å¸¦ ÀÛ¼ºÇÑ´Ù.

CREATE OR REPLACE TRIGGER upTrg_Pan
BEFORE UPDATE ON ÆǸÅ
FOR EACH ROW

DECLARE
j_qty NUMBER;

BEGIN

SELECT Àç°í¼ö·® INTO j_qty FROM »óÇ° WHERE »óÇ°ÄÚµå = :NEW.»óÇ°ÄÚµå;
IF :NEW.ÆǸżö·® > (j_qty + :OLD.ÆǸżö·®) THEN
raise_application_error(-20007, 'ÆǸŷ®ÀÌ Àç°í·®º¸´Ù ¸¹À» ¼ö ¾ø½À´Ï´Ù.');
ELSE
UPDATE »óÇ° SET Àç°í¼ö·® = Àç°í¼ö·® + :OLD.ÆǸżö·® - :NEW.ÆǸżö·®
WHERE »óÇ°ÄÚµå = :NEW.»óÇ°ÄÚµå;
END IF;
END;
/

-- UPDATE Å×½ºÆ®
UPDATE ÆǸŠSET ÆǸżö·® = 200 WHERE ÆǸŹøÈ£ = 1;
UPDATE ÆǸŠSET ÆǸżö·® = 10 WHERE ÆǸŹøÈ£ = 1;
COMMIT;
SELECT * FROM »óÇ°;
SELECT * FROM ÆǸÅ;

-- 6) ÆǸŠÅ×ÀÌºí¿¡ DELETE Æ®¸®°Å¸¦ ÀÛ¼º ÇÑ´Ù.
-- [ÆǸÅ] Å×ÀÌºí¿¡ ÀÚ·á°¡ »èÁ¦µÇ´Â °æ¿ì [»óÇ°] Å×À̺íÀÇ [Àç°í¼ö·®]ÀÌ º¯°æ µÇµµ·Ï Æ®¸®°Å¸¦ ÀÛ¼ºÇÑ´Ù.

CREATE OR REPLACE TRIGGER delTrg_Pan
AFTER DELETE ON ÆǸÅ
FOR EACH ROW

BEGIN
UPDATE »óÇ° SET Àç°í¼ö·® = Àç°í¼ö·® + :OLD.ÆǸżö·®
WHERE »óÇ°ÄÚµå = :OLD.»óÇ°ÄÚµå;
END;
/

-- DELETE Å×½ºÆ®
DELETE ÆǸŠWHERE ÆǸŹøÈ£ = 1;
COMMIT;
SELECT * FROM »óÇ°;
SELECT * FROM ÆǸÅ;

-- ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» ÀÌ¿ëÇÏ¿© °ü·ÃµÈ Æ®¸®°Å´Â ÇϳªÀÇ Æ®¸®°Å·Î ÀÛ¼º ÇÒ ¼ö ÀÖ´Ù.
-- IF INSERTING THEN
-- Ãß°¡ÇÒ ¶§
-- ELSIF UPDATING THEN
-- ¼öÁ¤ÇÒ ¶§
-- ELSIF DELETING THEN
-- »èÁ¦ÇÒ ¶§
-- END IF;

17. ¿¹¿Üó¸®


¿¹¿Üó¸®
-- PL/SQL À» ½ÇÇà ÇÏ´Â µ¿¾È¿¡ ¹ß»ýÇÏ´Â ¿¡·¯ ó¸®

-- ¿¹¿Ü Æ®·¦(trap)
¸¸ÀÏ ¿¹¿Ü°¡ ºí·ÏÀÇ ½ÇÇà °¡´ÉÇÑ ¼½¼Ç¿¡¼­ ¹ß»ýÇÑ´Ù¸é, 󸮴 ºí·ÏÀÇ ¿¹¿Ü ¼½¼Ç¿¡¼­ ÇØ´ç ¿¹¿Ü 󸮱â·Î Á¦¾î°¡ ³Ñ¾î °£´Ù. PL/SQL ºí·ÏÀÌ ¼º°øÀûÀ¸·Î ¿¹¿Ü¸¦ ó¸® ÇÑ´Ù¸é À̶§ ¿¹¿Ü´Â µÑ·¯½Î´Â ºí·ÏÀ̳ª ȯ°æÀ¸·Î Àü´Þ µÇÁö ¾Ê´Â´Ù.

-- ¿¹¿Ü Àü´Þ
¿¹¿Ü¸¦ ó¸®ÇÏ´Â ´Ù¸¥ ¹æ¹ýÀº ½ÇÇà ȯ°æÀ¸·Î ¿¹¿Ü¸¦ Àü´ÞÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ¿¹¿Ü°¡ ºí·ÏÀÇ ½ÇÇàºÎ¿¡¼­ ¹ß»ýÇÏ¿© ÇØ´ç ¿¹¿Ü 󸮱Ⱑ ¾ø´Ù¸é, PL/SQL ºí·ÏÀÇ ³ª¸ÓÁö ºÎºÐÀº ¼öÇàµÇÁö ¸øÇÏ°í Á¾·áµÈ´Ù.

-- ¿¹¿Ü °ËÃâ
¿¹¿Ü°¡ ºí·ÏÀÇ ½ÇÇàºÎ¿¡¼­ ¹ß»ýÇÏ¸é ºí·ÏÀÇ ¿¹¿ÜºÎ¿¡ ÀÖ´Â ÇØ´ç ¿¹¿Ü 󸮺ηΠÁ¦¾î°¡ ³Ñ¾î°£´Ù.

-- ¿¹¿ÜÀÇ À¯Çü
½ÇÇà Áß¿¡ ERROR°¡ ¹ß»ýÇϸé ÇÁ·Î±×·¥ÀÌ ÁߴܵÇÁö ¾Ê°í ¿¹¿Ü¿¡ ´ëÇÑ ÇÁ·Î±×·¥À» ÇÒ ¼ö ÀÖ´Ù.

Á¤ÀÇµÈ ORACLE SERVER ERROR : PL/SQLÄڵ忡¼­ ÀÚÁÖ ¹ß»ýÇÏ´Â ERRORÀ» ¹Ì¸® Á¤ÀÇÇÔ(¼±¾ðÇÒ ¼ö ¾ø°í ORACLE SERVERÀÌ ¾Ï½ÃÀûÀ¸·Î ¹ß»ý)
Á¤ÀǵÇÁö ¾ÊÀº ORACLE SERVER ERROR : ±âŸ Ç¥ÁØ ORACLE SERVER ERROR(»ç¿ëÀÚ°¡ ¼±¾ðÇÏ°í ORACLE SERVERÀÌ ±×°ÍÀ» ¾Ï½ÃÀûÀ¸·Î ¹ß»ý)
»ç¿ëÀÚ Á¤ÀÇ ERROR : ÇÁ·Î±×·¡¸Ó°¡ Á¤ÇÑ Á¶°ÇÀÌ ¸¸Á·µÇÁö ¾ÊÀ» °æ¿ì ¹ß»ý(»ç¿ëÀÚ°¡ ¼±¾ðÇÏ°í ¸í½ÃÀûÀ¸·Î ¹ß»ýÇÑ´Ù.)

-- ¿¹¿ÜÁ¤ÀÇ
EXCEPTION
WHEN exception1 [OR exception2, . . . .] THEN
statement1;
statement2;
. . . . . .
[WHEN exception2 [OR exception3, . . . .] THEN
statement3;
statement4;
. . . . . .]
[WHEN OTHERS THEN
statement5;
statement6;
. . . . . .]
END;

OTHERS : ¸í½ÃÀûÀ¸·Î ¼±¾ðµÇÁö ¾ÊÀº ¸ðµç ¿¹¿Ü¸¦ Æ®·¦ÇÏ´Â ¿¹¿Ü ó¸® Àý

-- Á¤ÀÇµÈ ¿À¶óŬ ¼­¹ö ¿¡·¯
NO_DATA_FOUND(ORA-01403) : µ¥ÀÌÅ͸¦ RETURNÇÏÁö ¾Ê´Â SELECT¹®Àå
TOO_MANY_ROWS(ORA-01422) : ´ÜÀÏ Çà SELECT´Â Çϳª ÀÌ»óÀÇ ÇàÀ» RETURN

------------------------------------------------------------
DECLARE
TYPE insa_rec IS RECORD (
v_num insa.num%TYPE
,v_name insa.name%TYPE
,v_basicpay insa.basicpay%TYPE
);
rec insa_rec;

BEGIN
SELECT num, name, basicpay INTO rec
FROM INSA WHERE num=1001;

IF rec.v_name = 'È«±æµ¿' THEN
UPDATE INSA SET name='±è±æµ¿'
WHERE num=rec.v_num;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('µ¥ÀÌÅÍ°¡ ¾ø½À´Ï´Ù.');
WHEN TOO_MANY_ROWS THEN
-- ´ÜÀÏÇà SELECT¹®Àº ÇϳªÀÇ Çุ ¸®ÅÏÇØ¾ß ÇÑ´Ù.
DBMS_OUTPUT.PUT_LINE('µ¥ÀÌÅÍ°¡ ¿©·¯°³ÀÔ´Ï´Ù.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('±âŸ ¿¡·¯ÀÔ´Ï´Ù.');
END;

SELECT * FROM INSA;
ROLLBACK;

SELECT * FROM INSA;


-- »ç¿ëÀÚ Á¤ÀÇ ¿¹¿Ü
-- ¼±¾ð ÀýÂ÷
1. ¼±¾ð ¼½¼Ç¿¡¼­ »ç¿ëÀÚ°¡ ¼±¾ðÇÑ´Ù.
exception_name EXCEPTION;

exception_name : ¿¹¿Ü À̸§À» Á¤ÀÇ

2. ½ÇÇà ¼½¼Ç¿¡¼­ ¸í½ÃÀûÀ¸·Î ¿¹¿Ü¸¦ ¹ß»ýÇϱâ À§ÇØ RAISE¹®ÀåÀ» »ç¿ëÇÑ´Ù.
RAISE exception_name;

exception_name : ¾Õ¿¡¼­ ¼±¾ðµÈ ¿¹¿Ü À̸§À» ±â¼úÇÑ´Ù.

3. ÇØ´ç ¿¹¿Ü 󸮱⠾ȿ¡ ¼±¾ðµÈ ¿¹¿Ü¸¦ ÂüÁ¶ÇÑ´Ù.

------------------------------------------------------------
DECLARE
TYPE insa_rec IS RECORD (
v_num insa.num%TYPE
,v_name insa.name%TYPE
,v_basicpay insa.basicpay%TYPE
);
rec insa_rec;

insa_basicpay_check EXCEPTION;

BEGIN
SELECT num, name, basicpay INTO rec
FROM INSA WHERE num=1001;
IF rec.v_basicpay > 2500000 THEN
RAISE insa_basicpay_check;
ELSE
DBMS_OUTPUT.PUT_LINE(rec.v_name || ' ' || rec.v_basicpay);
END IF;
EXCEPTION
WHEN insa_basicpay_check THEN
DBMS_OUTPUT.PUT_LINE('±âº»±ÞÀÌ 250¸¸¿ø ÀÌ»óÀÔ´Ï´Ù.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('±âŸ ¿¡·¯ÀÔ´Ï´Ù.');
END;



-- ¿¹¿Ü Æ®·¡ÇÎ ÇÔ¼ö
¿¡·¯°¡ ¹ß»ý ÇßÀ» ¶§ µÎ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© °ü·ÃµÈ ¿¡·¯ ÄÚµå ¶Ç´Â ¸Þ½ÃÁö¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
ÄÚµå ¶Ç´Â ¸Þ½ÃÁö¿¡ µû¶ó ¿¡·¯¿¡ ´ëÇØ ÃëÇÒ ÀÛ¾÷À» Á¤ÇÒ ¼ö ÀÖ´Ù.

-- SQLCODE : ¿¡·¯ÄÚµå
-- SQLERRM : ¿¡·¯ ¸Þ½ÃÁö


DECLARE
TYPE insa_rec IS RECORD (
v_num insa.num%TYPE
,v_name insa.name%TYPE
,v_basicpay insa.basicpay%TYPE
);
rec insa_rec;

BEGIN
SELECT num, name, basicpay INTO rec
FROM INSA WHERE num=8001;

IF rec.v_name = 'È«±æµ¿' THEN
UPDATE INSA SET name='±è±æµ¿' WHERE num=rec.v_num;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('¿¡·¯ ÄÚµå : ' || SQLCODE);
DBMS_OUTPUT.PUT_LINE('¿¡·¯ ¸Þ½ÃÁö : ' || SQLERRM);
END;


-- raise_application_error
-- Ç¥ÁØÈ­µÇÁö ¾ÊÀº ¿¡·¯ ÄÚµå¿Í ¿¡·¯ ¸Þ½ÃÁö¸¦ ¸®ÅÏÇϱâ À§ÇØ raise_application_error ÇÁ·Î½ÃÀú »ç¿ë
-- Äڵ尪Àº -20000~-20999»çÀÌÀÇ ¼ö »ç¿ë

------------------------------------------------------------
DECLARE
v_num insa.num%TYPE;
BEGIN
v_num := 8001;
DELETE FROM insa WHERE num=v_num;

IF SQL%NOTFOUND THEN
raise_application_error(-20100, 'ÀÚ·á°¡ ¾øÀ½');
END IF;
END;

 

 

18. ÆÐÅ°Áö


-- ÆÐÅ°Áö
-- ŸÀÔ, ÇÁ·Î±×·¥°´Ã¼, ÇÁ·Î½ÃÁ®, ÇÔ¼öµîÀ» ³í¸®ÀûÀ¸·Î ¹­¾î ³õÀº°Í

-- ÀÛ¼º ¹æ¹ý
1. ÆÐÅ°Áö ¸í¼¼
2. ÆÐÅ°Áö ¸öü ±¸Çö

-----------------------------------------------------
-- ÀÛ¼º
-- 1. ÆÐÅ°Áö ¸í¼¼
CREATE OR REPLACE PACKAGE pack_insa IS
FUNCTION fn_sex(ssn IN VARCHAR2)
RETURN VARCHAR2;
PROCEDURE list_insa(pNum IN NUMBER);
END pack_insa;

-- 2. ÆÐÅ°Áö ¸öü ±¸Çö
CREATE OR REPLACE PACKAGE BODY pack_insa IS
FUNCTION fn_sex(ssn IN VARCHAR2)
RETURN VARCHAR2
IS
varSex VARCHAR2(10) := '¿©ÀÚ';
BEGIN
IF SUBSTR(ssn, 8, 1) IN ('1', '3') THEN
varSex := '³²ÀÚ';
END IF;
RETURN varSex;
END;

PROCEDURE list_insa(pNum IN NUMBER)
IS
varName VARCHAR2(20);
varSsn VARCHAR2(20);
VarSex VARCHAR2(10);
BEGIN
SELECT name, ssn, fn_sex(ssn) sex INTO varName, varSsn, varSex FROM insa WHERE num=pNum;
DBMS_OUTPUT.PUT_LINE(varName || ' ' || varSsn || ' ' || varSex);
END;
END pack_insa;

EXEC pack_insa.list_insa(1001);

-- ¿À¹ö·Îµù
CREATE OR REPLACE PACKAGE pack_insa IS
FUNCTION fn_sex(ssn IN VARCHAR2)
RETURN VARCHAR2;
PROCEDURE list_insa(pNum IN NUMBER);
PROCEDURE list_insa(pName IN VARCHAR2);
END pack_insa;

CREATE OR REPLACE PACKAGE BODY pack_insa IS
FUNCTION fn_sex(ssn IN VARCHAR2)
RETURN VARCHAR2
IS
varSex VARCHAR2(10) := '¿©ÀÚ';
BEGIN
IF SUBSTR(ssn, 8, 1) IN ('1', '3') THEN
varSex := '³²ÀÚ';
END IF;
RETURN varSex;
END;

PROCEDURE list_insa(pNum IN NUMBER)
IS
varName VARCHAR2(20);
varSsn VARCHAR2(20);
VarSex VARCHAR2(10);
BEGIN
SELECT name, ssn, fn_sex(ssn) sex INTO varName, varSsn, varSex FROM insa WHERE num=pNum;
DBMS_OUTPUT.PUT_LINE(varName || ' ' || varSsn || ' ' || varSex);
END;

PROCEDURE list_insa(pName IN VARCHAR2)
IS
CURSOR cur_insa IS
SELECT name, ssn, fn_sex(ssn) sex FROM insa WHERE name LIKE '%' || pName || '%';
BEGIN
FOR rec IN cur_insa LOOP
DBMS_OUTPUT.PUT_LINE(rec.Name || ' ' || rec.Ssn || ' ' || rec.Sex);
END LOOP;
END;
END pack_insa;

EXEC pack_insa.list_insa(1001);
EXEC pack_insa.list_insa('±è');

 

 

19. Å×ÀÌºí ½ºÆäÀ̽º


-- Å×ÀÌºí ½ºÆäÀ̽º
-- ½Ã½ºÅÛ Å×ÀÌºí ½ºÆäÀ̽º Á¾·ù
-- SYSTEM : ¿À¶óŬ ¼­¹ö°¡ »ç¿ëÇÏ´Â °ø°£À¸·Î ÀÚ·á»çÀü Å×À̺í, ºä°¡ ÀúÀå
-- UNDOTBS1 : Æ®·£Àè¼ÇÀÇ ROLLBACK¹®À» ½ÇÇàÇÒ ¶§ º¯°æÀÌÀüÀÇ µ¥ÀÌÅÍ·Î º¹±¸Çϱâ À§ÇÑ µ¥ÀÌÅÍ ÀúÀå °ø°£
-- SYSAUX : ±âº»ÀûÀ¸·Î ¸¸µé¾îÁö´Â ½Ã½ºÅÛ °ü¸®¿ë Å×ÀÌºí½ºÆäÀ̽º
-- TEMP : GROUP BY, ORDER BY, HAVING, START WITH¿Í °°Àº SQL ¹®¿¡¼­ SORT ÀÛ¾÷ÀÌ ¹ß»ýµÇ´Âµ¥, ÀÌ ¶§ »ç¿ëµÇ´Â µ¥ÀÌÅͺ£À̽º ³»ºÎÀÇ Àӽà ÀúÀå °ø°£
-- USERS : »ç¿ëÀÚ°¡ Å×½ºÆ® ÇÒ ¼ö ÀÖ´Â ±âº»ÀûÀ¸·Î ¸¸µé¾îÁö´Â °ø°£

-- Âü°í
-- 1 block : 8KB
-- 8 block = 1 extent = 64 kb
-- Å×ÀÌºí »ý¼º½Ã 1 extent »ý¼º
-- extent(table)ÀÌ ¸ð¿©¼­ segment
-- segment°¡ ÀúÀåµÇ´Â °ø°£ : Å×ÀÌºí ½ºÆäÀ̽º
-- ¿©·¯°³ÀÇ Å×ÀÌºí½ºÆäÀ̽º°¡ ¸ð¿© µ¥ÀÌÅͺ£À̽º

-- SYS °èÁ¤
-- dba_tablespaces µ¥ÀÌÅÍ »çÀü
SELECT tablespace_name, initial_extent, min_extlen
FROM dba_tablespaces;

-- dba_data_files µ¥ÀÌÅÍ »çÀü
SELECT file_name, tablespace_name FROM dba_data_files;

-- Å×ÀÌºí ½ºÆäÀ̽º °ø°£ È®ÀÎ
SELECT tablespace_name, SUM(bytes), MAX(bytes) FROM
DBA_FREE_SPACE
GROUP BY tablespace_name;

-- Å×ÀÌºí ½ºÆäÀ̽º »ý¼º(Å©±â : 100M)
CREATE TABLESPACE sp_exam DATAFILE 'd:/tbl/exam_data.dbf'
SIZE 100M;
-- ¿ë·®Àº ¦¼ö·Î ÁöÁ¤ÇÒ°ÍÀ» ±ÇÀå(µð½ºÅ©»ó¿¡¼­ ¦¼ö·Î ¿ë·®ÀÌ ´Ã¾î³ª¹Ç·Î µð½ºÅ©¿ë·®³¶ºñ ¹æÁö)

SELECT * FROM v$tablespace;
SELECT tablespace_name FROM dba_tablespaces;

-- »ç¿ëÀÚ °èÁ¤
sp_exam Å×ÀÌºí ½ºÆäÀ̽º¿¡ Å×À̺í ÀÛ¼º
CREATE TABLE sp1 (id NUMBER) TABLESPACE sp_exam;

-- Àڽſ¡°Ô ºÎ¿©µÈ Å×ÀÌºí½ºÆäÀ̽ºÀÇ ¿ë·® È®ÀÎ
SELECT * FROM USER_TS_QUOTAS;

-- MAX_BYTES : -1 -> ¹«ÇÑ´ë


-- Å×ÀÌºí ½ºÆäÀ̽º ¿ë·® º¯°æ
-- SYS °èÁ¤
ALTER DATABASE DATAFILE 'd:/tbl/exam_data.dbf'
RESIZE 300M;


-- Å×ÀÌºí ½ºÆäÀ̽º »èÁ¦
DROP TABLESPACE sp_exam INCLUDING CONTENTS;
-- INCLUDING CONTENTS :
-- Å×ÀÌºí½ºÆäÀ̽º¿¡ Å×À̺íµî °´Ã¼°¡ Á¸ÀçÇصµ »èÁ¦

SELECT tablespace_name, contents FROM dba_tablespaces;

-- ½ÇÁ¦ ÆÄÀÏÀ» Ž»ö±â·Î Á¦°ÅÇØ¾ß ÇÔ


-- Å×ÀÌºí ½ºÆäÀ̽º ÀÚµ¿ È®Àå
CREATE TABLESPACE sp_exam
DATAFILE 'd:/tbl/db_data.dbf' SIZE 20M
AUTOEXTEND ON NEXT 10M MAXSIZE 1000M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
-- AUTOEXTEND ON : ÀÚµ¿È®Àå

SELECT * FROM v$tablespace;

-- AUTOEXTEND ON NEXT 10M MAXSIZE 1000M
-- 20M À» ´Ù »ç¿ëÇϸé 10M¾¿ ÀÚµ¿ Áõ°¡(1000M ±îÁö)
-- EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
-- Å×ÀÌºí½ºÆäÀ̽ºÀÇ °¢ extent size¸¦ 1MÀ¸·Î ÁöÁ¤
-- EXTENT : ÀÏÁ¤ÇÑ ¼öÀÇ ORACLE ºí·°(±âº» 1M)

-- »èÁ¦
DROP TABLESPACE sp_exam INCLUDING CONTENTS;


-- Å×ÀÌºí ½ºÆäÀ̽º ÀÚµ¿ È®Àå(¿ë·®À» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¹«ÇÑ´ë)
-- (ÃʱâÅ©±â : 20M)
CREATE TABLESPACE sp_exam
DATAFILE 'd:/tbl/db_data.dbf'
SIZE 20M AUTOEXTEND ON;

-- »èÁ¦
DROP TABLESPACE sp_exam INCLUDING CONTENTS;

 

 

 

20. »ç¿ëÀÚ °ü¸®

-- ÁÖ¿ä ÀÚ·á»çÀü(data dictionary)


-- SYS °èÁ¤

-- »ç¿ëÀÚ ¸ñ·Ï È®ÀÎ
SELECT username, password, created FROM DBA_USERS;
SELECT username, password, created FROM DBA_USERS WHERE username='»ç¿ëÀÚ¸í';

SELECT * FROM all_users; -- Àüü »ç¿ëÀÚ È®ÀÎ

-- ½Ã½ºÅÛ ±ÇÇÑ(CREATE TABLE, CREATE VIEW µî)
SELECT * FROM DBA_SYS_PRIVS; -- ºÎ¿©µÈ ¸ðµç ½Ã½ºÅÛ ±ÇÇÑ Á¶È¸
SELECT * FROM SYSTEM_PRIVILEGE_MAP; -- Àüü ½Ã½ºÅÛ ±ÇÇÑ ¸ñ·Ï

-- ·Ñ È®ÀÎ
SELECT * FROM DBA_ROLES;

-- ·Ñ¿¡ ºÎ¿©µÈ ½Ã½ºÅÛ ±ÇÇÑ(CREATE TABLE, CREATE VIEW µî) È®ÀÎ
SELECT * FROM role_sys_privs;
SELECT * FROM role_sys_privs WHERE role='CONNECT';
SELECT * FROM role_sys_privs WHERE role='RESOURCE';

-- ·Ñ¿¡ Á¸ÀçÇÏ´Â ·Ñ È®ÀÎ
SELECT * FROM role_role_privs;

-- ·ÑÀÌ °¡Áö°í ÀÖ´Â °´Ã¼ ±ÇÇÑ(INSERT, SELECT µî) È®ÀÎ
SELECT * FROM ROLE_TAB_PRIVS

-- Å×ÀÌºí½ºÆäÀ̽º ÇÒ´ç·®À» È®ÀÎ
SELECT username, tablespace_name, bytes/1024, max_bytes/1024 FROM dba_ts_quotas;


-- »ç¿ëÀÚ °èÁ¤

-- »ç¿ëÀÚÀÇ ½Ã½ºÅÛ ±ÇÇÑ(CREATE TABLE, CREATE VIEW µî) È®ÀÎ
SELECT * FROM USER_SYS_PRIVS;

-- »ç¿ëÀÚ¿¡°Ô ºÎ¿©µÈ ·Ñ È®ÀÎ
SELECT * FROM user_role_privs;

-- °¡Áö°í ÀÖ´Â °´Ã¼ ±ÇÇÑ È®ÀÎ(INSERT, UPDATE, SELECT, DELETE µî)
SELECT * FROM USER_TAB_PRIVS;

-- ´Ù¸¥ »ç¿ëÀÚ·Î ºÎÅÍ ¹ÞÀº °´Ã¼ ±ÇÇÑ È®ÀÎ(INSERT, UPDATE, SELECT, DELETE µî)
SELECT * FROM USER_TAB_PRIVS_RECD;

-- Å×ÀÌºí ¸ñ·Ï È®ÀÎ
SELECT * FROM tab;

-- Å×À̺í Ä÷³ È®ÀÎ
SELECT * FROM USER_tab_columns WHERE table_name='Å×À̺í¸í';
SELECT * FROM ALL_TAB_COLUMNS WHERE owner ='µðºñ°èÁ¤' and table_name = 'Å×À̺í¸í'

-- Á¦¾àÁ¶°Ç È®ÀÎ
DESC user_constraints; -- user_constraints ±¸Á¶ È®ÀÎ

SELECT * FROM USER_constraints WHERE table_name='INSA';
-- ¾î¶² Ä÷³¿¡ Á¦¾àÁ¶°ÇÀÌ ºÎ¿©µÇ¾ú´ÂÁö È®ÀÎ ºÒ°¡ P : ±âº»Å°, C : NOT NULL µî, U : UNIQUE, R : ÂüÁ¶Å° µî

SELECT constraint_name, table_name, constraint_type FROM user_constraints;

-- ÇöÀç user°¡ °¡Áö°í ÀÖ´Â column¿¡ ÇÒ´çµÈ Á¦¾àÁ¶°Ç¿¡ ´ëÇÑ Á¤º¸
SELECT * FROM USER_cons_columns; -- ¾î¶² Ä÷³¿¡ ±âº»Å°°¡ ºÎ¿©µÇ¾ú´ÂÁö È®ÀÎ °¡´É

-- procedure, function ¸ñ·Ï È®ÀÎ
SELECT object_name FROM user_procedures;

-- Å×À̺íÀÇ ÇÁ·Î½ÃÀú, ÇÔ¼ö, ÆÐÅ°Áö µî »óÈ£ ÂüÁ¶µÇ´Â °ü°è È®ÀÎ
SELECT * FROM user_dependencies;

-- Æ®¸®°Å È®ÀÎ
SELECT trigger_name, trigger_type, table_name FROM user_triggers;

-- ÇÁ·Î½ÃÀú, ÇÔ¼öµîÀÇ ¼Ò½º È®ÀÎ
SELECT TEXT FROM user_source;

-- ºä ¸ñ·Ï, ¼Ò½º È®ÀÎ
SELECT view_name, text FROM user_views;

-- ½ÃÄö½º ¸ñ·Ï È®ÀÎ
SELECT * FROM seq;
SELECT * FROM user_sequences;



-- »ç¿ëÀÚ È®ÀÎ, ¶ô ¼³Á¤, ÇØÁ¦
-- SYS °èÁ¤
SQLPLUS sys/"¾ÏÈ£" as sysdba
SELECT * FROM all_users; -- Àüü »ç¿ëÀÚ È®ÀÎ

-- soctt LOCK ¼³Á¤
ALTER USER scott ACCOUNT LOCK;

-- SCOTT °èÁ¤
CONN scott/"¾ÏÈ£"
-- ¿¡·¯ : LockÀÌ ¼³Á¤µÇ¾î ¿À¶óŬ Á¢¼ÓÀ» ÇÒ¼ö ¾ø´Ù.

-- SYS °èÁ¤
SQL>CONN sys/"¾ÏÈ£" as sysdba

-- soctt LOCK ÇØÁ¦
SQL>ALTER USER scott ACCOUNT UNLOCK;


-- »ç¿ëÀÚ °ü¸® - »ç¿ëÀÚ Ãß°¡
-- SYS °èÁ¤
CREATE USER sky IDENTIFIED BY abc;
-- ·Î±×¿Â ±ÇÇÑÀÌ ¾ø¾î¼­ CONN°¡ ºÒ°¡´É

-- sky »ç¿ëÀÚ¿¡°Ô µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÒ ¼ö ÀÖ´Â ±ÇÇÑ ºÎ¿©
GRANT CREATE SESSION TO sky;


-- sky °èÁ¤
-- Å×À̺í ÀÛ¼º
CREATE TABLE TEST(id NUMBER);
-- Å×ÀÌºí ½ºÆäÀ̽º »ç¿ë ±ÇÇÑÀÌ ¾øÀ¸¹Ç·Î Å×À̺íÀ» ÀÛ¼ºÇÒ ¼ö ¾ø´Ù.

--»ç¿ëÀÚ »èÁ¦
-- SYS °èÁ¤
-- sky »ç¿ëÀÚ°¡ CONN µÇ¾î ÀÖ´Â »óÅ¿¡¼­´Â »èÁ¦ ºÒ°¡
DROP USER sky; -- Å×À̺íµîÀÌ Á¸ÀçÇÏ¸é ¿À·ù
-- DROP USER sky CASCADE; -- Å×À̺íµîÀÌ Á¸ÀçÇÏ¸é °´Ã¼µµ °°ÀÌ »èÁ¦


-- Å×ÀÌºí½ºÆäÀ̽º¸¦ »ç¿ëÇÒ¼ö ÀÖ´Â ±ÇÇÑÀ» ºÎ¿©ÇÏ¿© sky »ç¿ëÀÚ Ãß°¡
-- SYS °èÁ¤
CREATE USER sky IDENTIFIED BY abc
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS; -- ¹«ÇÑ´ë
-- QUOTA 50M ON USERS;

GRANT CREATE SESSION TO sky; -- DB Á¢¼Ó ±ÇÇÑ

-- Å×ÀÌºí ½ºÆäÀ̽ºÀÇ ±ÇÇÑÀ» ºÎ¿© ÇßÁö¸¸ Å×À̺íÀ» ¸¸µé¼ö ÀÖ´Â ±ÇÇÑÀÌ ¾øÀ¸¹Ç·Î Å×ÀÌºí »ý¼º ºÒ°¡


-- SYS °èÁ¤
-- ·Ñ ±ÇÇÑ È®ÀÎ
SELECT * FROM role_sys_privs WHERE role='CONNECT';
SELECT * FROM role_sys_privs WHERE role='RESOURCE';

-- Å×ÀÌºí »ý¼º ±ÇÇÑ ºÎ¿©
GRANT CREATE TABLE TO sky;
-- RESOURCE : ·Ñ -> Å×ÀÌºí½ºÆäÀ̽º, Å×ÀÌºí »ý¼º, ÀÚ·áÇü »ý¼ºµî ¸î°¡Áö ±ÇÇÑÀ» ¸ð¾Æ¸ðÀº°Í
-- GRANT RESOURCE TO sky;

-- »ç¿ëÀÚ¿¡ CONN, Å×ÀÌºí½ºÆäÀ̽º, Å×À̺íÀÛ¼ºµîÀÇ ±ÇÇÑÀ» Çѹø¿¡ ºÎ¿©
-- GRANT CONNECT, RESOURCE TO sky;

DROP USER sky; -- Å×À̺íÀÌ Á¸ÀçÇÏ¸é »èÁ¦ ºÒ°¡´É
-- DROP USER sky CASCADE; -- Å×ÀÌºí µîÀÇ °³Ã¼°¡ Á¸ÀçÇصµ »èÁ¦


-- SYS °èÁ¤
CREATE USER sky IDENTIFIED BY abc;

-- »ç¿ëÀÚ¿¡°Ô Å×ÀÌºí ½ºÆäÀ̽º ±ÇÇÑ ºÎ¿©
ALTER USER sky
DEFAULT TABLESPACE USERS
QUOTA 50M ON USERS;

-- Å×ÀÌºí½ºÆäÀ̽º ÇÒ´ç·®À» È®ÀÎ
SELECT * FROM dba_ts_quotas;
SELECT username, tablespace_name, bytes/1024,
max_bytes/1024 FROM dba_ts_quotas;


-- SYS °èÁ¤
-- ¾ÏÈ£ °ü¸®
GRANT CREATE SESSION TO sky; -- DB Á¢¼Ó ±ÇÇÑ

-- SYS¿¡ ÀÇÇØ ¾ÏÈ£ º¯°æ
ALTER USER sky IDENTIFIED BY king;

-- sky °èÁ¤
-- sky ÀÚ½ÅÀÌ ¾ÏÈ£º¯°æ
ALTER USER sky IDENTIFIED BY king1;

-- SYS °èÁ¤
-- sky »ç¿ëÀÚÀÇ ¾ÏÈ£¸¦ ¸¸·á ½ÃÅ´
ALTER USER sky PASSWORD EXPIRE;
-- sky »ç¿ëÀÚ·Î CONN½Ã ¿À·ùÃâ·ÂÈÄ »õ·Î¿î ¾ÏÈ£ ÀÔ·Â ¿ä±¸

DROP USER sky;


-- SYS ¾ÏÈ£ º¯°æ
CMD>sqlplus "/AS sysdba"
-- CMD>sqlplus /nolog
SQL>ALTER USER sys IDENTIFIED BY ¾ÏÈ£;
SQL>CONN sys/¾ÏÈ£



-- ½Ã½ºÅÛ ±ÇÇÑ : DB ÀÛ¾÷, ¿¬»êÀ» ¼öÇàÇϱâ À§ÇØ ÇÊ¿äÇÑ ±ÇÇÑ
-- CREATE TABLE, CREATE USER, CREATE SESSION.....


-- SYS °èÁ¤
SELECT * FROM DBA_SYS_PRIVS; -- ºÎ¿©µÈ ¸ðµç ½Ã½ºÅÛ ±ÇÇÑ Á¶È¸
SELECT * FROM SYSTEM_PRIVILEGE_MAP; -- Àüü ½Ã½ºÅÛ ±ÇÇÑ ¸ñ·Ï



-- »ç¿ëÀÚ°¡ ½Ã½ºÅÛ ±ÇÇÑ È®ÀÎ
-- »ç¿ëÀÚ °èÁ¤
SELECT * FROM USER_SYS_PRIVS;


-- SYS °èÁ¤
CREATE USER sky1 IDENTIFIED BY king1;
CREATE USER sky2 IDENTIFIED BY king2;


-- DB Á¢±Ù ±ÇÇÑ ºÎ¿©
GRANT CREATE SESSION TO sky1;
GRANT CREATE SESSION TO sky2;

-- sky1 °èÁ¤
-- ºÎ¿©µÈ ½Ã½ºÅÛ ±ÇÇÑ È®ÀÎ
SELECT * FROM USER_SYS_PRIVS;

-- SYS °èÁ¤
GRANT CREATE TABLE, CREATE VIEW TO sky1;
GRANT RESOURCE TO sky2;

-- sky1 °èÁ¤
CREATE TABLE TEST(id NUMBER); -- ¿À·ù : Å×ÀÌºí ½ºÆäÀ̽º ±ÇÇÑÀÌ ¾ø¾î¼­

-- sky2
-- »ç¿ëÀÚ¿¡°Ô ºÎ¿©µÈ ·Ñ È®ÀÎ
SELECT * FROM user_role_privs;

CREATE TABLE TEST(id NUMBER);
-- RESOURCE ·ÑÀº CREATE TABLE, Å×ÀÌºí½ºÆäÀ̽ºµîÀÇ ±ÇÇÑÀÌ Á¸ÀçÇϹǷÎ

-- sky1 °èÁ¤
GRANT CREATE VIEW TO sky2; -- ADMIN ±ÇÇÑÀ» °¡Áö°í ÀÖÁö ¾ÊÀ¸¹Ç·Î ´Ù¸¥ »ç¿ëÀÚ¿¡°Ô ±ÇÇÑÀ» ºÎ¿© ÇÏÁö ¸øÇÔ

-- SYS °èÁ¤
GRANT CREATE TABLE, CREATE VIEW TO sky1
WITH ADMIN OPTION; -- ADMIN ±ÇÇÑ ºÎ¿©

-- sky1 °èÁ¤
GRANT CREATE VIEW TO sky2;


-- ±ÇÇÑ È¸¼ö
-- SYS °èÁ¤
REVOKE CREATE TABLE, CREATE VIEW FROM sky1;

-- »ç¿ëÀÚ Á¦°Å
DROP USER sky1;
DROP USER sky2 CASCADE; -- Å×À̺íµîÀÌ Á¸ÀçÇÏ¸é ¿À·ù°¡ ¹ß»ýÇϴµ¥ CASCADE ¿É¼ÇÀ» ºÙÀ̸é Å×ÀÌºíµµ ÀÚµ¿ »èÁ¦


-- °´Ã¼ ±ÇÇÑ(INSERT, UPDATE....... µî) È®ÀÎ

-- »ç¿ëÀÚ °èÁ¤
-- °¡Áö°í ÀÖ´Â °´Ã¼ ±ÇÇÑ È®ÀÎ
SELECT * FROM USER_TAB_PRIVS;

-- ´Ù¸¥ »ç¿ëÀÚ·Î ºÎÅÍ ¹ÞÀº °´Ã¼ ±ÇÇÑ È®ÀÎ
SELECT * FROM USER_TAB_PRIVS_RECD;

-- SYS °èÁ¤
-- ¸ðµç Å×ÀÌºí °ü·Ã ±ÇÇÑ È®ÀÎ
SELECT * FROM DBA_TAB_PRIVS;


-- SYS : °´Ã¼ ±ÇÇÑ
CREATE USER sky1 IDENTIFIED BY king1;
CREATE USER sky2 IDENTIFIED BY king2;

GRANT CONNECT, RESOURCE, CREATE VIEW TO sky1;
GRANT CONNECT, RESOURCE TO sky2;
-- CONNECT, RESOURCE : ·Ñ

-- sky1
CREATE TABLE TEST(id NUMBER, name VARCHAR2(20));
INSERT INTO TEST (id, name) VALUES(1, 'aaa');
INSERT INTO TEST (id, name) VALUES(2, 'bbb');
COMMIT;

GRANT SELECT ON test TO sky2;
-- sky1ÀÌ sky2ÇÑÅ× test Å×À̺íÀÇ SELECT ±ÇÇÑ ºÎ¿©

-- sky2
SELECT * FROM sky1.test;

SELECT * FROM USER_TAB_PRIVS; -- °¡Áö°í ÀÖ´Â °´Ã¼ ±ÇÇÑ
SELECT * FROM USER_TAB_PRIVS_RECD; -- ¹ÞÀº °´Ã¼ ±ÇÇÑ È®ÀÎ

INSERT INTO sky1.test (id, name) VALUES (3, 'ccc');
-- ¿À·ù : INSERT ±ÇÇÑÀÌ ¾øÀ¸¹Ç·Î

-- sky1 °èÁ¤
-- sky2 ¿¡°Ô sky1 Å×ÀÌºí¿¡ INSERT ±ÇÇÑ ºÎ¿©
GRANT INSERT(id, name) ON test TO sky2;
-- ¶Ç´Â GRANT INSERT ON test TO sky2;

-- sky2 °èÁ¤
INSERT INTO sky1.test (id, name) VALUES (3, 'ccc');
COMMIT;
SELECT * FROM sky1.test;

-- ±ÇÇÑ È¸¼ö
-- sky1
REVOKE SELECT ON test FROM sky2;

-- sky2 °èÁ¤
SELECT * FROM sky1.test;
-- ¿À·ù

-------------------------------------------
--SYS °èÁ¤
DROP USER sky1 CASCADE;
DROP USER sky2 CASCADE;

--ROLE : °ü¸®ÀÇ È¿À²¼ºÀ» À§ÇØ ¼­·Î ¿¬°üµÈ ±ÇÇÑÀ» Çѵ¥ ¹­Àº ±×·ì

------------------------------------------------------
-- SYS °èÁ¤
-- ROLE È®ÀÎ
SELECT * FROM DBA_ROLES;

------------------------------------------------------
-- ROLE »ý¼º°úÁ¤
-- ·Ñ»ý¼º -> ·Ñ¿¡ ±ÇÇÑ ºÎ¿© -> ·ÑÀ» »ç¿ëÀÚ¿¡ ºÎ¿©

------------------------------------------------------
-- Role »ý¼º
CREATE ROLE std_role;
SELECT * FROM DBA_ROLES;

------------------------------------------------------
-- ¾ÏÈ£¸¦ °¡Áø ·Ñ »ý¼º
CREATE ROLE std_role1 IDENTIFIED BY aaa;
SELECT * FROM DBA_ROLES;

------------------------------------------------------
-- ·Ñ¿¡ ºÎ¿©µÈ ±ÇÇÑ È®ÀÎ
SELECT * FROM ROLE_TAB_PRIVS WHERE role='STD_ROLE';

------------------------------------------------------
-- ·Ñ¿¡ ½Ã½ºÅÛ ±ÇÇÑ ºÎ¿©
GRANT RESOURCE, CONNECT, CREATE VIEW TO std_role;
-- std_role ¿¡ RESOURCE, CONNECT ·Ñ, CREATE VIEW ½Ã½ºÅÛ ±ÇÇÑ ºÎ¿©

SELECT * FROM ROLE_ROLE_PRIVS WHERE role='STD_ROLE';
-- ·Ñ¾ÈÀÇ ·Ñ È®ÀÎ

SELECT * FROM ROLE_SYS_PRIVS WHERE role='STD_ROLE';
-- ½Ã½ºÅÛ ±ÇÇÑ È®ÀÎ

------------------------------------------------------
-- ·Ñ¿¡ °´Ã¼ ±ÇÇÑ ºÎ¿©
-- »ç¿ëÀÚ
GRANT SELECT, INSERT, UPDATE ON insa TO std_role;

--sys °´Ã¼ ±ÇÇÑ È®ÀÎ
SELECT * FROM ROLE_TAB_PRIVS WHERE role='STD_ROLE';


-- ROLE º¯°æ
-- ·ÑÀÇ ¾ÏÈ£ Á¦°Å
ALTER ROLE std_role1 NOT IDENTIFIED;
SELECT * FROM dba_roles WHERE role='STD_ROLE1';

-- »ç¿ëÀÚ¿¡°Ô ROLE ºÎ¿©
CREATE USER sky1 IDENTIFIED BY king1;

-- »ç¿ëÀÚ¿¡°Ô ROLE Àû¿ë
GRANT STD_ROLE TO sky1;

-- sky1 °èÁ¤
SELECT * FROM scott.insa;

-- sky1ÀÌ ±ÇÇÑ È®ÀÎ
SELECT * FROM USER_ROLE_PRIVS; -- ·Ñ È®ÀÎ
SELECT * FROM USER_TAB_PRIVS; -- °´Ã¼ ±ÇÇÑ È®ÀÎ
SELECT * FROM USER_SYS_PRIVS; -- ½Ã½ºÅÛ ±ÇÇÑ È®ÀÎ

-- ROLLÀÇ ±ÇÇÑÀº ½Ã½ºÅÛ °èÁ¤¿¡¼­ È®ÀÎ
-- SELECT * FROM ROLE_ROLE_PRIVS
-- SELECT * FROM ROLE_SYS_PRIVS
-- SELECT * FROM ROLE_TAB_PRIVS


-- ROLE ȸ¼ö
-- SYS °èÁ¤
REVOKE std_role FROM sky1;


-- PUBLIC ·Ñ : ¸ðµç »ç¿ëÀÚ¿¡°Ô ÀÚµ¿À¸·Î ±ÇÇÑ ºÎ¿©

CREATE ROLE pub_role; -- ·Ñ »ý¼º
-- ·Ñ¿¡ ±ÇÇÑ ºÎ¿©
GRANT RESOURCE, CREATE VIEW, CONNECT TO pub_role;
-- PUBLIC ·Ñ
GRANT pub_role TO PUBLIC WITH ADMIN OPTION;

-- PUBLIC ·Ñ ȸ¼ö
REVOKE pub_role FROM PUBLIC;
-- REVOKE pub_role FROM sky1; -- ¿À·ù

-- sky1 CONN ¿À·ù

-- ROLE »èÁ¦
DROP ROLE pub_role;
DROP ROLE std_role;
DROP ROLE std_role1;

21. µ¥ÀÌÅÍ ¸µÅ©

-- µ¥ÀÌÅÍ ¸µÅ©


-- µ¥ÀÌÅÍ ¸µÅ© ±ÇÇÑ ¼³Á¤
-- SYS °èÁ¤
GRANT CREATE DATABASE LINK TO »ç¿ëÀÚ¸í;

-- »ç¿ëÀÚ °èÁ¤
CREATE DATABASE LINK link_test
CONNECT TO »ç¿ëÀÚ¸í IDENTIFIED BY "¾ÏÈ£"
USING
'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=211.169.117.189)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=ORA)))';
-- ORA : µ¥ÀÌÅͺ£À̽º ¸í(SID)
-- ¾ÏÈ£°¡ Ư¼ö¹®ÀÚ°¡ ÀÖ´Â °æ¿ì¿¡´Â "" ¾È¿¡ ¾ÏÈ£¸¦ ÀÔ·ÂÇÑ´Ù.

SELECT name, basicPay FROM insa@link_test;
-- Å×À̺í¸í@¸µÅ©¸í

SELECT num, name, buseo, city, basicpay FROM insa@link_test WHERE buseo='°³¹ßºÎ'
UNION ALL
SELECT num, name, buseo, city, basicpay FROM INSA WHERE city='ÀÎõ';

DROP DATABASE LINK link_test;

-- tnsnames.ora ¿¡ Á¤ÀÇµÈ connect_identifier À¸·Î Á¢¼Ó
CMD>sqlplus »ç¿ëÀÚ¸í/"¾ÏÈ£"@ora111
-- ora111 : tnsnames.ora ¿¡ Á¤ÀÇµÈ connect_identifier

 

 

22. ¾Ïȣȭ ¹× º¹È£È­

-- ¾Ïȣȭ ¹× º¹È£È­
-- ¾Ïȣȭ ±â´ÉÀ» ÀÌ¿ëÇÏ·Á¸é DBMS_OBFUSCATION_TOOLKITÀ» ÀÌ¿ëÇÑ´Ù.

-- ÀÌ ÆÐÅ°Áö´Â 4°³ÀÇ ÇÁ·Î½ÃÁ®·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.
- VARCHAR2 ŸÀÔÀ» Encrypt/DecryptÇÒ ¼ö ÀÖ´Â 2°³ÀÇ ÇÁ·Î½ÃÁ®
- RAW ŸÀÔÀ» Encrypt/DecryptÇÒ ¼ö ÀÖ´Â 2°³ÀÇ ÇÁ·Î½ÃÁ®
-- (´Ù¸¥ ŸÀÔÀº Áö¿øÇÏÁö ¾ÊÀ¸¹Ç·Î numberÀÎ °æ¿ì´Â to_char ÀÌ¿ë)


-- SYS °èÁ¤
SQL>@D:/oracle/product/10.2.0/db_1/RDBMS/ADMIN/dbmsobtk.sql
SQL>@D:/oracle/product/10.2.0/db_1/RDBMS/ADMIN/prvtobtk.plb

--------------------------------------------
-- ¸ðµç »ç¿ëÀÚ°¡ DBMS_OBFUSCATION_TOOLKIT ÆÐÅ°ÁöÀÇ ÇÁ·Î½ÃÁ®¸¦ »ç¿ë ÇÒ ¼ö ÀÖ´Â ±ÇÇÑ ºÎ¿©
-- SYS °èÁ¤
SQL>GRANT execute ON dbms_obfuscation_toolkit TO public;


-- »ç¿ëÀÚ °èÁ¤
-- ÆÐÅ°Áö ¼±¾ð
CREATE OR REPLACE PACKAGE CryptIT AS
FUNCTION encrypt( str VARCHAR2,
hash VARCHAR2 ) RETURN VARCHAR2;
FUNCTION decrypt( xCrypt VARCHAR2,
hash VARCHAR2 ) RETURN VARCHAR2;
END CryptIT;
/

-- ÆÐÅ°Áö ¸öü
CREATE OR REPLACE PACKAGE BODY CryptIT IS
crypted_string VARCHAR2(2000);

FUNCTION encrypt(str VARCHAR2, hash VARCHAR2)
RETURN VARCHAR2
IS
pieces_of_eight NUMBER := ((FLOOR(LENGTH(str)/8 + .9)) * 8);
BEGIN
dbms_obfuscation_toolkit.DESEncrypt(
input_string => RPAD(str, pieces_of_eight ),
key_string => RPAD(hash,8,'#'),
encrypted_string => crypted_string );

RETURN crypted_string;
END;

FUNCTION decrypt( xCrypt VARCHAR2, hash VARCHAR2 )
RETURN VARCHAR2 IS
BEGIN
dbms_obfuscation_toolkit.DESDecrypt(
input_string => xCrypt,
key_string => RPAD(hash,8,'#'),
decrypted_string => crypted_string );

RETURN TRIM(crypted_string);
END;
END CryptIT;

/

-- DESEncrypt, DESDecrypt ÇÔ¼ö´Â Àμö°¡ VARCHAR2, RAWÀÎ ÇÁ·Î½ÃÁ®°¡ ÀÖ´Ù.
-- raw : 2Áøµ¥ÀÌÅÍ, UTL_RAW.CAST_TO_RAW : ¹®ÀÚ¿­À» 2Áø µ¥ÀÌÅÍ·Î
-- input_string VARCHAR2(32) := 'abcd';
-- raw_input RAW(128) := UTL_RAW.CAST_TO_RAW(input_string);
-- str VARCHAR2(32) := UTL_RAW.CAST_TO_VARCHAR2(raw_input));

--------------------------------------------------------
-- Å×½ºÆ®
CREATE TABLE exam(id NUMBER, pass VARCHAR2(20));

-- ÀÔ·Â
-- CryptIT.encrypt(ºñ¹Ð¹øÈ£, Å°°ª)
INSERT INTO exam VALUES(1, CryptIT.encrypt('12345', 'test'));

-- µ¥ÀÌÅÍ Á¶È¸
-- Decrypt ÇÏÁö ¾ÊÀ¸¸é °á°ú°ªÀÌ Ãâ·ÂµÇÁö ¾Ê´Â´Ù.
SELECT id, pass FROM exam WHERE pass = '12345';

SELECT id, pass FROM exam;
SELECT id, DUMP(pass) FROM exam; -- DUMP : oracle ³»ºÎ ÀúÀåÇü½Ä

SELECT id, CryptIT.decrypt(pass,'test') pass FROM exam;

 

 

 

23. SYS_RefCusor


-- SYS_REFCURSOR ¿¹Á¦
Å×À̺íÀÇ ¿©·¯ ·Î¿ì¸¦ ¹Ýº¹ÀûÀ¸·Î Á¶È¸Çϱâ À§ÇØ ·¹ÆÛ·±½º Ä¿¼­(reference cursor)¸¦ »ç¿ë ÇÑ´Ù.

-----------------------------------------------------
-- score Å×À̺í ÀÛ¼º
CREATE TABLE score(
num NUMBER(7) PRIMARY KEY NOT NULL
,name VARCHAR2(20)
,birth DATE
,kor NUMBER(3)
,eng NUMBER(3)
,mat NUMBER(3)
);

-----------------------------------------------------
INSERT INTO score (num, name, birth, kor, eng, mat)
VALUES (1, 'È«±æµ¿', '2000-10-10', 80, 80, 80);
INSERT INTO score (num, name, birth, kor, eng, mat)
VALUES (2, 'À̱âÀÚ', '2000-11-11', 90, 50, 50);
COMMIT;

-----------------------------------------------------
CREATE OR REPLACE PROCEDURE select_score
(
pResult OUT SYS_REFCURSOR, pSQL IN VARCHAR2
)
IS
BEGIN
OPEN pResult FOR pSQL;
--OPEN pResult FOR SELECT * FROM score;
END;

-----------------------------------------------------
CREATE OR REPLACE PROCEDURE list_score
(
pSQL IN VARCHAR2
)
IS
result SYS_REFCURSOR;

varNum SCORE.num%TYPE;
varName SCORE.name%TYPE;
varBirth SCORE.birth%TYPE;
varKor SCORE.kor%TYPE;
varEng SCORE.eng%TYPE;
varMat SCORE.mat%TYPE;
BEGIN
select_score(result, pSQL);

LOOP
FETCH result INTO varNum, varName, varBirth,
varKor, varEng, varMat;
EXIT WHEN result%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(varNum || ' ' ||
varName || ' ' || (varKor+varEng+varMat));
END LOOP;
END;

-----------------------------------------------------
EXEC LIST_SCORE('SELECT * FROM score');

 

-- insa Å×À̺íÀÇ ÀڷḦ Ãâ·ÂÇÏ´Â ÇÁ·Î½ÃÀú ÀÛ¼º
-- (SYS_REFCURSOR ÀÌ¿ë)
SELECT name, basicpay FROM insa WHERE name LIKE '±è%';
SELECT name, basicpay FROM insa WHERE name LIKE 'ÀÌ%';

-----------------------------------------------------
CREATE OR REPLACE PROCEDURE select_insa
(
pResult OUT SYS_REFCURSOR, pVar IN VARCHAR2
)
IS
BEGIN
OPEN pResult FOR SELECT name, basicpay FROM insa
WHERE name LIKE '%' || pVar || '%';
END;

-----------------------------------------------------
CREATE OR REPLACE PROCEDURE list_insa
(
pVar IN VARCHAR2
)
IS
result SYS_REFCURSOR;

vName INSA.name%TYPE;
vBasicpay INSA.basicpay%TYPE;
BEGIN
select_insa(result, pVar);

LOOP
FETCH result INTO vName, vBasicpay;
EXIT WHEN result%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vName || ' ' || vBasicpay);
END LOOP;
END;

-----------------------------------------------------
EXEC list_insa('±è');
EXEC list_insa('ÀÌ');

 

 

 

24. À妽º

-- À妽º
-- °³¿ä
index¶õ ROWID¿Í ƯÁ¤ Ä÷³ÀÇ Á¤·ÄµÈ °ªÀ» setÀ¸·Î ÇÏ¿© ¸ñ·ÏÈ­ÇÑ °ÍÀÌ´Ù. Á¤·ÄÇØ ³õÀº Ä÷³ÀÇ °¢°¢ÀÇ °ª°ú ±×¿¡ ÇØ´çÇÏ´Â ROWID¸¦ ÀÌ¿ëÇÏ¿© °ð ¹Ù·Î data block¿¡ Á¢±ÙÇÏ¿© ºü¸£°Ô ÇØ´ç µ¥ÀÌÅ͸¦ ã¾Æ³½´Ù. index´Â ÀÚµ¿À¸·Î oracle¿¡ ÀÇÇØ »ý¼ºµÇ±âµµ ÇÏ°í, »ç¿ëÀÚ°¡ Á÷Á¢ »ý¼ºÇÒ ¼ö µµ ÀÖ´Ù.

index´Â µ¥ÀÌÅ͸¦ º¸´Ù ºü¸£°Ô °Ë»öÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â °´Ã¼ÀÌ´Ù.
DBÀÇ ¼º´ÉÀ» Çâ»ó½ÃÅ°°í, Çà(row)ÀÇ À¯ÀϼºÀ» º¸ÀåÇϱâ À§ÇØ »ç¿ëµÈ´Ù.
À߸øµÈ À妽º´Â DBÀÇ ¼º´ÉÀ» ¿ÀÈ÷·Á ÀúÇϽÃŲ´Ù.

-- Ư¡
ºü¸¥ °Ë»öÀ» À§ÇØ B*Tree¸¦ »ç¿ëÇÏ¿© µð½ºÅ©ÀÇ ÀÔÃâ·Â Ƚ¼ö¸¦ °¨¼Ò
Oracle server°¡ ÀÚµ¿À¸·Î À妽º¸¦ »ç¿ëÇÏ°í À¯Áö º¸¼ö
Å×À̺í°ú´Â ³í¸®Àû, ¹°¸®ÀûÀ¸·Î µ¶¸³
»ý¼º, »èÁ¦ ½Ã ´Ù¸¥ Å×À̺íÀ̳ª À妽º¿¡ ¿µÇâÀ» ÁÖÁö ¾ÊÀ½
°¢ À妽º´Â page·Î ±¸¼ºµÈ pointer¿Í Ä÷³ °ªÀ¸·Î ±¸¼º

-- »ý¼º
ÀÚµ¿ »ý¼º : Unique À妽º·Î primary key ¶Ç´Â Unique key Á¦¾àÁ¶°Ç »ý¼º½Ã ÀÚµ¿À¸·Î À妽º°¡ »ý¼ºµÈ´Ù.(Áߺ¹ °ªÀÌ Á¸ÀçÇÏ¸é »ý¼º ºÒ°¡)
¼öµ¿ »ý¼º : Non-Unique À妽º·Î access ½Ã°£À» Çâ»ó½ÃÅ°±â À§ÇÏ¿© »ç¿ëÀÚ°¡ Á÷Á¢ »ý¼ºÇÑ´Ù. (Áߺ¹ °ªÀÌ Á¸Àç ÇÏ´Â °æ¿ì)

-- Á¾·ù
1) LOGICAL À妽º
Single Ä÷³ À妽º : ÇϳªÀÇ Ä÷³ ¸¸ À妽º¿¡ Á¸Àç
concatenated À妽º(composite À妽º) : ¿©·¯ Ä÷³À» °áÇÕÇÏ¿© ÇϳªÀÇ À妽º¸¦ »ý¼º(32°³ÀÇ Ä÷³ ±îÁö)
Unique À妽º : uniqueÇÑ Ä÷³À¸·Î À妽º
non-unique À妽º : uniqueÇÏÁö ¾ÊÀº ¿©·¯ Ä÷³À» ¼öµ¿À¸·Î À妽º
Function based(ÇÔ¼ö±â¹Ý) À妽º : ¿¬»êÀÚ ¶Ç´Â ÇÔ¼öÀÇ Àû¿ë °á°ú¿¡ µû¶ó »ý¼ºµÊ

2) PHYSICAL À妽º
partitioned(ºÐÇÒ) À妽º : ºÐÇÒµÈ Å×À̺íÀ» »ý¼ºÇÏ´Â °æ¿ì¿¡ Àû¿ëµÊ
non-partitioned(ºñ ºÐÇÒ) À妽º : À妽º¸¦ ºÐÇÒÇÏÁö ¾ÊÀ½
non-partitioned(ºñ ºÐÇÒ) B-Tree À妽º : balance tree ±¸Á¶·Î ÀúÀå
non-partitioned(ºñ ºÐÇÒ) Bitmap À妽º : bitmap ±¸Á¶·Î ´ë¿ë·®ÀÎ °æ¿ì
normal À妽º
reverse À妽º : B-Tree À妽º¿¡¼­ key Ä÷³ÀÇ °ªÀ» µÚÁý¾î¼­ ¹è¿­

PARTITIONED INDEX´Â Å×À̺íÀÇ µ¥ÀÌÅÍ ·®ÀÌ ³Ê¹« Ä¿¼­ ºÐÇÒµÈ Å×À̺íÀ» »ý¼ºÇÏ´Â °æ¿ì¿¡ Àû¿ëµÇ´Â ¹æ¹ýÀÌ´Ù. µû¶ó¼­ Å×ÀÌºí ºÐÇÒ¿¡ »ç¿ëµÇ¾ú´ø partition ±â´ÉÀ» »ç¿ëÇÏ¿© À妽º¸¦ ºÐÇÒÇÑ´Ù. ÀÌ·¸°Ô ºÐÇÒµÈ À妽º´Â °ü¸®Çϱ⵵ ÆíÇÏ°í, °¢ segment¸¦ ¿©·¯ °³ÀÇ tablespace¿¡ ³ª´©¾î ÀúÀåÇϹǷΠI/OÀÇ °æÇÕÀ» ÁÙÀÌ´Â È¿°úµµ ¾òÀ» ¼ö ÀÖ´Ù.

-- index »ý¼º ½Ã À¯ÀÇ»çÇ×
1) Ä÷³ÀÌ whereÀý ¶Ç´Â join Á¶°Ç¿¡¼­ ÀÚÁÖ »ç¿ëµÉ ¶§
2) Ä÷³¿¡ ±¤¹üÀ§ÇÑ °ªÀÌ Æ÷Ç﵃ ¶§
3) Ä÷³¿¡ ¸¹Àº ¼öÀÇ NULL°ªÀ» Æ÷ÇÔÇÒ ¶§
4) ´ëÇü Å×À̺íÀÌ°í ´ëºÎºÐÀÇ ÁúÀÇ°¡ 10~15% ÀÌÇÏ·Î ÀÐ¾î µéÀÏ °ÍÀ¸·Î ¿¹»óÇÒ ¶§

-- index¸¦ »ý¼ºÇÏÁö ¾Ê´Â °æ¿ì À¯ÀÇ»çÇ×
1) Å×ÀÌºí¿¡ ÀÚ·áÀÇ ¾çÀÌ ÀûÀ» ¶§
2) Ä÷³ÀÌ ÁúÀÇ Á¶°ÇÀ¸·Î ÀÚÁÖ »ç¿ëµÇÁö ¾ÊÀ» ¶§
3) ´ëºÎºÐÀÇ ÁúÀǵéÀÌ 10~15%ÀÌ»ó ÀÐ¾î µéÀÏ °ÍÀ¸·Î ¿¹»óµÉ ¶§
4) Å×À̺íÀÌ ÀÚÁÖ °»½ÅµÉ ¶§


-- Çü½Ä
-- B*Tree À妽º
CREATE INDEX À妽º¸í ON Å×À̺í¸í(Ä÷³¸í, ...);

-- Bitmap À妽º
CREATE BITMAP INDEX À妽º¸í ON Å×À̺í¸í(Ä÷³¸í, ...);

-- ÇÔ¼ö±â¹Ý À妽º
CREATE INDEX À妽º¸í ON Å×À̺í¸í(ÇÔ¼ö½Ä(Ä÷³¸í)| »ê¼ú½Ä);

-- ¿ª¹æÇâ À妽º
CREATE INDEX À妽º¸í ON Å×À̺í¸í(Ä÷³¸í1,Ä÷³¸í2,...) REVERSE;

-- ³»¸²Â÷¼ø À妽º
CREATE INDEX À妽º¸í ON Å×À̺í¸í(Ä÷³¸í1,Ä÷³¸í2,... DESC);

-- unique ¿É¼ÇÀº »ç¿ëÀÚ°¡ Á÷Á¢ uniqueÇÑ À妽º¸¦ »ý¼ºÇÏ°í ÇÒ ¶§ »ç¿ëÇÑ´Ù. µðÆúÆ®´Â non-unique À妽º·Î »ý¼ºÇÑ´Ù.
-- bitmap ¿É¼ÇÀº »ç¿ëÀÚ°¡ Á÷Á¢ bitmap index¸¦ »ý¼ºÇÏ°í ÇÒ ¶§ »ç¿ëÇÑ´Ù.

-- À妽º Á¤º¸ Á¶È¸
SELECT index_name, index_type, table_owner, table_name FROM user_indexes;
SELECT index_name, table_name, column_name FROM user_ind_columns;


-- À妽º »ý¼º
ÀڽŠ¼ÒÀ¯ÀÇ ½ºÅ°¸¶¿¡¼­ ÀÌ ¹®À» ½ÇÇàÇÏ·Á¸é UNLIMITED TABLESPACE ½Ã½ºÅÛ ±ÇÇÑÀÌ ÀÖ¾î¾ß ÇÏ°í,
´Ù¸¥ ½ºÅ°¸¶ÀÎ °æ¿ì CREATE ANY INDEX ½Ã½ºÅÛ ±ÇÇÑÀÌ ÀÖ¾î¾ß ÇÑ´Ù

--------------------------------------------
-- À妽º ½Ç½À Å×À̺í ÀÛ¼º
CREATE TABLE insa1 AS SELECT * FROM INSA;

INSERT INTO insa1 SELECT * FROM INSA;
INSERT INTO insa1 SELECT * FROM INSA;
INSERT INTO insa1 SELECT * FROM INSA;
INSERT INTO insa1 SELECT * FROM INSA;
INSERT INTO insa1 SELECT * FROM INSA;
-- ¿©·¯¹ø ½ÇÇà(¸¹ÀÌ)

-- À妽º ½Ç½À¿ë ÀÚ·á Ãß°¡
INSERT INTO insa1 (num, name, ssn, ibsaDate, city, tel, buseo, jikwi, basicPay, sudang) VALUES
(9001, 'ÀÚ¹Ù´Ù', '010101-1022432', SYSDATE, '¼­¿ï', '011-2356-4528', '±âȹºÎ', '»ç¿ø', 1150000, 100000);

COMMIT;

-- ¼º´ÉÇâ»óÀ» À§ÇØ ½Ã°£À» Ç¥½Ã
SET TIMING ON

-- ÀÎÅؽº¸¦ ÀÛ¼ºÇÏÁö ¾ÊÀº »óÅ¿¡¼­ °Ë»ö
SELECT name, ssn FROM insa1 WHERE name='ÀÚ¹Ù´Ù';


-- B-Tree À妽º
¾î¶² Çà¿¡ ´ëÇÑ access ȸ¼öµµ µ¿ÀÏÇÏ°Ô ÇÏ´Â ¹ÙÀ̳ʸ®ÀÇ ±ÕÇü Ž»ö treeÀÌ´Ù. ãÀ¸·Á´Â ÇàÀÌ Å×ÀÌºí ½ÃÀÛÀ̳ª ³¡ ¶Ç´Â Áß°£¿¡ À־ °ÅÀÇ °°Àº Ƚ¼ö ³»¿¡ ÁöÁ¤µÈ °ªÀ» accessÇÏ´Â È¿À²ÀûÀÎ ¹æ¹ýÀÌ´Ù.

B-tree index´Â binary search indexÀÇ ¾àÀÚÀ̸ç, Àϸí balence tree index¶ó°íµµ ºÎ¸¥´Ù.

¹ë·±½º Æ®¸® À妽º¸¦ ¸¸µå´Â ±âÁØÀº ´ÙÀ½°ú °°´Ù.
-- À妽º¸¦ ¸¸µé¾î¾ß ÇÏ´Â ¿­Àº DML(insert, update, delete) ¹®ÀÇ WHERE Àý¿¡ ÀÚÁÖ ³ª¿À´Â ¿­ÀÌ´Ù.
-- Á¶ÀεǴ Å×À̺íÀÇ Á¶ÀÎ ¿­¿¡´Â À妽º¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.
-- À妽º¿¡ NULL °ªÀÌ ÀúÀåµÇÁö ¾Ê±â ¶§¹®¿¡, NULL °ªÀÌ ¸¹Àº ¿­¿¡ À妽º¸¦ ¸¸µé¸é À¯¸®ÇÏ´Ù.
-- DML ¹®ÀåÀÇ WHERE Àý¿¡ ÀÇÇØ °Ë»öµÇ´Â µ¥ÀÌÅÍÀÇ Å×À̺í ÀüüÀÇ 10¢¦15%ÀÇ ¹üÀ§¿¡ ¼ÓÇÒ ¶§ À妽º¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.
-- ÇϳªÀÇ Å×ÀÌºí¿¡ À妽º¸¦ ¸¹ÀÌ ¸¸µé¸é update, deleteÇÒ ¶§ ½ÇÇà¼Óµµ°¡ ´Ê´Ù.(ÇϳªÀÇ Å×ÀÌºí¿¡ 3~4°³ÀÇ À妽º°¡ Àû´çÇÏ´Ù)

SELECT index_name, table_owner, table_name FROM user_indexes;
CREATE INDEX insa_name_idx ON insa1(name);
SELECT index_name, table_owner, table_name FROM user_indexes;

SELECT name, ssn FROM insa1 WHERE name='ÀÚ¹Ù´Ù';

-- À妽º »èÁ¦
DROP INDEX insa_name_idx;

-- Bitmap À妽º
Bitmap À妽º´Â À§¿¡¼­ ³»·Á¿À´Â °Í°ú´Â ´Þ¸® ¿©·¯ ´Ü°è¸¦ °ÅÄ¡Áö ¾Ê°í ´Ü¹ø¿¡ ÇØ´ç block¿¡ ã¾Æ°¡´Â °ÍÀ» ÀǹÌÇÑ´Ù. Áï, ¼Ò¼öÀÇ ´Ù¸¥ °ªÀ» °¡Áø Ä÷³¿¡ ´ëÇØ ÀûÇÕÇÑ Å¸ÀÔÀÇ À妽ºÀε¥, Ä÷³¿¡ ´ëÇØ ±Ø¼Ò¼öÀÇ ´Ù¸¥ °ªÀÌ Á¸ÀçÇÏ°í Äõ¸®¿¡¼­ Á¦ÇÑÁ¶°Ç(whereÀýÀÇ AND, OR¿¬»ê)À¸·Î¼­ ÀÌ Ä÷³À» ÀÚÁÖ »ç¿ëÇÏ´Â °æ¿ì Ä÷³¿¡ ´ëÇØ bitmap À妽º »ç¿ëÀ» °í·ÁÇØ¾ß ÇÑ´Ù.

-- ¾ÆÁÖ Å« Å×ÀÌºí¿¡¼­ °Ë»öÇÒ ¶§ »ç¿ë
-- UPDATE, INSERT, DELETE ¹®ÀÌ ÀÚÁÖ ½ÇÇàµÇÁö ¾Ê´Â Å×ÀÌºí¿¡ »ç¿ë
-- ÀÏ¹Ý À妽ºÀÇ Å©±â°¡ ³Ê¹« Å©°Å³ª À妽º »ý¼º ½Ã°£ÀÌ ³Ê¹« ¸¹ÀÌ ¼Ò¿äµÇ´Â °æ¿ì¿¡ »ç¿ë

CREATE BITMAP INDEX insa_name_idx ON insa1(name);
SELECT index_name, table_owner, table_name FROM user_indexes;

SELECT name, ssn FROM insa1 WHERE name='ÀÚ¹Ù´Ù';

-- À妽º »èÁ¦
DROP INDEX insa_name_idx;


-- Function based index(ÇÔ¼ö ±â¹Ý À妽º)
-- À妽º°¡ »ý¼ºµÉ Ä÷³¿¡´Â ÇÔ¼ö³ª »ê¼ú½Ä, »ó¼ö, »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ Àû¿ëÇÒ ¼ö ÀÖ´Ù.
-- ÇÔ¼ö±â¹Ý À妽º¸¦ »ý¼ºÇϸé bitmap À妽º°¡ »ý¼ºµÈ´Ù(default).
-- ÇÔ¼ö±â¹Ý À妽º »ý¼ºÀº system ±ÇÇÑÀÌ ÀÖ¾î¾ß °¡´ÉÇÏ´Ù.

CREATE INDEX insa_ssn_idx ON insa1(SUBSTR(ssn, 8, 1));
SELECT index_name, table_owner, table_name FROM user_indexes;

SELECT name, ssn FROM insa1 WHERE SUBSTR(ssn, 8, 1) IN (1, 3);

-- À妽º »èÁ¦
DROP INDEX insa_ssn_idx;


-- À妽º Àç»ý¼º
À妽º°¡ ¸¸µé¾îÁø ÈÄ INSERT, UPDATE°¡ ÀÏ¾î ³­ °æ¿ì ¿À¶óŬÀÌ ÀÚµ¿À¸·Î À妽º¸¦ °»½ÅÇÏÁö¸¸ DELETE´Â ³í¸®ÀûÀÎ »èÁ¦ °úÁ¤¸¸ ÀϾ°í À妽º´Â ±×´ë·Î ³²¾Æ ÀÖ´Ù. ÀÌ·± °æ¿ì À妽º¸¦ Àç »ý¼ºÇÑ´Ù.

ALTER ONDEX À妽º¸í REBUILD;


-- À妽º »èÁ¦

SELECT index_name, table_owner, table_name FROM user_indexes;

DROP INDEX insa_ssn_idx;

SELECT index_name, table_owner, table_name FROM user_indexes;

DROP TABLE insa1 PURGE;

 

 

 

 

 

 

 

 

 

 

 

¿À¶óŬ 10ÀÏÂ÷ ÀÚ·á Á¤¸® ¿Ï·á -

ÀÚ·á: KH Á¤º¸±³À°¿ø ÇÑÀåÈñ ±³¼ö´Ô

html tag ÀÛ¼º : Java 75±â ¾ö±â¹é


Mady by ¾ö±â¹é