๐Ÿ‘จโ€๐Ÿ’ป Oracle Call(ํ˜ธ์ถœ) ์ข…๋ฅ˜

 

์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Call(ํ˜ธ์ถœ)

์ฃผ์š” Call ์ข…๋ฅ˜

  1. Parse Call
  2. Bind Call
  3. Define Call
  4. Execute Call
  5. Fetch Call
  6. Close Call

1. Parse Call

Parse Call์€ SQL ๋ฌธ์žฅ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋ฌธ์žฅ์„ ๋ถ„์„ํ•˜๊ณ  ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ SQL ๋ฌธ์žฅ์ด ์ฒ˜์Œ ์ œ์ถœ๋  ๋•Œ์™€ ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Parse Call์˜ ๊ณผ์ •

  1. SQL ๋ฌธ์žฅ ์ˆ˜์‹ :
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ SQL ๋ฌธ์žฅ์„ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฌธ์žฅ ๋ถ„์„:
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋Š” SQL ๋ฌธ์žฅ์„ ํŒŒ์‹ฑํ•˜๊ณ  ๊ตฌ๋ฌธ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
  3. ์‹คํ–‰ ๊ณ„ํš ์ˆ˜๋ฆฝ:
    • ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ SQL ๋ฌธ์žฅ์˜ ์ตœ์  ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•ฉ๋‹ˆ๋‹ค.
  4. ํŒŒ์‹ฑ๋œ ๋ฌธ์žฅ ์บ์‹ฑ:
    • ํŒŒ์‹ฑ๋œ ๋ฌธ์žฅ๊ณผ ์‹คํ–‰ ๊ณ„ํš์€ ๊ณต์œ  ํ’€(Shared Pool)์— ์บ์‹ฑ๋˜์–ด ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ

SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = 30;

์ด SELECT ๋ฌธ์žฅ์ด ์ฒ˜์Œ ์ œ์ถœ๋  ๋•Œ Parse Call์ด ๋ฐœ์ƒํ•˜์—ฌ ๋ฌธ์žฅ์ด ๋ถ„์„๋˜๊ณ  ์‹คํ–‰ ๊ณ„ํš์ด ์ˆ˜๋ฆฝ๋ฉ๋‹ˆ๋‹ค.

2. Bind Call

Bind Call์€ SQL ๋ฌธ์žฅ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๋ณด์•ˆ ์ธก๋ฉด์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Bind Call์˜ ๊ณผ์ •

  1. ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜ ์„ค์ •:
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„๋กœ ์ „๋‹ฌ:
    • ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜ ๊ฐ’์ด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  3. ๋ณ€์ˆ˜ ๊ฐ’ ์‚ฌ์šฉ:
    • ์‹คํ–‰ ๊ณ„ํš์—์„œ ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ SQL ๋ฌธ์žฅ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

sqlCopy code
-- ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ
SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = :dept_id;

-- ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜ ํ• ๋‹น
EXEC SQL BIND :dept_id = 30;

์—ฌ๊ธฐ์„œ :dept_id๋Š” ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜์ด๋ฉฐ, Bind Call์„ ํ†ตํ•ด ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

3. Define Call

Define Call์€ SELECT ๋ฌธ์žฅ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด๋Š” Fetch Call์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

Define Call์˜ ๊ณผ์ •

  • ๊ฒฐ๊ณผ ๋ณ€์ˆ˜ ์ •์˜: ํด๋ผ์ด์–ธํŠธ๊ฐ€ SELECT ๋ฌธ์žฅ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

sqlCopy code
-- ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ
EXEC SQL DECLARE :result_var CURSOR FOR
SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = :dept_id;

์—ฌ๊ธฐ์„œ :result_var๋Š” Define Call์„ ํ†ตํ•ด ์ •์˜๋œ ๊ฒฐ๊ณผ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

4. Execute Call

Execute Call์€ ์ด๋ฏธ ์„ค๋ช…ํ•œ ๋ฐ”์™€ ๊ฐ™์ด SQL ๋ฌธ์žฅ์„ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

5. Fetch Call

Fetch Call์€ SELECT ๋ฌธ์žฅ์˜ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

6. Close Call

Close Call์€ SQL ๋ฌธ์žฅ ์‹คํ–‰ ํ›„, ์‚ฌ์šฉํ•œ ์ž์›์„ ํ•ด์ œํ•˜๊ณ  ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ปค์„œ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด๋ฅผ ๋‹ซ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Close Call์˜ ๊ณผ์ •

  1. ์ปค์„œ ๋‹ซ๊ธฐ:
    • ์‚ฌ์šฉํ•œ ์ปค์„œ๋ฅผ ๋‹ซ์•„ ์ž์›์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  2. ์„ธ์…˜ ์ •๋ฆฌ:
    • SQL ๋ฌธ์žฅ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ž์›์„ ํ•ด์ œํ•˜๊ณ  ์„ธ์…˜์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

sqlCopy code
-- ์ปค์„œ ๋‹ซ๊ธฐ ์˜ˆ์‹œ
EXEC SQL CLOSE cursor_name;

์ด ๋ช…๋ น์€ ์ด์ „์— ์—ด๋ฆฐ ์ปค์„œ๋ฅผ ๋‹ซ๊ณ  ์ž์›์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ์‹œ๋‚˜๋ฆฌ์˜ค

์˜ˆ์‹œ ์‹œ๋‚˜๋ฆฌ์˜ค: ์ง์› ์ •๋ณด ์กฐํšŒ

-- SQL ๋ฌธ์žฅ ์ค€๋น„
DECLARE
   dept_id NUMBER := 30;
   CURSOR emp_cursor IS
   SELECT employee_id, last_name, salary
   FROM employees
   WHERE department_id = :dept_id;
BEGIN
   OPEN emp_cursor;
   LOOP
      FETCH emp_cursor INTO emp_rec;
      EXIT WHEN emp_cursor%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(emp_rec.employee_id || ' ' || emp_rec.last_name || ' ' || emp_rec.salary);
   END LOOP;
   CLOSE emp_cursor;
END;
  1. Parse Call:
    • SQL ๋ฌธ์žฅ SELECT employee_id, last_name, salary FROM employees WHERE department_id = :dept_id๊ฐ€ ํŒŒ์‹ฑ๋ฉ๋‹ˆ๋‹ค.
  2. Bind Call:
    • :dept_id ๋ฐ”์ธ๋“œ ๋ณ€์ˆ˜์— ๊ฐ’ 30์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  3. Define Call:
    • emp_rec ๋ ˆ์ฝ”๋“œ ๋ณ€์ˆ˜๊ฐ€ SQL ๋ฌธ์žฅ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
  4. Execute Call:
    • SQL ๋ฌธ์žฅ์ด ์‹คํ–‰๋˜๊ณ  ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  5. Fetch Call:
    • ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ emp_rec ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ Fetch Call์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  6. Close Call:
    • SQL ๋ฌธ์žฅ ์‹คํ–‰ ํ›„, ์‚ฌ์šฉํ•œ ์ž์›์„ ํ•ด์ œํ•˜๊ณ  ์„ธ์…˜์„ ์ •๋ฆฌํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

์ด ์˜ˆ์‹œ๋Š” ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ SQL ๋ฌธ์žฅ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ์ „์ฒด ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฐ ํ˜ธ์ถœ(Call)์€ ํŠน์ • ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ, ์ „์ฒด ํ”„๋กœ์„ธ์Šค์˜ ์ผํ™˜์œผ๋กœ ์„œ๋กœ ์—ฐ๊ด€๋˜์–ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.