# 예외처리

<예외처리 구문>

EXCEPTION WHEN 예외명1 THEN 예외처리 구문1

                WHEN 예외명2 THEN 예외처리 구문2

                ...

                WHEN OTHERS THEN 예외처리 구문n;

 

예외 정보를 참조하기 위해 오라클에서 SQLCODE, SQLERRM이란 빌트인 함수를 제공한다.

 

자세한 예외 정보 확인하기

 - DBMS_UTILITY.FORMAT_ERROR_BACKTRACE

 - DBMS_UTILITY.FORMAT_ERROR_STACK

 - DBMS_UTILITY.FORMAT_CALL_STACK

 

* 사용자 정의 예외

CREATE OR REPLACE ...

 

IS

  변수...

  ex_invalid_depid EXCEPTION;

BEGIN

 

  ...

  IF vn_cnt = 0 THEN

    RAISE ex_invalid_depid;

  END IF;

 

  ...

  COMMIT;

 

EXCEPTION

WHEN ex_invalid_depid THEN

  DBMS_OUTPUT.PUT_LINE('해당 부서번호가 없습니다');

WHEN OTHERS THEN

  ...

END;

 

# 트랜잭션

 

# PL/SQL 기본구조

<블록>

이름부

IS(AS)

  선언부

BEGIN

  실행부

EXCEPTION

  예외 처리부

END;

 

# 제어문

<IF 문>

IF 조건1 THEN

  조건처리1;

ELSE IF 조건2 THEN

  조건처리2;

ELSE

  조건처리n;

END IF;

 

<LOOP문>

LOOP

  처리문;

  EXIT [WHEN 조건];

END LOOP;

 

<WHILE문>

WHILE 조건

LOOP

  처리문;

END LOOP;

 

<FOR문>

FOR i IN [REVERSE] 1..9

LOOP

  처리문;

END LOOP;

 

<CONTINUE>

FOR i IN 1..9

LOOP

   CONTINUE WHEN i=5;

   DBMS_OUTPUT.PUT_LINE(i);

END LOOP;

 

# 사용자 정의 함수

<함수>

CREATE OR REPLACE FUNCTION 함수 이름 (매개변수1, 매개변수2, ...)

RETURN 데이터타입;

IS[AS]

  변수, 상수 등 선언

BEGIN

  실행부

 

  RETURN 반환값;

[EXCEPTION

  예외 처리부]

END [함수 이름];

 

<프로시저>

CREATE OR REPLACE PROCEDURE 프로시저 이름

  (매개변수1 [IN | OUT | IN OUT] 데이터타입 [:= 디폴트 값],

   매개변수2 [IN | OUT | IN OUT] 데이터타입 [:= 디폴트 값],

   ...

  )

IS[AS]

  변수, 상수 등 선언

BEGIN

  실행부

 

[EXCEPTION

  예외 처리부]

END [프로시저 이름];

 

*변수, 상수, 매개변수 명명법

 - 변수: vn_goods_cnt, vc_ord_no

 - 상수: cn_max_ord_psbt_cnt

 - 매개변수: pn_ord_cqty, pc_cust_no

+ Recent posts