๐Ÿ’ป

Oracle DBMS ๋ฐ SQL - ํ”„๋กœ์‹œ์ €(PROCEDURE), ์ €์žฅํ”„๋กœ์‹œ์ €์™€ ์ €์žฅํ•จ์ˆ˜ ๋ณธ๋ฌธ

KITRI/ORACLE

Oracle DBMS ๋ฐ SQL - ํ”„๋กœ์‹œ์ €(PROCEDURE), ์ €์žฅํ”„๋กœ์‹œ์ €์™€ ์ €์žฅํ•จ์ˆ˜

๋˜ํšจ๋‹ˆ 2020. 4. 20. 15:37

--PL/SQL => PL(Procedural Language Extension)/ SQL(Structured Query Language)

--DML์˜ ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ํ™œ์šฉ ํ•œ๊ณ„๋กœ SQL ์–ธ์–ด์— ์ ˆ์ฐจ์  ์–ธ์–ด์˜ ์š”์†Œ๋ฅผ ๋”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ 
--ํ–ฅ์ƒ์‹œํ‚จ ๊ธฐ๋Šฅ์ด๋‹ค. ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ํƒ‘์žฌ๋˜์–ด ์žˆ๋‹ค.

--DB์— ์ง์ ‘ ํƒ‘์žฌ๋˜์–ด ์ปดํŒŒ์ผ๋˜๊ณ  ์‹คํ–‰๋˜์–ด ์„ฑ๋Šฅ ๋ฉด์—์„œ๋„ ์šฐ์ˆ˜ํ•˜๋‹ค.

 

--1. ๊ธฐ๋ณธ๊ตฌ์„ฑ : DECLARE BEGIN EXCEPTION END

 

--1) ํ•จ์ˆ˜ ๊ตฌ์„ฑ

--์ถœ๋ ฅ์ฐฝ์—์„œ ๋ณด๋ ค๊ณ  ํ•˜๋ฉด์€ ๊ธฐ๋ณธ์„ค์ •์ธ OFF๋ฅผ ON์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผํ•œ๋‹ค.

 

 

--2) ์„ ํƒ์ฒ˜๋ฆฌ : IF THEN END IFIF THEN ELSE END IF, IF ~ THEN ~ ELSIF ~ END IF

 

 

--3) ๋ฐ˜๋ณต๋ฌธ : LOOP END LOOPFOR LOOP ~ END LOOPWHILE LOOP END LOOP

 

-- FOR LOOP ~ END LOOP

 

-- LOOP ~ END LOOP

 

-- WHILE ~ LOOP ~ END LOOP

 

 

-- 2. PL/SQL ์—์„œ SQL
-- 1) SELECT ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ INTO ์Šค์นผ๋ผ๋ณ€์ˆ˜ FROM ํ…Œ์ด๋ธ” WHERE

/* 2-1) PL/SQL ์‚ฌ์šฉํ•˜๋Š” DML ๋ช…๋ น์–ด
    1) SELECT ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ INTO ์Šค์นผ๋ผ๋ณ€์ˆ˜ FROM ํ…Œ์ด๋ธ” WHERE
    2) UPDATE ํ…Œ์ด๋ธ”๋ช… SET ์ปฌ๋Ÿผ๋ช… = ์Šค์นผ๋ผ๋ณ€์ˆ˜(๋ž˜ํผ๋Ÿฐ์Šค๋ณ€์ˆ˜),... ,.. WHERE ์กฐ๊ฑด์ ˆ [์Šค์นผ๋ผ/๋ž˜ํผ๋ณ€์ˆ˜]
    3) INSERT INTO ํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ) VALUES(์Šค์นผ๋ผ ๋˜๋Š” ๋ž˜ํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜, ..., ...)
    4) DELETE FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด์ ˆ [์Šค์นผ๋ผ/๋ž˜ํผ๋ณ€์ˆ˜]
*/

 


 

--3. ์ €์žฅ ํ”„๋กœ์‹œ์ €์™€ ํ•จ์ˆ˜ / ๊ถŒํ•œ ์„ค์ • grant create procedure, create session to (๊ณ„์ •์ด๋ฆ„);

--ํ•จ์ˆ˜์™€ ํ”„๋กœ์‹œ์ € : ๋ฐ˜ํ™˜๊ฐ’์ด ํ•˜๋‚˜๋ฉด ํ•จ์ˆ˜, ๋‘ ๊ฐœ ์ด์ƒ์ด๋ฉด ํ”„๋กœ์‹œ์ €

--ํ”„๋กœ์‹œ์ €๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. 

ํ”„๋กœ์‹œ์ € ๊ถŒํ•œ ์„ค์ • ๋ฐฉ๋ฒ•

 

[์ •๋ฆฌ]

--๋ทฐ๋Š” ์ž์ฃผ์“ฐ๋Š” ๊ฑฐ ํ…์ŠคํŠธ๋กœ ์ €์žฅํ•ด๋†“์€ ๊ฒƒ

--PL(์Šค์นผ๋ผ๋ณ€์ˆ˜, ๋ž˜ํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜, ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ)/SQL ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. (UPDATE, INSERT, SELECT, DELETE) ๋”ฐ๋ผ์„œ, ํ”„๋กœ์‹œ์ €์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

--ํ”„๋กœ์‹œ์ €๊ฐ€ ๋ญ์•ผ? ์ž์ฃผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” PL/SQL ๋ธ”๋ก์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. C๋‚˜ JAVA์–ธ์–ด์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•ด๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์“ด๋‹ค. 

 

 

 

--INSERT : INSERT INO ํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ) VALUES(์Šค์นผ๋ผ ๋˜๋Š” ๋ž˜ํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜, ..., ...)

 

--DELETE : UPDATE ํ…Œ์ด๋ธ”๋ช… SET ์ปฌ๋Ÿผ๋ช… = ์Šค์นผ๋ผ๋ณ€์ˆ˜(๋ž˜ํผ๋Ÿฐ์Šค๋ณ€์ˆ˜),... ,.. WHERE ์กฐ๊ฑด์ ˆ [์Šค์นผ๋ผ/๋ž˜ํผ๋ณ€์ˆ˜]

PL/SQL ํ”„๋กœ์‹œ์ €๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์–ด 9๋ฒˆ์ด ์‚ญ์ œ๋˜์—ˆ๋‹ค. 

 

--SELECT : SELECT ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ INTO ์Šค์นผ๋ผ๋ณ€์ˆ˜ FROM ํ…Œ์ด๋ธ” WHERE

--์‹คํ–‰์ด ์•ˆ๋œ๋‹ค. OUTํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๋ณ€์ˆ˜์˜ ์„ ์–ธ์ด ํ•„์š”ํ•˜๋‹ค.

 

--1) ๋ฐ”์ธ๋”ฉ ๋ณ€์ˆ˜ ์„ ์–ธ 

--VARIABLE ๋ณ€์ˆ˜๋ช… ์ž๋ฃŒํ˜•;

 

--2) ๋ณ€์ˆ˜ ์ถœ๋ ฅ           

--PRINT๋ณ€์ˆ˜๋ช…; 

 

 

 

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ์‹œ์— ํƒ€์ž…์— ์ฃผ์˜ํ•ด์„œ ์ž‘์„ฑํ•˜์ž

 

 

--4. CURSOR FETCH / ๋ณต์ˆ˜ํ–‰ ์ถœ๋ ฅ์‹œ์— ์‚ฌ์šฉํ•œ๋‹ค. 

-- ์ˆ˜๊ฐ• ํ…Œ์ด๋ธ” ๋‚ด์šฉ ์ถœ๋ ฅ

 

ํ”„๋กœ์‹œ์ €๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž‘์„ฑํ•ด๋ณด๊ณ  ์ˆ˜๊ฐ•ํ…Œ์ด๋ธ”์„ ์ถœ๋ ฅํ•˜๋Š” ์œ„์˜ ๊ฒฐ๊ณผ์™€ ๋˜‘๊ฐ™์€ ์ง€ ํ™•์ธํ•ด๋ณธ๋‹ค. 

 

--๋ถ€์„œ๋ฒˆํ˜ธ 10์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์› ์ถœ๋ ฅ

 

[์ •๋ฆฌ]

--์ปค์„œ ์„ ์–ธ

      CURSOR ์ปค์„œ์ด๋ฆ„ IS SELECT ๋ฌธ์žฅ;

 

--์ปค์„œ ์—ด๊ธฐ

          OPEN ์ปค์„œ์ด๋ฆ„;

 

--์ปค์„œ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ(LOOP END์˜ ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•œ๋‹ค)

          LOOP

                 FETCH ์ปค์„œ์ด๋ฆ„ INTO ์ €์žฅํ•  ๋กœ์ปฌ๋ณ€์ˆ˜

                 EXIT WHEN ์กฐ๊ฑด;

          END LOOP;

--์ปค์„œ๋‹ซ๊ธฐ

          CLOSE ์ปค์„œ์ด๋ฆ„;

 

--์ปค์„œ ์†์„ฑ

 %FOUND  -- PL/SQL ์ฝ”๋“œ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์–ป์€ ์ปค์„œ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉด ์ฐธ.

 %NOTFOUND -- %FOUND์˜ ๋ฐ˜๋Œ€

 %ROWCOUNT -- ์ปค์„œ์—์„œ ์–ป์€ ๋ ˆ์ฝ”๋“œ์ˆ˜ ๋ฐ˜ํ™˜

 %ISOPEN -- ์ปค์„œ๊ฐ€ ์—ด๋ ธ๊ณ  ์•„์ง ๋‹ซํžˆ์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด ์ฐธ

 

 

 

 

 

ํ…Œ์ด๋ธ”๋ช…์— ์ฃผ์˜ํ•˜๊ณ  ์ปดํŒŒ์ผ ํ›„ ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š” ์ง€ ์ฒดํฌํ•œ๋‹ค. 

 

--๊ณผ๋ชฉ๋ฒˆํ˜ธ 101๋ฒˆ ๋„ฃ๊ณ  ์‹คํ–‰ํ•œ๋‹ค. 

 

-- ํ•ฉ์„ ์ถœ๋ ฅํ•ด๋ณด์ž

 

 


--๋ณต์ˆ˜ํ–‰ EXECUTE() ์ถœ๋ ฅ์‹œ ๋ฐ”์ธ๋”ฉ ๋ณ€์ˆ˜ REFCURSOR ์‹คํ–‰ ํ•˜๊ธฐ ์œ„ํ•ด,

-- URSOR ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ๋‚˜์˜ ํ…Œ์ด๋ธ”์— ๋งž๊ฒŒ customize ํ•ด์•ผ๋œ๋‹ค.

/*

  %ROWTYPE์œผ๋กœ ํ–‰์„ ํ†ต์งธ๋กœ ๋ฐ›๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ๋ ˆ์ฝ”๋“œ์˜ ํ–‰์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ,

  ์ด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ธ๋”ฉ ๋ณ€์ˆ˜ ์ž๋ฃŒํ˜•์ด ์—†๋‹ค. 

  REFCURSOR์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋ฐ, ๋งˆ์น˜ JAVA์—์„œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค.

*/

 

--3-3) ํ”„๋กœ์‹œ์ € ์‚ญ์ œ


--4. ์ €์žฅํ•จ์ˆ˜ : PROCEDURE ์ฐจ์ด์ ์€ ๋ณต์ˆ˜ํ–‰ ์ถœ๋ ฅ์ด ์•ˆ๋จ(CURSOR, FETCH)

 

-- ํ”„๋กœ์‹œ์ €์—์„œ OUT ์—ฌ๋Ÿฌ๊ฐœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ €์žฅํ•จ์ˆ˜๋Š” RETURN ํ•˜๋‚˜  

 

 

๋ฐ”์ธ๋”ฉ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ถœ๋ ฅ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋ฐ˜์‘ํ˜•
Comments