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