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;

+ Recent posts