์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค Call(ํธ์ถ)
์ฃผ์ Call ์ข ๋ฅ
- Parse Call
- Bind Call
- Define Call
- Execute Call
- Fetch Call
- Close Call
1. Parse Call
Parse Call์ SQL ๋ฌธ์ฅ์ ์คํํ๊ธฐ ์ ์ ํด๋น ๋ฌธ์ฅ์ ๋ถ์ํ๊ณ ์คํ ๊ณํ์ ์๋ฆฝํ๋ ๊ณผ์ ์ ๋๋ค. ์ด ๊ณผ์ ์ SQL ๋ฌธ์ฅ์ด ์ฒ์ ์ ์ถ๋ ๋์ ๋ฐ์ธ๋ ๋ณ์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ฐ์ํฉ๋๋ค.
Parse Call์ ๊ณผ์
- SQL ๋ฌธ์ฅ ์์ :
- ํด๋ผ์ด์ธํธ๊ฐ SQL ๋ฌธ์ฅ์ ์ ์ถํฉ๋๋ค.
- ๋ฌธ์ฅ ๋ถ์:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ SQL ๋ฌธ์ฅ์ ํ์ฑํ๊ณ ๊ตฌ๋ฌธ์ ๋ถ์ํฉ๋๋ค.
- ์คํ ๊ณํ ์๋ฆฝ:
- ์ตํฐ๋ง์ด์ ๊ฐ SQL ๋ฌธ์ฅ์ ์ต์ ์คํ ๊ณํ์ ์๋ฆฝํฉ๋๋ค.
- ํ์ฑ๋ ๋ฌธ์ฅ ์บ์ฑ:
- ํ์ฑ๋ ๋ฌธ์ฅ๊ณผ ์คํ ๊ณํ์ ๊ณต์ ํ(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์ ๊ณผ์
- ๋ฐ์ธ๋ ๋ณ์ ์ค์ :
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ธ๋ ๋ณ์์ ๊ฐ์ ํ ๋นํฉ๋๋ค.
- ์๋ฒ๋ก ์ ๋ฌ:
- ๋ฐ์ธ๋ ๋ณ์ ๊ฐ์ด ์๋ฒ๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ๋ณ์ ๊ฐ ์ฌ์ฉ:
- ์คํ ๊ณํ์์ ๋ฐ์ธ๋ ๋ณ์ ๊ฐ์ ์ฌ์ฉํ์ฌ 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์ ๊ณผ์
- ์ปค์ ๋ซ๊ธฐ:
- ์ฌ์ฉํ ์ปค์๋ฅผ ๋ซ์ ์์์ ํด์ ํฉ๋๋ค.
- ์ธ์
์ ๋ฆฌ:
- 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;
- Parse Call:
- SQL ๋ฌธ์ฅ
SELECT employee_id, last_name, salary FROM employees WHERE department_id = :dept_id
๊ฐ ํ์ฑ๋ฉ๋๋ค.
- SQL ๋ฌธ์ฅ
- Bind Call:
:dept_id
๋ฐ์ธ๋ ๋ณ์์ ๊ฐ30
์ด ํ ๋น๋ฉ๋๋ค.
- Define Call:
emp_rec
๋ ์ฝ๋ ๋ณ์๊ฐ SQL ๋ฌธ์ฅ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ณ์๋ก ์ ์๋ฉ๋๋ค.
- Execute Call:
- SQL ๋ฌธ์ฅ์ด ์คํ๋๊ณ ๊ฒฐ๊ณผ ์งํฉ์ด ์์ฑ๋ฉ๋๋ค.
- Fetch Call:
- ๊ฒฐ๊ณผ ์งํฉ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์
emp_rec
๋ณ์์ ์ ์ฅํฉ๋๋ค. - ๋ฃจํ๋ฅผ ํตํด ์ฌ๋ฌ ๋ฒ Fetch Call์ด ์ํ๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ ์งํฉ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์
- Close Call:
- SQL ๋ฌธ์ฅ ์คํ ํ, ์ฌ์ฉํ ์์์ ํด์ ํ๊ณ ์ธ์ ์ ์ ๋ฆฌํ๋ ๋จ๊ณ์ ๋๋ค.
์ด ์์๋ ์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ SQL ๋ฌธ์ฅ์ด ์ฒ๋ฆฌ๋๋ ์ ์ฒด ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค. ๊ฐ ํธ์ถ(Call)์ ํน์ ๋จ๊ณ์์ ์ํ๋๋ฉฐ, ์ ์ฒด ํ๋ก์ธ์ค์ ์ผํ์ผ๋ก ์๋ก ์ฐ๊ด๋์ด ์๋ํฉ๋๋ค.