PL/SQL๐Ÿ’ป

Jaenyยท2021๋…„ 6์›” 4์ผ
post-thumbnail

1. ๊ธฐ๋ณธ

๐Ÿ˜‹ ๊ธฐ๋ณธ ๋‹จ์œ„
๋ธ”๋ก

๐Ÿฑ๊ธฐ๋ณธ ํ˜•์‹

DECLARE ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์š”์†Œ ์„ ์–ธ
BEGIN ๋ช…๋ น์–ด ์‹คํ–‰ ๋ถ€๋ถ„
EXCEPTION ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(์ƒ๋žต ๊ฐ€๋Šฅ)
END; ๊ตฌ๋ฌธ ๋งˆ๋ฌด๋ฆฌ
/ PL/SQL๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค(RUN์˜ ์˜๋ฏธ)

๐Ÿข EX1>

SET SERVEROUTPUT ON; ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅ
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO');
ย ย ย ->DBMS_OUTPUT : ํŒจํ‚ค์ง€
ย ย ย ->PUT_LINE : ํ”„๋กœ์‹œ์ €
END;

2. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ข…๋ฅ˜

๐Ÿฑ๋ณ€์ˆ˜์„ ์–ธ

๋ณ€์ˆ˜์ด๋ฆ„ ์ž๋ฃŒํ˜• := ๊ฐ’;

๐Ÿฑ์ƒ์ˆ˜์„ ์–ธ

๋ณ€์ˆ˜์ด๋ฆ„ CONSTANT ์ž๋ฃŒํ˜• := ๊ฐ’;

๐Ÿฑ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์ง€์ •

๋ณ€์ˆ˜์ด๋ฆ„ ์ž๋ฃŒํ˜• DEFAULT ๊ฐ’;

**์ฐธ๊ณ **
- ๋ณ€์ˆ˜ ์ด๋ฆ„ ์ •ํ•˜๊ธฐ
1. ๊ฐ™์€ ๋ธ”๋ก ์•ˆ์—์„œ ๋ณ€์ˆ˜์ด๋ฆ„ ๊ณ ์œ ํ•ด์•ผ ํ•จ
2. ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ณ„ โŒ
3. ๋ฌธ์ž๋กœ ์‹œ์ž‘, ์˜์–ด(30์ž) / ํ•œ๊ธ€(15์ž), ํŠน์ˆ˜๋ฌธ์ž($ /# / _) ๊ฐ€๋Šฅ
4. SQL ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๊ธˆ์ง€

๐Ÿ˜‹ ๋ณ€์ˆ˜ ์ž๋ฃŒํ˜•
์Šค์นผ๋ผํ˜• - ์˜ค๋ผํด์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ •์˜ํ•ด๋†“์€ ์ž๋ฃŒํ˜•
์ฐธ์กฐํ˜• - 1)ํŠน์ • ํ…Œ์ด๋ธ” ์ž๋ฃŒํ˜•์ด๋‚˜ 2)ํ–‰ ๊ตฌ์กฐ ์ฐธ์กฐ

1) ํŠน์ • ํ…Œ์ด๋ธ” ์ž๋ฃŒํ˜• ์ฐธ์กฐ

๋ณ€์ˆ˜์ด๋ฆ„ ํ…Œ์ด๋ธ”์ด๋ฆ„%ROWTYPE;

2) ํ–‰ ๊ตฌ์กฐ ์ฐธ์กฐ

๋ณ€์ˆ˜์ด๋ฆ„ ํ…Œ์ด๋ธ”์ด๋ฆ„.์—ด์ด๋ฆ„%TYPE;

LOB - ๋Œ€์šฉ๋Ÿ‰์˜ ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ๋™์˜์ƒ, ์‚ฌ์šด๋“œ ๋ฐ์ดํ„ฐ ๋“ฑ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ €์žฅ์œ„ํ•œ ์ž๋ฃŒํ˜• ์ข…๋ฅ˜ : BLOB(BYTE), CLOB(CHARACTER)

3. ์กฐ๊ฑด๋ฌธ

๐ŸฑIF ๊ธฐ๋ณธํ˜•์‹

IF ์กฐ๊ฑด์‹ THEN ์ˆ˜ํ–‰ํ•  ๋ช…๋ น;
ELSIF ์กฐ๊ฑด์‹ THEN ์ˆ˜ํ–‰ํ•  ๋ช…๋ น;
ELSE THEN ์ˆ˜ํ–‰ํ•  ๋ช…๋ น;
END IF; -IF ์กฐ๊ฑด๋ฌธ ์ข…๋ฃŒ

๐Ÿฑ๋‹จ์ˆœ CASE ๊ธฐ๋ณธํ˜•์‹

CASE ๋น„๊ต๊ธฐ์ค€
ย ย ย WEHN ๊ฐ’1 THEN ์ˆ˜ํ–‰ํ•  ๋ช…๋ น;
ย ย ย ELSE ์ˆ˜ํ–‰ํ•  ๋ช…๋ น;
END CASE; -CASE ์กฐ๊ฑด๋ฌธ ์ข…๋ฃŒ

๐Ÿฑ๊ฒ€์ƒ‰ CASE ๊ธฐ๋ณธํ˜•์‹ *๊ฒ€์ƒ‰ CASE๋ฌธ์€ ๋น„๊ต๊ธฐ์ค€ ๋ช…์‹œX, ๊ฐ WHEN์ ˆ์— ์กฐ๊ฑด์‹ ๋ช…์‹œ

CASE
ย ย ย WEHN ์กฐ๊ฑด์‹1 THEN ์ˆ˜ํ–‰ํ•  ๋ช…๋ น;
ย ย ย WHEN ์กฐ๊ฑด์‹2 THEN ์ˆ˜ํ–‰ํ•  ๋ช…๋ น;
ย ย ย ELSE ์ˆ˜ํ–‰ํ•  ๋ช…๋ น;
END CASE; -CASE ์กฐ๊ฑด๋ฌธ ์ข…๋ฃŒ

4. ๋ฐ˜๋ณต๋ฌธ

๐Ÿ˜‹ ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฅ˜
1. ๊ธฐ๋ณธ LOOP โ‰’ do-while๋ฌธ
2. WHILE LOOP - ํŠน์ • ์กฐ๊ฑด ๋งŒ์กฑ์‹œ ๋ฐ˜๋ณต๋ฌธ ์ˆ˜ํ–‰
3. FOR LOOP - ๋ฐ˜๋ณต ํšŸ์ˆ˜ ์ •ํ•œ ๋ฐ˜๋ณต๋ฌธ
4. Cusor FOR LOOP - ์ปค์„œ ์ด์šฉ ๋ฐ˜๋ณต๋ฌธ

๐Ÿ˜‹ ๋ฐ˜๋ณต์ˆ˜ํ–‰ ์ค‘๋‹จ
1. EXIT - ์ˆ˜ํ–‰ ์ค‘ ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
2. EXIT-WHEN - ์กฐ๊ฑด์‹ ๋งŒ์กฑํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ

๐Ÿ˜‹ ํŠน์ • ๋ฐ˜๋ณต ์ฃผ๊ธฐ ๊ฑด๋„ˆ๋œ€
1. CONTINUE - ์ˆ˜ํ–‰์ค‘์ธ ํ˜„์žฌ ์ฃผ๊ธฐ ๊ฑด๋„ˆ๋œ€
2. CONTINUE-WHEN - ์กฐ๊ฑด์‹ ๋งŒ์กฑํ•˜๋ฉด ํ˜„์žฌ ์ฃผ๊ธฐ ๊ฑด๋„ˆ๋œ€

๐Ÿฑ๊ธฐ๋ณธ LOOP ๊ธฐ๋ณธํ˜•์‹

LOOP ๋ฐ˜๋ณต ์ˆ˜ํ–‰ ์ž‘์—…;
END LOOP; -LOOP ์ข…๋ฃŒ

๐ŸฑWHILE LOOP ๊ธฐ๋ณธํ˜•์‹

WHILE ์กฐ๊ฑด์‹ LOOP ๋ฐ˜๋ณต ์ˆ˜ํ–‰ ์ž‘์—…;
END LOOP; -LOOP ์ข…๋ฃŒ

๐ŸฑFOR LOOP ๊ธฐ๋ณธํ˜•์‹

FOR i IN (REVERSE-์—ญ์ˆœ) ์‹œ์ž‘๊ฐ’..์ข…๋ฃŒ๊ฐ’ LOOP ๋ฐ˜๋ณต ์ˆ˜ํ–‰ ์ž‘์—…;
END LOOP; -LOOP ์ข…๋ฃŒ

5. ๋ ˆ์ฝ”๋“œ

๐Ÿ˜‹ ๋ ˆ์ฝ”๋“œ
์ž๋ฃŒํ˜•์ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
(C์˜ struct(๊ตฌ์กฐ์ฒด)์™€ ๋น„์Šทํ•œ ์˜๋ฏธ)

๐Ÿฑ๊ธฐ๋ณธํ˜•์‹

TYPE ๋ ˆ์ฝ”๋“œ ์ด๋ฆ„ IS RECORD(
ย ย ย ๋ณ€์ˆ˜์ด๋ฆ„ ์ž๋ฃŒํ˜• (NOT NULL - ์„ค์ • ๋ฐ ์ƒ๋žต ๊ฐ€๋Šฅ) := ๊ฐ’,
ย ย ย ๋ณ€์ˆ˜์ด๋ฆ„ ์ž๋ฃŒํ˜• (NOT NULL - ์„ค์ • ๋ฐ ์ƒ๋žต ๊ฐ€๋Šฅ) := ๊ฐ’
);

- ํŠน์ง• : INSERT, UPDATE ๊ฐ€๋Šฅ

6. ์ปฌ๋ ‰์…˜

๐Ÿ˜‹ ์ปฌ๋ ‰์…˜
์ž๋ฃŒํ˜•์ด ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
(๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์˜๋ฏธ)

๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” varray๋งŒ ์•Œ์•„๋ณด๊ฒ ๋‹ค,,

๐ŸฑVARRAY ๊ธฐ๋ณธํ˜•์‹

TYPE ๋ฐฐ์—ด ์ด๋ฆ„ IS VARRAY(๋ฐฐ์—ด๊ธธ์ด) OF ์ž๋ฃŒํ˜•(๊ธธ์ด);
ย ย ย (type : ์ƒˆ๋กœ์šด ์ž๋ฃŒํ˜•์„ ๋งŒ๋“ค์–ด๋ƒ„)
๋ณ€์ˆ˜์ด๋ฆ„ ๋ฐฐ์—ด์ด๋ฆ„ := ๋ฐฐ์—ด์ด๋ฆ„(๊ฐ’,๊ฐ’..);
ย ย ย (DB์—์„œ๋Š” ๋ฐฐ์—ด์˜ index๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘๋จ)

7. ์ปค์„œ

๐Ÿ˜‹ ์ปค์„œ ์ •์˜

  • SQL๋ฌธ ์‹คํ–‰ ์‹œ SQL๋ฌธ ์ฒ˜๋ฆฌํ•˜๋Š” ์ •๋ณด๋ฅผ ์ €์žฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
    (์ •ํ™•ํžˆ ๋งํ•˜์ž๋ฉด ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋งํ•จ, C์–ธ์–ด์˜ ํฌ์ธํ„ฐ์™€ ๋น„์Šท)
  • ์ปค์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹คํ–‰๋œ SQL๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ˜‹๋ช…์‹œ์  ์ปค์„œ
1๋‹จ๊ณ„ : ์ปค์„œ ์„ ์–ธ
2๋‹จ๊ณ„ : ์ปค์„œ open
3๋‹จ๊ณ„ : ์ปค์„œ์—์„œ ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ(FETCH)
4๋‹จ๊ณ„ : ์ปค์„œ close

๐Ÿฑ๊ธฐ๋ณธํ˜•์‹

DECLARE
ย ย ย CURSOR ์ปค์„œ ์ด๋ฆ„ IS SQL๋ฌธ; -1๋‹จ๊ณ„
BEGIN
ย ย ย OPEN ์ปค์„œ ์ด๋ฆ„; -2๋‹จ๊ณ„
ย ย ย FETCH ์ปค์„œ์ด๋ฆ„ INTO ๋ณ€์ˆ˜ -3๋‹จ๊ณ„
ย ย ย CLOSE ์ปค์„œ ์ด๋ฆ„; -4๋‹จ๊ณ„
END;

๐ŸขEX>1

DECLARE
ย ย ย V_DEPT_ROW DEPT%ROWTYPE;
ย ย ย (์ปค์„œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•  ๋ณ€์ˆ˜ ์„ ์–ธ, V_DEPT_ROW์— DEPTํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰ ์ž๋ฃŒํ˜•๊ณผ ๊ฐ™์ด ์ง€์ •ํ•ด์ฃผ๊ฒ ๋‹ค)
CURSOR c1 IS
ย ย ย SELECT DEPTNO
ย ย ย FROM DEPT
ย ย ย WHERE DEPTNO=40; -๋ช…์‹œ์  ์ปค์„œ ์„ ์–ธ
BEGIN
OPEN c1; -์ปค์„œ open
FETCH c1 INTO V_DEPT_ROW; -์ปค์„œ๋กœ๋ถ€ํ„ฐ ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ
DBMS_OUTPUT.PUT_LINE('DEPTNO : ' || V_DEPT_ROW.DEPTNO);
CLOSE c1; -์ปค์„œ close
END;
/

๐Ÿ˜‹ ์ปค์„œ์™€ FOR LOOP ์‚ฌ์šฉ

  • FOR LOOP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด OPEN, FETCH, CLOSE๋ฌธ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค
    (๊ฐ ๋ช…๋ น์–ด๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ปค์„œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ๊ฐ„๋‹จํ•จ)

๐Ÿ˜‹ ์ปค์„œ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ

  • ๋ณดํ†ต, ๊ณ ์ • ๊ฐ’์ด ์•„๋‹Œ ์ง์ ‘ ์ž…๋ ฅํ•œ ๊ฐ’ ๋˜๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฒˆ๊ฐˆ์•„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ˜‹ ๋ฌต์‹œ์  ์ปค์„œ

  • ๋ณ„๋‹ค๋ฅธ ์„ ์–ธ ์—†์ด ์˜ค๋ผํด์—์„œ ์ž๋™์œผ๋กœ ์„ ์–ธ๋˜๋Š” ์ปค์„œ
    (์—ฌ๋Ÿฌ ํ–‰์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๋Š” ์ปค์„œ๋Š” ๋ช…์‹œ์  ์ปค์„œ๋กœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

์ปค์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ sql๋ฌธ์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅ๊ณต๊ฐ„์— ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ์›ํ•˜๋Š” ์‹œ๊ธฐ์— ์ˆœ์ฐจ์ ์œผ๋กœ FETCH ์ฒ˜๋ฆฌํ•ด ๊ฒฐ๊ณผ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

8. ์˜ˆ์™ธ์ฒ˜๋ฆฌ

๐Ÿฑ๊ธฐ๋ณธํ˜•์‹
๐ŸขEX1>

DECLARE
ย ย ย v_wrong NUMBER;
BEGIN
ย ย ย SELECT DNAME INTO v_wrong
ย ย ย FROM DEPT
ย ย ย WHERE DEPTNO=10;
EXCEPTION
ย ย ย WHEN VALUE_ERROR THEN
ย ย ย (VALUE_ERROR : ์‚ฌ์ „ ์ •์˜๋œ ์˜ˆ์™ธ ์ด๋ฆ„)
ย ย ย ย ย ย ย DBMS_OUTPUT.PUT_LINE('์˜ˆ์™ธ ์ฒ˜๋ฆฌ : ์ˆ˜์น˜ ๋˜๋Š” ๊ฐ’ ์˜ค๋ฅ˜ ๋ฐœ์ƒ');
ย ย ย WHEN OTHERS THEN
ย ย ย ย ย ย ย DBMS_OUTPUT.PUT_LINE('์˜ˆ์™ธ ์ฒ˜๋ฆฌ : ์‚ฌ์ „ ์ •์˜ ์™ธ ์˜ค๋ฅ˜ ๋ฐœ์ƒ');
END;
/

๐Ÿฑ์ด๋ฆ„ ์—†๋Š” ์˜ˆ์™ธ ์‚ฌ์šฉ ํ˜•์‹

DECLARE
ย ย ย ์˜ˆ์™ธ์ด๋ฆ„1 EXCEPTION;
ย ย ย (์˜ˆ์™ธ ์ด๋ฆ„ ์ง์ ‘ ์ง€์ •)
ย ย ย PRAGMA EXCEPTION_INIT(์˜ˆ์™ธ์ด๋ฆ„1, ์˜ˆ์™ธ๋ฒˆํ˜ธ);
ย ย ย (์˜ค๋ผํด ์˜ˆ์™ธ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ์ด๋ฆ„ ๋ถ™์ด๊ธฐ)
ย ย ย .
ย ย ย .
EXCEPTION
ย ย ย WHEN ์˜ˆ์™ธ์ด๋ฆ„1 THEN
ย ย ย ย ย ย ย ์˜ˆ์™ธ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉํ•  ๋ช…๋ น์–ด
ย ย ย ย ย ย ย .
ย ย ย ย ย ย ย .
END;

๐Ÿฑ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ์‚ฌ์šฉ ํ˜•์‹

DECLARE
ย ย ย ์‚ฌ์šฉ์ž ์˜ˆ์™ธ์ด๋ฆ„ EXCEPTION;
ย ย ย .
ย ย ย .
BEGIN
ย ย ย IF ์‚ฌ์šฉ์ž ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์กฐ๊ฑด THEN
ย ย ย ย ย ย ย RAISE ์‚ฌ์šฉ์ž ์˜ˆ์™ธ์ด๋ฆ„
ย ย ย ย ย ย ย (RAISE ํ‚ค์›Œ๋“œ ์ด์šฉํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ)
ย ย ย ย ย ย ย .
ย ย ย ย ย ย ย .
ย ย ย END IF;
EXCEPTION
ย ย ย WHEN ์‚ฌ์šฉ์ž ์˜ˆ์™ธ ์ด๋ฆ„ THEN
ย ย ย ย ย ย ย ์˜ˆ์™ธ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉํ•  ๋ช…๋ น์–ด
ย ย ย ย ย ย ย .
ย ย ย ย ย ย ย .
END;

9. ์ €์žฅ ์„œ๋ธŒ ํ”„๋กœ๊ทธ๋žจ

๐Ÿ˜‹ ์ €์žฅ ์„œ๋ธŒ ํ”„๋กœ๊ทธ๋žจ ์ •์˜

  • ์ด๋ฆ„์„ ๊ฐ–๋Š” PL/SQL์„ ๋งํ•œ๋‹ค
  • ์ข…๋ฅ˜ : ํ”„๋กœ์‹œ์ €, ํ•จ์ˆ˜, ํŒจํ‚ค์ง€, ํŠธ๋ฆฌ๊ฑฐ

10. ํ”„๋กœ์‹œ์ €

ํ”„๋กœ์‹œ์ €๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„, ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค

๐Ÿฑํ”„๋กœ์‹œ์ € ์ƒ์„ฑ

CREATE [OR REPLACE] PROCEDURE ํ”„๋กœ์‹œ์ € ์ด๋ฆ„
IS | AS
ย ย ย ์„ ์–ธ๋ถ€
BEGIN
(EXCEPTION
ย ย ย ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ถ€) - ์ƒ๋žต๊ฐ€๋Šฅ
END [ํ”„๋กœ์‹œ์ € ์ด๋ฆ„];
/

๐Ÿฑํ”„๋กœ์‹œ์ € ์‹คํ–‰

EXECUTE ํ”„๋กœ์‹œ์ € ์ด๋ฆ„;

๐Ÿฑํ”„๋กœ์‹œ์ € ์‚ญ์ œ

DROP PROCEDURE ํ”„๋กœ์‹œ์ € ์ด๋ฆ„;

๐ŸฑํŒŒ๋ผ๋ฏธํ„ฐ ์žˆ๋Š” ํ”„๋กœ์‹œ์ €

CREATE [OR REPLACE] PROCEDURE ํ”„๋กœ์‹œ์ € ์ด๋ฆ„
(
ย ย ย a IN NUMBER,
ย ย ย b NUMBER
)
(IN์€ ๊ธฐ๋ณธ๊ฐ’์ด๋ฏ€๋กœ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค)
IS | AS
ย ย ย ์„ ์–ธ๋ถ€(์ƒ๋žต ๊ฐ€๋Šฅ)
BEGIN
ย ย ย ์‹คํ–‰๋ถ€
(EXCEPTION
ย ย ย ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ถ€) - ์ƒ๋žต๊ฐ€๋Šฅ
END [ํ”„๋กœ์‹œ์ € ์ด๋ฆ„];
/

ํ”„๋กœ์‹œ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•จ์ˆ˜์™€ ๋‹ฌ๋ฆฌ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์ง€๋งŒ, OUT ๋ชจ๋“œ ํ˜น์€ IN OUT ๋ชจ๋“œ๋กœ ์„ค์ •์‹œ ํ”„๋กœ์‹œ์ € ์‹คํ–‰ ํ›„ ํ˜ธ์ถœํ•œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค

ํ”„๋กœ์‹œ์ €๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ ˆ์ฐจ ๊ทธ ์ž์ฒด๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

11. ํ•จ์ˆ˜

๐Ÿฑํ•จ์ˆ˜ ์ƒ์„ฑ

CREATE [OR REPLACE] FUNCTION ํ•จ์ˆ˜ ์ด๋ฆ„
(
ย ย ย a IN NUMBER
)
RETURN NUMBER -๋ฐ˜ํ™˜ ํƒ€์ž… ์„ค์ •
IS | AS
ย ย ย ์„ ์–ธ๋ถ€(์ƒ๋žต ๊ฐ€๋Šฅ)
BEGIN
ย ย ย ์‹คํ–‰๋ถ€
ย ย ย RETURN (๋ฐ˜ํ™˜๊ฐ’); -๋ฐ˜๋“œ์‹œ ์ง€์ •ํ•ด์ค„๊ฒƒ!
(EXCEPTION
ย ย ย ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ถ€) - ์ƒ๋žต๊ฐ€๋Šฅ
END [ํ•จ์ˆ˜ ์ด๋ฆ„];
/

๐Ÿ˜‹ ํ•จ์ˆ˜ ์‹คํ–‰

  • ์ต๋ช… ๋ธ”๋ก ๋˜๋Š” ํ”„๋กœ์‹œ์ €์™€ ๊ฐ™์€ ์ €์žฅ ์„œ๋ธŒํ”„๋กœ๊ทธ๋žจ, SQL๋ฌธ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ!
  • ํ•จ์ˆ˜ ๋ฐ˜ํ™˜๊ฐ’ ๋Œ€์ž…๋ฐ›์„ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•จ

๐Ÿฑํ•จ์ˆ˜ ์‚ญ์ œ

DROP FUNCTION ํ•จ์ˆ˜ ์ด๋ฆ„;

ํ•จ์ˆ˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์–ด๋– ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•ด ๋‚ด๋Š” ๊ฒƒ์ด๋‹ค

12. ํŒจํ‚ค์ง€

๐Ÿ˜‹ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

  • ํŒจํ‚ค์ง€ ๋ช…์„ธ + ํŒจํ‚ค์ง€ ๋ณธ๋ฌธ

๐ŸฑํŒจํ‚ค์ง€ ๋ช…์„ธ

CREATE [OR REPLACE] PACKAGE ํŒจํ‚ค์ง€ ์ด๋ฆ„
IS | AS
ย ย ย ์„œ๋ธŒํ”„๋กœ๊ทธ๋žจ์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด ์„ ์–ธ
END [ํŒจํ‚ค์ง€ ์ด๋ฆ„];

๐ŸฑํŒจํ‚ค์ง€ ๋ณธ๋ฌธ

CREATE [OR REPLACE] PACKAGE BODY ํŒจํ‚ค์ง€ ์ด๋ฆ„
IS | AS
ย ย ย ํŒจํ‚ค์ง€ ๋ช…์„ธ์—์„œ ์„ ์–ธํ•œ ์„œ๋ธŒํ”„๋กœ๊ทธ๋žจ์„ ํฌํ•จํ•œ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์ •์˜
ย ย ย ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํŒจํ‚ค์ง€ ๋ช…์„ธ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด ๋ฐ ์„œ๋ธŒํ”„๋กœ๊ทธ๋žจ๋„ ์ •์˜ ๊ฐ€๋Šฅ
END [ํŒจํ‚ค์ง€ ์ด๋ฆ„];

๊ทธ ์™ธ : ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ธŒํ”„๋กœ๊ทธ๋žจ ์ด๋ฆ„์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†์ง€๋งŒ, ์˜ค๋ฒ„๋กœ๋“œ๋Š” ๊ฐ€๋Šฅ

์ฐธ๊ณ  : ์ž๋ฐ”๊ฐ€ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ sql์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ™์Œ!

13. ํŠธ๋ฆฌ๊ฑฐ

๐Ÿ˜‹ ํŠธ๋ฆฌ๊ฑฐ ์ •์˜

  • DB์•ˆ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋Š” PL/SQL ์„œ๋ธŒํ”„๋กœ๊ทธ๋žจ

  • ํŠธ๋ฆฌ๊ฑฐ์˜ ์ข…๋ฅ˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€์ด์ง€๋งŒ, DML ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•จ

๐ŸฑDMLํŠธ๋ฆฌ๊ฑฐ ํ˜•์‹

CREATE [OR REPLACE] TRIGGER ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฆ„
BEFORE | AFTER
INSERT | UPDATE | DELETE ON ํ…Œ์ด๋ธ” ์ด๋ฆ„
(REFERENCEING OLD as old | NEW as new) -์ƒ๋žต๊ฐ€๋Šฅ < ๋ณ€๊ฒฝ ์ „/ํ›„ ๊ฐ’ ์ฐธ์กฐ ์‹œ ์‚ฌ์šฉ
FOR EACH ROW WHEN ์กฐ๊ฑด์‹
(FOLLOWS ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฆ„2, ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฆ„3 ..) - ์ƒ๋žต๊ฐ€๋Šฅ < ์—ฌ๋Ÿฌ ๊ด€๋ จ ํŠธ๋ฆฌ๊ฑฐ์˜ ์‹คํ–‰ ์ˆœ์„œ ์ง€์ •
(ENABLE | DISABLE) - ์ƒ๋žต๊ฐ€๋Šฅ < ํŠธ๋ฆฌ๊ฑฐ์˜ ํ™œ์„ฑํ™” ๋น„ํ™œ์„ฑํ™” ์ง€์ •
DECLARE
ย ย ย ์„ ์–ธ๋ถ€
BEGIN
ย ย ย ์‹คํ–‰๋ถ€
(EXCEPTION
ย ย ย ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ถ€)
END;

- ๋ณดํ†ต DML ํŠธ๋ฆฌ๊ฑฐ์˜ ํŠธ๋ฆฌ๊ฑฐ ์ž‘๋™ DML ๋ช…๋ น์–ด๊ฐ€ 1)INSERT์ธ ๊ฒฝ์šฐ ํƒ€์ด๋ฐ์„ AFTER, 2)UPDATE/DELETE์ธ ๊ฒฝ์šฐ ํƒ€์ด๋ฐ์„ BEFORE๋กœ ์ง€์ •ํ•œ๋‹ค
1) ์˜ ๊ฒฝ์šฐ ํƒ€์ด๋ฐ์ด AFTER์ด๋ฏ€๋กœ ์‚ฝ์ž…๋œ ๊ทธ ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ':NEW.์ปฌ๋Ÿผ๋ช…' ์„ ์‚ฌ์šฉ
2) ์˜ ๊ฒฝ์šฐ ํƒ€์ด๋ฐ์ด BEFORE์ด๋ฏ€๋กœ ์‚ญ์ œ/๋ณ€๊ฒฝ๋˜๊ธฐ ์ „ ๊ทธ ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ':OLD.์ปฌ๋Ÿผ๋ช…' ์„ ์‚ฌ์šฉ

profile
์กฐ์šฉํžˆ ๋„์ ๊ฑฐ๋ฆฌ๋Š” ๊ณต๋ถ€ ๊ธฐ๋ก์šฉ : )

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