더북(TheBook)

첫 번째 매개변수로 들어오는 사번에 해당하는 사원의 급여를, 두 번째 매개변수인 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 절이다.

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