๊ฐœ๋ฐœ.log/database

[ORACLE] PL/SQL(Procedural Language/SQL)์ด๋ž€?

๊ฐœ๋ฐœํ•˜๋Š” ์ฃผ๋””์”จ 2022. 12. 16. 13:37

DataBase ํ•˜๋ฉด Oracle.
๊ฑฐ์˜ ์ˆ˜์‹์–ด์ฒ˜๋Ÿผ ๋งํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

์—ฌ๋Š ๋•Œ์™€ ๋‹ค๋ฆ„์—†์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋˜ ์ค‘
Oracle์ด๋ผ๋Š” PL/SQL์„ ์ฒ˜์Œ ๋“ฃ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

PL/SQL ์ด๋ž€?

 

SQL์„ ํ™•์žฅํ•œ ์ ˆ์ฐจ์  ์–ธ์–ด(Procedural Language) ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” Oracle์˜ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์–ธ์–ด์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด SQL์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ SQL์˜ ํ™•์žฅํŒ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. PL/SQL์€ ๋ธ”๋กํ˜• ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์Šค์Šค๋กœ๊ฐ€ ์ปดํŒŒ์ผ ์—”์ง„์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ๋˜ํ•œ DML๊ณผ Query๋ฌธ, ์ ˆ์ฐจํ˜• ์–ธ์–ด(IF๋ฌธ, LOOP) ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•œ ๊ฐ•๋ ฅํ•œ ํŠธ๋žœ์žญ์…˜ ์–ธ์–ด์ด๋‹ค.

 

 

์žฅ์  ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

 

PL/SQL์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ธ ๋ธ”๋กํ˜• ๊ตฌ์กฐ๊ฐ€ ์ฃผ๋ชฉ๋ฐ›๋Š” ์ด์œ ๋Š” ๋‹ค์ˆ˜์˜ SQL๋ฌธ์„ ํ•œ ๋ฒˆ์— ORACLE DB๋กœ ๋ณด๋‚ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์ˆ˜ํ–‰ ์†๋„๋ฅผ ํ–ฅ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋Š” DB์—๊ฒŒ ๋Š˜ ๊ณผ์ œ์ธ ์†๋„ ๊ฐœ์„ ์—์„œ ๊ทน์ ์œผ๋กœ ๋„์™€์ค„ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ธ”๋ก์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ชจ๋“  ์š”์†Œ๋Š” ๋ชจ๋“ˆํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ๋ณด๋‹ค ์ด์‹์„ฑ์ด ์ข‹๋‹ค. ์ด๋Š” ๊ณง ๊ฐ•๋ ฅํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ์ž์™€ SQL์˜ ํ†ตํ•ฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ธฐ์กด SQL์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ์–ธ์–ด๋ผ๊ณ  ์„ค๋ช…ํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ํŠน์„ฑ์ด ๋ถˆํŽธํ–ˆ๋Š”์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€์ž.

โ–ถ ๊ธฐ์กด SQL์˜ ๋‹จ์ 

1) ๋ณ€์ˆ˜๊ฐ€ ์—†๋‹ค.
2) ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋ฌธ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์ƒ๋Œ€์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
3) ์ œ์–ด๋ฌธ IF, LOOP ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
4) ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ์—†๋‹ค.

 

ํŠน์ง•

 

DECLARE์ ˆ์—์„œ๋งŒ ๋ณ€์ˆ˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, BEGIN ์„น์…˜์—์„œ ์ƒˆ ๊ฐ’์ด ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋‹ค. IF๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ , ์ปค์„œ CURSOR๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ–‰์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•œ๋‹ค. PL/SQL์˜ SELECT๋ฌธ์€ ํ•ด๋‹น SELECT์˜ ๊ฒฐ๊ณผ๋ฅผ PL/SQL ์—”์ง„์œผ๋กœ ๋ณด๋‚ด๋Š”๋ฐ ์ด๋•Œ ์บ์น˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋ฅผ DECLARE ํ•ด์•ผ ํ•˜๊ณ , INTO ์ ˆ์„ ์„ ์–ธํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค. DECLARE, BEGIN, Exception๋ฌธ์„ ์ œ์™ธํ•œ END๋ฌธ๊ณผ ๋ชจ๋“  PL/SQL ๋ฌธ์žฅ์€ ์ค„์˜ ๋งˆ์ง€๋ง‰์— ์„ธ๋ฏธ์ฝœ๋ก (;)์„ ๋ฐ˜๋“œ์‹œ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.

 

 

๊ตฌ์กฐ (์„ ์–ธ๋ถ€ / ์‹คํ–‰๋ถ€ / ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ถ€): 3๊ฐœ์˜ ์„น์…˜

 

1) ์„ ์–ธ๋ถ€ (ํ•„์ˆ˜ X)

DECLARE๋ฌธ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๋ธ”๋ก์—์„œ ์‚ฌ์šฉ๋  ๋ณ€์ˆ˜, ์ƒ์ˆ˜, ์ปค์„œ, ์˜ˆ์™ธ Exception๋ฅผ ์„ ์–ธํ•˜๋Š” ์„น์…˜์œผ๋กœ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2) ์‹คํ–‰๋ถ€ (ํ•„์ˆ˜ O)

BEGIN๋ฌธ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ END;๋ฌธ์œผ๋กœ ์ข…๋ฃŒํ•˜๋ฉฐ ์ˆ˜ํ–‰๋  ์ž‘์—…์˜ body์ด๋‹ค. SQL๋ฌธ(SELECT/UPDATE/INSERT/DELETE), ์ œ์–ด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ์ปค์„œ ์†์„ฑ ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ๋ธ”๋ก์—์„œ ์‹คํ–‰ํ•  body๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3) ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ถ€ (ํ•„์ˆ˜ X)

์˜ˆ์™ธ์ฒ˜๋ฆฌ ์„น์…˜์€ END;๋ฌธ ๋ฐ”๋กœ ์•ž์— ์œ„์น˜ํ•˜๋ฉฐ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์˜ˆ์™ธ, ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ, Exception ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ ํ•˜๊ณ  ๋ช…์‹œ๋œ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ทจํ•  ์ž‘์—…์„ ์ •์˜ํ•œ๋‹ค. ์„ ์–ธ๋ถ€์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๊ณ  ์„ ํƒ์  ์„น์…˜์ด๋‹ค.

 

*) END๋ฌธ (ํ•„์ˆ˜ O)

 

 

PL/SQL์˜ ์ข…๋ฅ˜: (์ต๋ช… ๋ธ”๋ก vs. ์ด๋ฆ„์ด ์žˆ๋Š” ๋ธ”๋ก)

 

โ–ท ์ต๋ช… ๋ธ”๋ก

์ด๋ฆ„์ด ์—†๋Š” PL/SQL Block์œผ๋กœ DB์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์„ฑํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.

 

โ–ท ์ด๋ฆ„์ด ์žˆ๋Š” ๋ธ”๋ก

1) ํ”„๋กœ์‹œ์ € : ๋ฆฌํ„ด ๊ฐ’์„ ํ•˜๋‚˜ ์ด์ƒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ.

2) ํ•จ์ˆ˜: ๋ฆฌํ„ด ๊ฐ’์„ ํ•˜๋‚˜ ์ด์ƒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ.

3) ํŒจํ‚ค์ง€: ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์‹œ์ €, ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ์˜ˆ์™ธ ๋“ฑ์˜ ๋ฌถ์Œ.

4) ํŠธ๋ฆฌ๊ฑฐ : ์ง€์ •๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” PL/SQL ๋ธ”๋ก