Oracle PL/SQL

zooyeongยท2023๋…„ 4์›” 27์ผ
0

13์ฃผ์ฐจ

๋ชฉ๋ก ๋ณด๊ธฐ
4/7
post-thumbnail

๐Ÿ“ŒPL/SQL

PL/SQL์ด๋ž€ ์˜ค๋ผํด์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ Procedural Language/SQL์˜ ์•ฝ์ž์ด๋‹ค. ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ ์ธ ์š”์†Œ๋ฅผ ๊ฑฐ์˜ ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ์‹ค๋ฌด์—์„œ ์š”๊ตฌ๋˜๋Š” ์ ˆ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋Šฅ๋ ฅ์ด๋‚˜ ์ •๋ณด๋ณดํ˜ธ, ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ณด์•ˆ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ, ๊ฐ์ฒด์ง€ํ–ฅ ๋“ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ด€๋ จ๋œ ์ค‘์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์ตœ์ ํ™”๋œ ์–ธ์–ด์ด๋‹ค.

PL/SQL ๊ธฐ๋ณธ ๊ตฌ์กฐ

  • ์„ ์–ธ๋ถ€(DECLARE), ์‹คํ–‰๋ถ€(BEGIN), ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ถ€(EXCEPTION)๋กœ ๊ตฌ์„ฑ
  • Anonymous PL/SQL Block(์ต๋ช…๋ธ”๋ก)๊ณผ Stored PL/SQL Block(์ €์žฅ๋œ๋ธ”๋ก)์ด ์žˆ์Œ
    ์ต๋ช…๋ธ”๋ก์€ ์ฃผ๋กœ ์ผํšŒ์„ฑ
    ์ €์žฅ๋œ๋ธ”๋ก์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐ˜๋ณตํ•ด์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

* Declare(์„ ์–ธ๋ถ€) : ๋ชจ๋“  ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ถ€๋ถ„

* Executable(์‹คํ–‰๋ถ€) : ์ œ์–ด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ํ•จ์ˆ˜์ •์˜ ๋“ฑ์˜ ๋กœ์ง์„ ๊ธฐ์ˆ 

* Exception(์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ถ€) : ์‹คํ–‰ ๋„์ค‘ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์žฅ๋“ค์„ ๊ธฐ์ˆ 

+) ๋ธ”๋ก ๋‚ด์˜ ๊ฐ ๋ถ€๋ถ„์— ํฌํ•จ๋˜๋Š” ๋ช…๋ น๋“ค ์ค‘ DECLARE, BEGIN, EXCEPTION๊ณผ ๊ฐ™์€ ์˜ˆ์•ฝ์–ด๋“ค์€ ์„ธ๋ฏธ์ฝœ๋ก (;)์œผ๋กœ ๋๋‚˜์ง€ ์•Š์ง€๋งŒ ๋‚˜๋จธ์ง€ ๋ช…๋ น์–ด๋“ค์€ SQL ๋ฌธ์žฅ์ฒ˜๋Ÿผ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋๋‚œ๋‹ค.

โ–ผ PL/SQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ PL/SQL ๋ฌธ์žฅ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„  SET SERCEROUTPUT ON; ๊ณผ ๊ฐ™์€ ์‚ฌ์ „ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

โ–ผ PL/SQL ๋‚ด์—์„œ์˜ SELECT ๋ฌธ์žฅ ์‚ฌ์šฉ

SELECT select_list
INTO variable_name1, variable_name2 ...
FROM table
[WHERE condition];

-> INTO ์—†์ด ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๋ฌธ๋ฒ•์„ ์ž˜ ๊ธฐ์–ตํ•ด๋‘์ž.

โ–ผ Reference ๋ณ€์ˆ˜ (์ฐธ์กฐ๋ณ€์ˆ˜)

  • ๋ณ€์ˆ˜๋ช… ํ…Œ์ด๋ธ”.์ปฌ๋Ÿผ%TYPE
    >>> ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๊ณผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐํ˜•์œผ๋กœ ์„ ์–ธ

  • ๋ณ€์ˆ˜๋ช… ํ…Œ์ด๋ธ”%ROWTYPE
    >>> ํ…Œ์ด๋ธ”์˜ ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์„ ํ•œ๊บผ๋ฒˆ์— ์ €์žฅํ•  ๋ณ€์ˆ˜๋กœ ์„ ์–ธ

โ–ผ ์ œ์–ด๋ฌธ

IF ๋ฌธ

IF (์กฐ๊ฑด) THEN ์‹คํ–‰๋ฌธ์žฅ;
ELSIF (์กฐ๊ฑด) THEN ์‹คํ–‰๋ฌธ์žฅ;
END IF;

>>> ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ๋„ฃ์„ ๋• ELSIF ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ณ , IF ๋ฌธ ์ข…๋ฃŒ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ END IF๋ฅผ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋ฐ˜๋ณต๋ฌธ

LOOP
	PL/SQL ๋ฌธ์žฅ;
    PL/SQL ๋ฌธ์žฅ;
    EXIT ์กฐ๊ฑด;
END LOOP;

>>> BASIC LOOP ๋ฐ˜๋ณต๋ฌธ์€ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๊ณ  ๋ฌธ์žฅ์„ ๋จผ์ € ์ˆ˜ํ–‰ํ•œ ํ›„์— ์กฐ๊ฑด์„ ํ™•์ธํ•œ๋‹ค.

WHILE ๋ฐ˜๋ณต๋ฌธ

While ์กฐ๊ฑด LOOP
	PL/SQL ๋ฌธ์žฅ
    PL/SQL ๋ฌธ์žฅ
END LOOP;

>>> BASIC LOOP๋ฌธ์€ ๋‚˜์ค‘์— ์กฐ๊ฑด์„ ๊ฒ€์ƒ‰ํ•˜์ง€๋งŒ WHILE๋ฌธ์€ ์‹œ์ž‘๋ถ€ํ„ฐ ์กฐ๊ฑด์„ ๋จผ์ € ๊ฒ€์‚ฌํ•œ ํ›„ PL/SQL ๋ฌธ์žฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ฆ‰ BASIC LOOP ๋ฌธ์€ ์กฐ๊ฑด์ด ํ‹€๋ ค๋„ PL/SQL ๋ฌธ์žฅ์ด 1ํšŒ๋Š” ์‹คํ–‰๋˜์ง€๋งŒ WHILE๋ฌธ์€ ์•„์˜ˆ ์‹คํ–‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

FOR ๋ฐ˜๋ณต๋ฌธ

FOR ๋ฐ˜๋ณตํ• ๋ณ€์ˆ˜ IN start...end LOOP
	statement1;
    statement2;
    ...
END LOOP;

>>> FOR ๋ฐ˜๋ณต๋ฌธ์€ ์ž๋ฐ”์˜ ํ–ฅ์ƒ๋œ FOR๋ฌธ๊ณผ ๋น„์Šทํ•˜๋‹ค. ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ง€์ • ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฐ˜๋ณตํ•  ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. (PL/SQL์—์„œ๋Š” ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ DECLARE ๋ถ€๋ถ„์—์„œ ์„ ์–ธํ•ด์•ผ ํ•จ.)
>>> ์—ญ์ˆœ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉฐ๋…€ IN ๋‹ค์Œ์— REVERSE ํ‚ค์›Œ๋“œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋˜๋Š”๋ฐ, ์ด ๋•Œ ์ฃผ์˜ํ•  ์ ์€ REVERSE๋ฅผ ์“ฐ๊ณ  ์‹œ์ž‘๋ฒˆํ˜ธ์™€ ๋ ๋ฒˆํ˜ธ๋Š” ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ์จ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


โ–ผPL/SQL Cursor

์˜ค๋ผํด ์„œ๋ฒ„์—์„œ๋Š” SQL๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„ํผ ์บ์‰ฌ์—์„œ ์ปค์„œ๋กœ ๋ณต์‚ฌํ•ด ์˜จ ํ›„ ์ปค์„œ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํ›„์† ์ž‘์—…์„ ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค. SQL ์ปค์„œ๋Š” ํฌ๊ฒŒ ๋ฌต์‹œ์  ์ปค์„œ์™€ ๋ช…์‹œ์  ์ปค์„œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๋ฌต์‹œ์  ์ปค์„œ๋Š” ์˜ค๋ผํด์—์„œ ์ž๋™์ ์œผ๋กœ ์„ ์–ธํ•ด์ฃผ๋Š” SQL ์ปค์„œ๋กœ์„œ, ์‚ฌ์šฉ์ž๋Š” ์ƒ์„ฑ ์œ ๋ฌด๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋ช…์‹œ์  ์ปค์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ์–ธํ•˜์—ฌ ์ƒ์„ฑ ํ›„ ์‚ฌ์šฉํ•˜๋Š” SQL ์ปค์„œ๋กœ, ์ฃผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ–‰์„ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋ช…์‹œ์  ์ปค์„œ ์„ ์–ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ช…์‹œ์  ์ปค์„œ ์„ ์–ธ(Declaration)

CURSOR ์ปค์„œ๋ช…
IS
	์ปค์„œ์— ๋‹ด๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜ค๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ

Cursor FOR Loop๋ฌธ ํ™œ์šฉ

FOR ๋ณ€์ˆ˜๋ช… IN ์ปค์„œ๋ช… LOOP
	statement1;
    statement2;
    ...
END LOOP;
profile
Have a good day โŒฏโ€™โ–พโ€™โŒฏ

0๊ฐœ์˜ ๋Œ“๊ธ€