-- 1. RANK 함수 알아보기
-- 2. REF CURSOR (DECLARE 절에서 선언 X, BEGIN 절에서 선언하는 CURSOR )
-- 동적 SQL 에서 커서를 사용하기 위한 CURSOR ( 중요★☆ )
-- 1) 커서를 사용하려면 아래와 같은 절차가 진행된다. ★
-- CURSOR 선언 >> CURSOR OPEN >> CURSOR에 있는 내용 FETCH >> CURSOR CLOSE
-- 2) 아래의 예와 같이 선언하면 쿼리의 결과가 ○ 메모리 ○ 에 적재된다. ★
-- ex) CURSOR EMP_CURSOR IS
-- SELECT EMP_NO, EMP_ID
-- FROM TB_LS_EMP867;
-- 3) 우리가 알고있는 커서 선언은 DECLARE 절 OR(IS..) 에서 수행하는데,
-- REF CURSOR는 커서선언이 BEGIN 절에서 이루어진다 ★
-- 4) 동적 SQL에서 커서를 사용하려면 REF CURSOR 를 사용해야한다. ★
-- 예제 1) 부서번호를 입력하면 해당 부서번호인 사원들의 정보가 출력되게 하는 프로시저를
-- 생성하는데, 82번 부서번호를 입력해서 수행할때는 월급이 3000000원보다 큰 사원들의 정보만
-- 출력되게 하라.
-- BASIC LOOP과 동적SQL, REF CURSOR를 활용하여 여러개의 행이 결과로 출력될 수 있도록 해야한다.
CREATE OR REPLACE PROCEDURE PR_USING_REF_CURSOR
(P_DEPT_NO NUMBER)
IS
/* 먼저 타입을 선언해야한다. 타입명 : EMP_REF_CSR */
-- REF CURSOR를 사용하기 위한 TYPE을 선언해준다.
TYPE EMP_REF_CSR IS REF CURSOR;
-- 위에서만든 REF CURSOR 타입의 EMP_REF_CSR TYPE으로 EMP_CURSOR 라는 REF CURSOR를 선언
EMP_CURSOR EMP_REF_CRS;
-- EMP_RECORD 를 선언한다.
EMP_RECORD TB_LS_EMP867%ROWTYPE;
V_STMT VARCHAR2(200);
BEGIN
V_STMT := 'SELECT EMP_NO, EMP_NM, EMP_ID, DEPT_NO, SAL
, INCOME_LVL FROM TB_LS_EMP867 WHERE DEPT_NO = :BUSEO_NUM';
OPEN EMP_CURSOR FOR V_STMT USING P_DEPT_NO;
FOR EMP_RECORD IN EMP_CURSOR LOOP
IF EMP_RECORD.SAL > 3000000
THEN DBMS_OUT.PUT_LINE('고소득:'||EMP_RECORD.SAL);
ELSE
DBMS_OUT.PUT_LINE('저소득:'||EMP_RECORD.SAL);
END IF;
END LOOP;
EXCEPTION WHEN OTHERS THEN DBMS_OUT.PUT_LINE('Error Number: '||SQLERRM);
END;
/
'PL-SQL' 카테고리의 다른 글
PL/SQL (20) 패키지 Package (1) (0) | 2017.03.29 |
---|---|
PL/SQL (19) 인기과정테이블의 일부 데이터를 추천과정 테이블로 insert하는 프로시저 (0) | 2017.03.28 |
PL/SQL (17) 동적 SQL개념 및 예제 (0) | 2017.03.27 |
PL/SQL (16) EXCEPTION 및 예제 (0) | 2017.03.27 |
PL/SQL (15) PL/SQL 정리 및 예제 (0) | 2017.03.27 |