์ปค์(Cursor)
ํ๋์ ๋ ์ฝ๋๊ฐ ์๋ ์ฌ๋ฌ ๋ ์ฝ๋๋ก ๊ตฌ์ฑ๋ ์์
์์ญ์์ SQL๋ฌธ์ ์คํํ๊ณ ๊ทธ ๊ณผ์ ์ ์๊ธด ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ
์ปค์์ ์ข ๋ฅ
แ์์์ ์ปค์ : ๋ชจ๋ DML๊ณผ PL/SQL SELECT๋ฌธ์ ๋ํด ์ ์ธ
แ๋ช ์์ ์ปค์ : ํ๋ก๊ทธ๋๋จธ์ ์ํด ์ ์ธ๋๋ฉฐ ์ด๋ฆ์ด ์๋ ์ปค์์ด๋ค
์์์ ์ปค์
์ค๋ผํด์ด๋ PL/SQL์คํ ๋ฉ์ปค๋์ฆ์ ์ํด ์ฒ๋ฆฌ๋๋ SQL๋ฌธ์ฅ์ด ์ฒ๋ฆฌ๋๋ ๊ณณ์ ๋ํ ์ต๋ช ์ ์ฃผ์
์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์คํ๋๋ ๋ชจ๋ SQL๋ฌธ์ฅ์ ์์์ ์ธ ์ปค์๊ฐ ์์ฑ๋๋ฉฐ, ์ปค์ ์์ฑ์ ์ฌ์ฉ
SQL ๋ฌธ์ด ์คํ๋๋ ์๊ฐ ์๋์ผ๋ก OPEN๊ณผ CLOSE
์์์ ์ปค์ ์์ฑ
- SQL%ROWCOUNT : ํด๋น SQL ๋ฌธ์ ์ํฅ์ ๋ฐ๋ ํ์ ์
-SQL%FOUND:ํด๋นSQL์ํฅ์๋ฐ๋ํ์์๊ฐ1๊ฐ์ด์์ผ๊ฒฝ์ฐTRUE
- SQL%NOTFOUND : ํด๋น SQL ๋ฌธ์ ์ํฅ์ ๋ฐ๋ ํ์ ์๊ฐ ์์ ๊ฒฝ์ฐ TRUE
- SQL%ISOPEN : ํญ์ FALSE, ์์์ ์ปค์๊ฐ ์ด๋ ค ์๋์ง์ ์ฌ๋ถ ๊ฒ์
๋ช ์์ ์ปค์
ํ๋ก๊ทธ๋๋จธ์ ์ํด ์ ์ธ๋๋ฉฐ ์ด๋ฆ์ด ์๋ ์ปค์๋ก ์ฌ๋ฌ row
์์ ์์
CURSOR ์ ์ธ → ์ปค์ OPEN → FETCH → ์ปค์ CLOSE
๋ช ์์ ์ปค์ ์์ฑ
- cursor_name %ROWCOUNT : ํ์ฌ๊น์ง ๋ฐํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์
- cursor_name %FOUND : FETCHํ ์ปค์๊ฐ ํ์ ๋ฐํํ๋ฉด TRUE
- cursor_name %NOTFOUND : FETCHํ ์ปค์๊ฐ ํ์ ๋ฐํํ์ง ์์ผ๋ฉด TRUE
- cursor_name %ISOPEN : ์ปค์๊ฐ OPEN ๋์ด ์์ผ๋ฉด TRUE
Cursor ์ ์ธ
๊ฒ์ํ ์ฟผ๋ฆฌ๋ฅผ ์ ์ธ
CURSOR cursor_name IS select_statement;
์ปค์ OPEN
แOPEN์ ์ปค์์์ ์ ์ธ๋ SELECT๋ฌธ์ ์คํ์ ์๋ฏธ
แ๋ฐ์ดํฐํ์ ์ถ์ถํ์ง ๋ชปํด๋ ์๋ฌ๊ฐ ๋ฐ์โ
OPEN cursor_name ;
FETCH
แFETCH๋ ํ์ฌ ๋ฐ์ดํฐ ํ์ OUTPUT๋ณ์์ ๋ฐํ ํ๋ค.
แ์ปค์์ SELECT๋ฌธ ์ปฌ๋ผ์ ์ ๋ฐ ๋ฐ์ดํฐ ํ์
์ OUTPUT๋ณ์์ ์ ๋ฐ ๋ฐ์ดํฐ ํ์
๊ณผ ์ผ์นํด์ผ ํจ
แ์ปค์๋ ํ ํ ์ฉ ๋ฐ์ดํฐ๋ฅผ FETCH
FETCH cursor_name INTO variable1, variable2;
FETCH cursor_name INTO record_variable; - ์ปค์ CLOSE
์ปค์ CLOSE
แOPEN๋ ์ปค์๋ ์ฌ์ฉ ์๋ฃ ํ ๋ฐ๋์ CLOSE
แ์ ์ธ ๋ SELECT๋ฌธ์ ์ ์ธ์ ํด์ ํ๋ค.
แ์ปค์๊ฐ CLOSE๋ ์ํ์์๋ FETCH๋ฅผ ํ ์ ์์
CLOSE cursor_name;
๋ช ์์ ์ปค์ ์ฌ์ฉ ์์
DECLARE
vName emp.name%TYPE;
vSal emp.sal%TYPE;
--1) ์ปค์ ์ ์ธ
CURSOR cur_emp IS SELECT name, sal FROM emp;
BEGIN
-- 2) ์ปค์ ์คํ
OPEN cur_emp;
LOOP
--3) FETCH
FETCH cur_emp INTO vName, vSal;
EXIT WHEN cur_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(vName || ' '|| vSal);
END LOOP;
--4) ์ปค์ CLOSE
CLOSE cur_emp;
END;
'๐ปProgramming > ๐ฝOracle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PL/SQL] ์ธ๋ฑ์ค (0) | 2022.08.18 |
---|---|
[PL/SQL] ์์ธ(Exception) ์ฒ๋ฆฌ (0) | 2022.08.18 |
[PL/SQL] ์ฌ์ฉ์ ์ ์ ํจ์ (0) | 2022.08.18 |
[PL/SQL] ํ๋ก์์ (0) | 2022.08.17 |
[PL/SQL] (0) | 2022.08.17 |