--■■■ 프로시져(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
'030. Database > 01. Oracle' 카테고리의 다른 글
[Oracle] 알쏭달쏭 복잡미묘한 힌트(HINT) (0) | 2016.07.22 |
---|---|
[Oracle] LOCK 걸린 SQL을 찾아라 (2) | 2016.05.31 |
[Oracle] With 사용하기 (0) | 2016.04.02 |
[Oracle] Create Table 속도 빠르게 (0) | 2016.04.02 |
[Oracle] 계층형 쿼리 Start with Connect by (3) | 2016.03.19 |
WRITTEN BY
- 테네시왈츠
항상 겸손하게 항상 새롭게 항상 진실하게