첫 번째 매개변수로 들어오는 사번에 해당하는 사원의 급여를, 두 번째 매개변수인 pn_rate 비율로 곱한 값을 갱신하는 프로시저다. 만약 pn_rate 값이 10이면 해당 사원의 급여는 기존 급여의 10% 금액으로 갱신된다. 그런데 하단의 DBMS_OUTPUT.PUT_LINE을 사용한 부분을 보면 사번인 employee_id 값은 알 수 있지만 새로 갱신되는 급여 값은 알 수가 없다. 갱신된 급여를 알고 싶다면 다시 사원 테이블에서 해당 사원의 급여를 조회해야 한다.

    입력

        CREATE OR REPLACE PROCEDURE ch17_upd_test_prc ( pn_emp_id NUMBER,
                                                        pn_rate   NUMBER )
        IS
          vn_salary NUMBER := 0; -- 갱신된 급여를 받아올 변수
        BEGIN
          -- 급여 = 급여 * pn_rate * 0.01
          UPDATE employees
             SET salary = salary * pn_rate * 0.01
           WHERE employee_id = pn_emp_id;
    
          -- 급여를 조회한다.
          SELECT salary
            INTO vn_salary
            FROM employees
           WHERE employee_id = pn_emp_id;
    
          DBMS_OUTPUT.PUT_LINE('사번 : ' || pn_emp_id);
          DBMS_OUTPUT.PUT_LINE('급여 : ' || vn_salary);
    
          COMMIT;
        END;
    

    결과

        PROCEDURE CH17_UPD_TEST_PRC이(가) 컴파일되었습니다.
    

    입력

        EXEC ch17_upd_test_prc (171, 10)
    

    결과

        사번 : 171
        급여 : 740
    

    위 결과를 보면 171번 사원의 급여가 10%로 깎여 740으로 갱신된 것을 알 수 있지만, 이를 위해 UPDATE문을 실행한 후 다시 SELECT문을 사용해 해당 사원정보를 읽어와야 했다. UPDATE문이야 그렇다 해도 DELETE문에서는 삭제된 데이터를 찾아오는 것은 불가능한 일이다.하지만 INSERT, UPDATE문을 실행한 후 다시 해당 테이블을 조회하지 않아도 새로 입력되거나 갱신된 데이터를 알 수 있으며 게다가 DELETE된 데이터까지 찾아낼 수 있는 방법이 있는데 바로 그 주인공은 RETURNING INTO 절이다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.