--■■■ 프로시져(PROCEDURE) ■■■--

-- 1. PL/SQL 에서 가장 대표적인 구조인 스토어드 프로시저는

--    개발자가 자주 작성해야 하는 업무 흐름을

--    미리 작성하여 데이터베이스 내에 저장해 두었다가

--    필요할때 마다 호출하여 실행할 수 있도록 한다.

-- 2. 형식 및 구조

/*

CREATE [OR REPLACE] PROCEDURE 프로시저명

[(

    매개변수 IN  자료형,

    매개변수 OUT 자료형,

    매개변수 IN OUT 자료형

)]

IS

  [변수 선언;]

BEGIN

    실행 구문;

    [EXCEPRION

        ...;]

END;        

*/



--■■■ 프로시져 내에서의 예외처리 ■■■--

CREATE OR REPLACE PROCEDURE PRC_CHULGO_INSERT

( V상품코드   IN TBL_상품.상품코드%TYPE

, V출고수량   IN TBL_출고.출고수량%TYPE

, V출고단가   IN TBL_출고.출고단가%TYPE

)

IS 

  V출고번호  TBL_출고.출고번호%TYPE;    -- 출고번호

  V재고수량  TBL_상품.재고수량%TYPE;    -- 재고수량

  

  user_define_error EXCEPTION;         -- 사용자 정의 예외

  

BEGIN

  -- TBL_상품 테이블의 재고수량 파악(출고 대상이 되는 상품에 한해...)

  SELECT 재고수량 INTO V재고수량

  FROM TBL_상품

  WHERE 상품코드 = V상품코드;

  

  -- 파악한 재고수량보다 출고수량이 많으면 예외 발생

  IF(V출고수량 > V재고수량)

    THEN RAISE user_define_error;

  END IF;

  

  -- 선언된 변수에 값 담아내기

  SELECT NVL(MAX(출고번호), 0) INTO V출고번호

  FROM TBL_출고;

  

  -- 쿼리문 구성 (INSERT)    → TBL_출고

  INSERT INTO TBL_출고(출고번호, 상품코드, 출고일자, 출고수량, 출고단가)

  VALUES((V출고번호+1), V상품코드, SYSDATE, V출고수량, V출고단가);

  

  -- 쿼리문 구성 (UPDATE)    → TBL_상품

  UPDATE TBL_상품

  SET 재고수량 = 재고수량-V출고수량

  WHERE 상품코드 = V상품코드;

  

  -- 커밋

  COMMIT;

  

  -- 예외처리

  EXCEPTION

        WHEN user_define_error THEN RAISE_APPLICATION_ERROR(-20002, '재고부족~!!!');

                               ROLLBACK;

        WHEN OTHERS THEN 

            ROLLBACK;

END;

--==>> PROCEDURE PRC_CHULGO_INSERT이(가) 컴파일되었습니다.


[출처] 20150603_오라클(프로시져정의,예외처리)|작성자 smvtr123

http://blog.naver.com/smvtr123/220378688004


WRITTEN BY
테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게

,