by 김정식 명시적 커서 EXPLICIT CURSOR OPEN FETCH CLOSE PL/SQL CURSOR [2002.01.20]


-- 특정 부서의 평균급여와 사원수를 출력.. SQL> CREATE OR REPLACE PROCEDURE ExpCursor_Test (v_deptno IN dept.deptno%TYPE) IS CURSOR dept_avg IS SELECT b.dname, COUNT(a.empno) cnt, ROUND(AVG(a.sal),3) salary FROM emp a, dept b WHERE a.deptno = b.deptno AND b.deptno = v_deptno GROUP BY b.dname ; -- 커서를 패치하기 위한 편수 선언 v_dname dept.dname%TYPE; emp_cnt NUMBER; sal_avg NUMBER; BEGIN -- 커서의 오픈 OPEN dept_avg; -- 커서의 패치 FETCH dept_avg INTO v_dname, emp_cnt, sal_avg; DBMS_OUTPUT.PUT_LINE('부서명 : ' || v_dname); DBMS_OUTPUT.PUT_LINE('사원수 : ' || emp_cnt); DBMS_OUTPUT.PUT_LINE('평균급여 : ' || sal_avg); -- 커서의 CLOSE CLOSE dept_avg; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 '); END; / -- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용 SQL> SET SERVEROUTPUT ON ; SQL> EXECUTE ExpCursor_Test(30); 부서명 : SALES 사원수 : 6 평균급여 : 1550.833
- 강좌 URL : http://www.gurubee.net/lecture/1064
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.
여기서는 DECLARE를 선언하지 않나요>??
커서의 사용 이유가 검색해보니 이렇게 나오네요.
오라클에서 CURSOR란 시스템 글로벌 영역의 공유 풀 내에 저장공간을 사용하여 사용자가 SQL 문을 실행시키면 결과값을 저장공간에 가지고 있다가 원하는 시기에 순차적으로 fetch해 처리하여 해당 결과 셋을 프로그래밍적으로 접근할수 있게 도와주는 기능이다.
질문이 있습니다.
커서라는게 다중의 값을 지정한 위치에서 꺼내오는 걸로 이해 했는데 그럼 table에서 값을 저장해 뽑아 보는 거와 무슨 차이가 있는 겁니까?
감사합니다.^^