반응형
RETURN
함수에서 사용한 RETURN문을 프로시저에서도 사용할수 있는데, 그 쓰임새와 처리 내용은 다르다. 함수에서는 일정한 연산을 수행하고 결과 값을 반환하는 역할을 했지만, 프로시저에서는 RETURN 문을 만나면 이후 로직을 처리하지 않고 수행을 종료 , 즉 프로시저를 빠져나가 버린다. 반복문에서 일정 조건에 따라 루프를 빠져나가기 위해 EXIT 를 사용하는 것과 유사하다.
예를 프로시저에서 세번째 매개변수인 최소 급여값은 반드시 1000이상이어야 하며 , 이보다 작은 값이 들어오면 INSERT 나 UPDATE를 수행하지 않아야 한다고 해보자 그렇다면 최소 급여값을 체크해서 1000보다 작으면 아무것도 처리하지 않아야 하는데, 이럴때 RETURN 문을 사용하면 편리하다.
CREATE OR REPLACE PROCEDURE MY_NEW_JOB
(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
IF P_MIN_SAL < 1000 THEN
DBMS_OUTPUT.PUT_LINE('최소 급여값은 1000 이상이어야합니다.');
RETURN;
END IF;
--동일한 아이디가 있는지 체크-
SELECT COUNT(*)
INTO VN_CNT
FROM JOBS
WHERE JOB_ID = P_JOB_ID;
IF VN_CNT = 0 THEN
INSERT INTO JOBS (JOB_ID,JOB_TITLE,MIN_SALARY,MAX_SALARY,ADD_DATE,UPDATE_DATE)
VALUES (P_JOB_ID,P_JOB_TITLE,P_MIN_SAL,P_MAX_SAL,VN_CUR_DATE,VN_CUR_DATE);
ELSE
UPDATE JOBS
SET JOB_TITLE = P_JOB_TITLE,
MIN_SALARY = P_MIN_SAL,
MAX_SALARY = P_MAX_SAL,
UPDATE_DATE = VN_CUR_DATE
WHERE JOB_ID = P_JOB_ID;
END IF;
P_UPD_DATE := VN_CUR_DATE;
COMMIT;
END MY_NEW_JOB;
실행문
DECLARE
VN_CUR_DATE JOBS.UPDATE_DATE%TYPE;
BEGIN
MY_NEW_JOB('TEST_JOB4','SAMPLE_JOB4',999,6000, VN_CUR_DATE);
END;
급여가 1000 보다 작으면 그 이후 어떤 로직도 저리할 필요가 없으므로 IF 문을 사용해 급여 갑이 1000보다 작은지 체크해서 작다면 메세지를 출력하고 RETURN 문을 만나 프로시저를 빠져나가고 있다.
실제로 테이블을 조회하면 입력한 데이터값이 전달되지 않은것을 확인할수 있다.
반응형
'DB' 카테고리의 다른 글
Oracle PL/SQL 프로시저[사용자 정의예외처리] (0) | 2020.12.27 |
---|---|
Oracle PL/SQL[프로시저/예외처리] (0) | 2020.12.27 |
Oracle PL/SQL[프로시저] (0) | 2020.12.26 |
Oracle PL/SQL 의 사용자 정의함수 (0) | 2020.12.24 |
Oracle(PL/SQL) 제어문 (0) | 2020.12.24 |