๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์˜ค๋ผํด ๋™์  ์ฟผ๋ฆฌ ์‚ฌ์šฉ๋ฒ• & ์˜ˆ์ œ (PL/SQL)

by 5566 2023. 10. 10.

๊ฐœ์š”

๋™์  ์ฟผ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ ๋ณ€์ˆ˜๋‚˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์ด ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์‹คํ–‰๋˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ผํด์—์„œ๋Š” PL/SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PL/SQL์€ ์˜ค๋ผํด์˜ ํ”„๋กœ์‹œ์ €์™€ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •์  ์ฟผ๋ฆฌ์— ๋น„ํ•ด ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์˜ค๋ผํด์—์„œ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , ๋™์  ์ฟผ๋ฆฌ์˜ ์žฅ๋‹จ์ ์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋™์  ์ฟผ๋ฆฌ๋ž€?

๋™์  ์ฟผ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰ ์‹œ์ ์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์ด ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ณ€์ˆ˜๋‚˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์ด ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ •์  ์ฟผ๋ฆฌ๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ˜๋ฉด, ๋™์  ์ฟผ๋ฆฌ๋Š” ์‹คํ–‰ ์‹œ์ ์— ์‹ค์ œ ๋ฐ์ดํ„ฐ๋‚˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ์œผ๋กœ ์ธํ•ด ๋™์  ์ฟผ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์˜ ์กฐ๊ฑด์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ผํด์—์„œ๋Š” PL/SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PL/SQL์€ ์˜ค๋ผํด์˜ ํ”„๋กœ์‹œ์ €์™€ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๋ฝ์—์„œ๋Š” ์˜ค๋ผํด์—์„œ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ค๋ผํด์—์„œ์˜ ๋™์  ์ฟผ๋ฆฌ ์‚ฌ์šฉ๋ฒ•

์˜ค๋ผํด์—์„œ๋Š” PL/SQL์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PL/SQL์€ ์˜ค๋ผํด์˜ ํ”„๋กœ์‹œ์ €์™€ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

PL/SQL์—์„œ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

  1. ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์ €์žฅํ•  ๋ฌธ์ž์—ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋‚˜ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž (||)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ฟผ๋ฆฌ์— ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด EXECUTE IMMEDIATE ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. EXECUTE IMMEDIATE ๋ฌธ์€ ์‹คํ–‰ ์‹œ์ ์— ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์˜ค๋ผํด์—์„œ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค:

DECLARE
  query_str VARCHAR2(1000); -- ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ ์„ ์–ธ
  department_id NUMBER := 10; -- ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋ณ€์ˆ˜
  cursor_var SYS_REFCURSOR; -- ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ์ปค์„œ ๋ณ€์ˆ˜ ์„ ์–ธ
BEGIN
  -- ๋™์  ์ฟผ๋ฆฌ ์ƒ์„ฑ
  query_str := 'SELECT * FROM employees WHERE department_id = ' || department_id;

  -- ๋™์  ์ฟผ๋ฆฌ ์‹คํ–‰
  EXECUTE IMMEDIATE query_str INTO cursor_var;

  -- ๊ฒฐ๊ณผ ์ถœ๋ ฅ
  LOOP
    FETCH cursor_var INTO ...
    EXIT WHEN cursor_var%NOTFOUND;
    -- ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
  END LOOP;

  CLOSE cursor_var;
END;
/

์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” query_str ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋™์  ์ฟผ๋ฆฌ๋ฅผ EXECUTE IMMEDIATE ๋ฌธ์„ ํ†ตํ•ด ์‹คํ–‰ํ•˜๊ณ , cursor_var ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•œ ๋’ค, ์ปค์„œ๋ฅผ ๋‹ซ์•„์ค๋‹ˆ๋‹ค.

์˜ค๋ผํด์—์„œ์˜ ๋™์  ์ฟผ๋ฆฌ ์‚ฌ์šฉ๋ฒ•์€ ์œ„์˜ ์˜ˆ์ œ์™€ ์œ ์‚ฌํ•˜๋ฉฐ, ์‹ค์ œ๋กœ๋Š” ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ๋“ฑ์„ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์—ฌ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์  ์ฟผ๋ฆฌ์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

๋™์  ์ฟผ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰ ์‹œ์ ์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์ด ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋™์  ์ฟผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

์žฅ์ 

  1. ์œ ์—ฐ์„ฑ: ๋™์  ์ฟผ๋ฆฌ๋Š” ์‹คํ–‰ ์‹œ์ ์— ์กฐ๊ฑด์ด๋‚˜ ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๊ธฐ ์‰ฝ๊ณ , ๋ณต์žกํ•œ ์กฐ๊ฑด ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  2. ์„ฑ๋Šฅ ์ตœ์ ํ™”: ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹คํ–‰ ์‹œ์ ์— ์‹ค์ œ ๋ฐ์ดํ„ฐ๋‚˜ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ฟผ๋ฆฌ๋ฌธ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ์ฟผ๋ฆฌ๋ณด๋‹ค ๋” ํšจ์œจ์ ์ธ ์‹คํ–‰ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋ณด์•ˆ: ๋™์  ์ฟผ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ ๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ SQL ์ธ์ ์…˜ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ๊ฐ’์„ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋‚˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

  1. ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์›€: ๋™์  ์ฟผ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ์˜ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ , ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. SQL์˜ ๊ตฌ๋ฌธ ๊ฒ€์‚ฌ๊ฐ€ ์–ด๋ ค์›€: ๋™์  ์ฟผ๋ฆฌ๋Š” ์‹คํ–‰ ์‹œ์ ์— ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ฒดํฌํ•˜๊ฑฐ๋‚˜ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, SQL ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋ณด์•ˆ ์ทจ์•ฝ์ : ๋™์  ์ฟผ๋ฆฌ์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ž˜๋ชป๋œ ์ž…๋ ฅ์œผ๋กœ ์ธํ•ด ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์ธ์ ์…˜ ๋“ฑ์˜ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ ์ ˆํ•œ ๋ณด์•ˆ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋™์  ์ฟผ๋ฆฌ์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ๊ณ ๋ คํ•˜์—ฌ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ์œ ์—ฐ์„ฑ๊ณผ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•œ ์ ์ ˆํ•œ ์‚ฌ์šฉ๋ฒ•๊ณผ ๋ณด์•ˆ์— ๋Œ€ํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ์˜ ๋ณต์žก์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์›€์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™์  ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์˜ˆ์ œ

๋™์  ์ฟผ๋ฆฌ๋Š” ์˜ค๋ผํด์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ์ฟผ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ๋Š” ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ถ€์„œ์˜ ์ง์› ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

DECLARE
  query_str VARCHAR2(1000); -- ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ ์„ ์–ธ
  department_id NUMBER := 10; -- ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋ณ€์ˆ˜
  cursor_var SYS_REFCURSOR; -- ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ์ปค์„œ ๋ณ€์ˆ˜ ์„ ์–ธ
BEGIN
  -- ๋™์  ์ฟผ๋ฆฌ ์ƒ์„ฑ
  query_str := 'SELECT * FROM employees WHERE department_id = ' || department_id;

  -- ๋™์  ์ฟผ๋ฆฌ ์‹คํ–‰
  EXECUTE IMMEDIATE query_str INTO cursor_var;

  -- ๊ฒฐ๊ณผ ์ถœ๋ ฅ
  LOOP
    FETCH cursor_var INTO ...
    EXIT WHEN cursor_var%NOTFOUND;
    -- ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
  END LOOP;

  CLOSE cursor_var;
END;
/

์œ„ ์˜ˆ์ œ์—์„œ, query_str ๋ณ€์ˆ˜์—๋Š” ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋  ์ฟผ๋ฆฌ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. department_id ๋ณ€์ˆ˜๋Š” ์‹คํ–‰ ์‹œ์ ์— ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” department_id๊ฐ€ 10์ธ ๋ถ€์„œ์˜ ์ง์› ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฌธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

EXECUTE IMMEDIATE ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ query_str ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” cursor_var ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ํ›„, ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ FETCH ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์„œ์—์„œ ์ง์› ์ •๋ณด๋ฅผ ์ฝ์–ด์˜ค๊ณ , EXIT WHEN ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์ด์ƒ ๊ฒฐ๊ณผ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๋™์  ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๋ฌธ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€