RETURN문
함수에서 사용한 RETURN문을 프로시저에서도 사용할 수 있는데 그 쓰임새와 처리 내용은 다르다. 함수에서는 일정한 연산을 수행하고 결과 값을 반환하는 역할을 했지만, 프로시저에서는 RETURN문을 만나면 이후 로직을 처리하지 않고 수행을 종료, 즉 프로시저를 빠져나가 버린다. 반복문에서 일정 조건에 따라 루프를 빠져나가기 위해 EXIT를 사용하는 것과 유사하다.
예를 들어, my_new_job_proc 프로시저에서 세 번째 매개변수인 최소 급여값은 반드시 1000 이상이어야 하며, 이보다 작은 값이 들어오면 INSERT나 UPDATE를 수행하지 않아야 한다고 해보자. 그렇다면 최소 급여값을 체크해서 1000보다 작으면 아무 것도 처리하지 않아야 하는데, 이럴 때 RETURN문을 사용하면 편리하다. 다음 예제를 살펴 보자.
입력
CREATE OR REPLACE PROCEDURE my_new_job_proc
( p_job_id IN JOBS.JOB_ID%TYPE,
p_job_title IN JOBS.JOB_TITLE%TYPE,
p_min_sal IN JOBS.MIN_SALARY%TYPE := 10,
p_max_sal IN JOBS.MAX_SALARY%TYPE := 100
--p_upd_date OUT JOBS.UPDATE_DATE%TYPE
)
IS
vn_cnt NUMBER := 0;
vn_cur_date JOBS.UPDATE_DATE%TYPE := SYSDATE;
BEGIN
-- 1000 보다 작으면 메시지 출력 후 빠져 나간다
IF p_min_sal < 1000 THEN
DBMS_OUTPUT.PUT_LINE('최소 급여값은 1000 이상이어야 합니다');
RETURN;
END IF;
-- 동일한 job_id가 있는지 체크
SELECT COUNT(*)
INTO vn_cnt
FROM JOBS
WHERE job_id = p_job_id;
...
...
결과
PROCEDURE MY_NEW_JOB_PROC이(가) 컴파일되었습니다.
최소 급여값이 1000보다 작으면 그 이후 어떤 로직도 처리할 필요가 없으므로 IF문을 사용해 p_min_sal 값이 1000보다 작은지 체크해서, 작다면 메시지를 출력하고 RETURN문을 만나 프로시저를 빠져나가고 있다(참고로 위 예제에서는 OUT 매개변수와 처리 부분을 제거했다). 프로시저를 실행해 보자.
입력
EXEC my_new_job_proc ('SM_JOB1', 'Sample JOB1', 999, 6000);
결과
최소급여값은 1000 이상이어야 합니다
예상했던 대로 최소 급여값으로 999를 넘기니 메시지가 출력되었다. 실제 JOBS 테이블을 조회해 보면 INSERT나 UPDATE가 발생하지 않았다는 것을 확인할 수 있을 것이다.
지금까지 PL/SQL에서 제공하는 제어문과 함수, 프로시저에 대해서 살펴 보았다. 다시 한 번 강조하는데 DB 프로그래밍을 한다는 것은 PL/SQL을 사용해 함수나 프로시저, 그리고 이후에 배울 패키지를 작성하는 것을 말한다. 따라서 특정 로직을 처리하기 위해 함수나 프로시저를 작성하는 것에 익숙해져야 한다.
이 장에서 살펴 본 예제 코드를 이해해 충분히 내용을 습득한 뒤 연습문제를 풀어보자. PL/SQL을 처음 학습하는 독자 입장에서는 연습문제 내용이 좀 어려울 수 있지만, 완전히 이해하고 나면 한층 실력이 향상된 것을 느낄 수 있을 것이다.