[오라클 / PL-SQL] 오라클 예외처리 및 기본 예제
CREATE OR REPLACE PROCEDURE SP_USER_CONTROL(
SEL_MODE IN VARCHAR2,
P_X_ID IN X_TEMP_TABLE.X_ID%TYPE,
P_X_PW IN X_TEMP_TABLE.X_PW%TYPE,
ERROR_CODE OUT VARCHAR2, --에러코드 리턴
ERROR_MSG OUT VARCHAR2 --에러메시지
)IS
V_ERROR_CODE VARCHAR2(30); --예외코드 변수
V_ERROR_MSG VARCHAR2(1000); --예외메시지 변수
V_CNT NUMBER;
CALLEXT EXCEPTION; --사용자 예외 선언
BEGIN
IF SEL_MODE='1' THEN --INSERT
DBMS_OUTPUT.PUT_LINE('INSERT');
BEGIN
INSERT INTO X_TEMP_TABLE VALUES(P_X_ID,P_X_PW);
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
V_ERROR_CODE:='E001';
V_ERROR_MSG:='중복된 데이터로 인해 입력에 실패하엿습니다.';
RAISE CALLEXT; --사용자 예외 던지기
WHEN OTHERS THEN
RAISE; --예외 던지기
END;
ELSIF SEL_MODE='2' THEN --UPDATE
DBMS_OUTPUT.PUT_LINE('UPDATE');
BEGIN
SELECT COUNT(*) INTO V_CNT FROM X_TEMP_TABLE WHERE X_ID = P_X_ID;
IF V_CNT > 0 THEN
UPDATE X_TEMP_TABLE SET X_ID = P_X_ID, X_PW = P_X_PW WHERE X_ID = P_X_ID;
ELSE
V_ERROR_CODE:='E002';
V_ERROR_MSG:='대상 데이터가 검색되지 않앗습니다.';
RAISE CALLEXT; --사용자 예외 던지기
END IF;
EXCEPTION WHEN OTHERS THEN
RAISE; --예외 던지기
END;
ELSIF SEL_MODE='3' THEN --DELETE
DBMS_OUTPUT.PUT_LINE('DELETE');
BEGIN
SELECT COUNT(*) INTO V_CNT FROM X_TEMP_TABLE WHERE X_ID = P_X_ID;
IF V_CNT > 0 THEN
DELETE FROM X_TEMP_TABLE WHERE X_ID = P_X_ID;
ELSE
V_ERROR_CODE:='E002';
V_ERROR_MSG:='대상 데이터가 검색되지 않앗습니다.';
RAISE CALLEXT; --사용자 예외 던지기
END IF;
EXCEPTION WHEN OTHERS THEN
RAISE; --예외 던지기
END;
ELSIF SEL_MODE='4' THEN --TRUNCATE
DBMS_OUTPUT.PUT_LINE('TRUNCATE');
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE X_TEMP_TABLE';
EXCEPTION WHEN OTHERS THEN
RAISE; --예외 던지기
END;
ELSE
RAISE CALLEXT;
END IF;
ERROR_CODE:='E000';
ERROR_MSG:='정상적으로 처리되엇습니다.';
COMMIT;
EXCEPTION
WHEN CALLEXT THEN --사용자 예외
ERROR_CODE:=V_ERROR_CODE;
ERROR_MSG:=V_ERROR_MSG;
ROLLBACK;
WHEN NO_DATA_FOUND THEN
ERROR_CODE:='E002';
ERROR_MSG:='데이터를 찾을수가 없습니다.';
ROLLBACK;
WHEN OTHERS THEN
ERROR_CODE:='E004';
ERROR_MSG:=SQLERRM || SQLCODE;
ROLLBACK;
END SP_USER_CONTROL;
'-=-= 컴퓨터 =-=- > Database' 카테고리의 다른 글
[오라클] 월별 통계 (0) | 2014.03.01 |
---|---|
오라클 상태 조회 (0) | 2014.03.01 |
java.sql.SQLException: 논리적 핸들이 더 이상 유효하지 않습니다 (0) | 2013.03.11 |
오라클 split 함수 (0) | 2013.02.20 |
오라클 connect by 예제 (0) | 2012.10.31 |