SET SERVEROUTPUT ON;
CREATE OR REPLACE PROCEDURE PR_EMP_TEST7(P_DEPT_NO NUMBER)
-- CURSOR 명 : EMP_CURSOR
-- EMP_CURSOR 에 조건에 맞는 TB_LS_EMP867 테이블에서 가져온 데이터들을 담아준다.
IS
CURSOR EMP_CURSOR IS
SELECT EMP_NO, EMP_ID, EMP_NM, DEPT_NO, SAL
FROM TB_LS_EMP867
WHERE DEPT_NO = &P_DEPT_NO;
-- 변수를 선언한다.
V_EMP_NO NUMBER(8) := 0;
V_EMP_ID VARCHAR2(30);
V_EMP_NM VARCHAR2(20);
V_DEPT_NO NUMBER(4) := 0;
V_SAL NUMBER(10) := 0;
BEGIN
OPEN EMP_CURSOR;
FETCH EMP_CURSOR INTO V_EMP_NO, V_EMP_ID, V_EMP_NM, V_DEPT_NO, V_SAL;
WHILE EMP_CURSOR%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(V_EMP_NM || '님의 레코드는 다음과 같습니다. : ' || V_DEPT_NO || ' | ' || V_EMP_NM || ' | '
|| V_EMP_ID || ' | ' || V_DEPT_NO || ' | ' || V_SAL );
--다음 커서를 가져와야하므로 빼먹어서는 안된다. 만약 빼먹으면 무한루프에 빠지게된다.
IF V_SAL > 3000000
THEN INSERT INTO EMP745(EMP_NO, EMP_NM, EMP_ID, DEPT_NO, SAL, INCOME_LVL)
VALUES(V_EMP_NO, V_EMP_NM, V_EMP_NM, V_DEPT_NO, V_SAL, '고소득');
ELSE
INSERT INTO EMP745(EMP_NO, EMP_NM, EMP_ID, DEPT_NO, SAL, INCOME_LVL)
VALUES(V_EMP_NO, V_EMP_NM, V_EMP_NM, V_DEPT_NO, V_SAL, '저소득');
END IF;
FETCH EMP_CURSOR INTO V_EMP_NO, V_EMP_ID, V_EMP_NM, V_DEPT_NO, V_SAL;
END LOOP;
CLOSE EMP_CURSOR;
END;
/
EXEC PR_EMP_TEST7(82);
SELECT * FROM EMP745;
DELETE FROM EMP745;
'PL-SQL' 카테고리의 다른 글
PL/SQL (14) PL/SQL의 종류 (0) | 2017.03.27 |
---|---|
PL/SQL (13) FOR .. LOOP을 활용하여 EMP745 테이블의 레코드를 업데이트하여라. (0) | 2017.03.27 |
PL/SQL (11) BASIC LOOP을 활용하여 EMP745 테이블의 레코드를 업데이트하여라. (0) | 2017.03.24 |
PL/SQL (10) FOR .. LOOP을 활용한 프로시저 예제 (0) | 2017.03.24 |
PL/SQL (9) FOR .. LOOP을 돌려보자. (0) | 2017.03.24 |