더북(TheBook)

COMMIT과 ROLLBACK

거래가 모두 성공적으로 마쳤을 때, “이 거래는 성공했으니 반영해도 된다”라고 확인하는 역할을 하는 것이 바로 COMMIT문이다. 따라서 COMMIT문을 실행하지 않으면 INSERT, UPDATE, DELETE, MERGE한 결과가 최종적으로 테이블에 반영되지 않는다. COMMIT 구문은 다음과 같다.

    COMMIT [WORK];

WORK는 가독성을 향상시키는 목적으로 사용하는데 보통은 생략할 때가 많다. 예제를 통해 트랜잭션 처리를 해볼 텐데, 먼저 다음과 같이 샘플 테이블을 만들어 보자.

입력

    CREATE TABLE ch10_sales (
           sales_month   VARCHAR2(8),
           country_name  VARCHAR2(40),
           prod_category VARCHAR2(50),
           channel_desc  VARCHAR2(20),
           sales_amt     NUMBER );

결과

    table CH10_SALES이(가) 생성되었습니다.

이제 sales, products, customers, channels, countries 테이블을 조인해서 입력월을 매개변수로 받아 해당 월에 대한 국가, 제품 카테고리, 채널 유형별 매출금액을 구해 ch10_sales 테이블에 입력하는 프로시저를 만들어 보자.

입력

    CREATE OR REPLACE PROCEDURE iud_ch10_sales_proc
      ( p_sales_month ch10_sales.sales_month%TYPE )
    IS

    BEGIN
      INSERT INTO ch10_sales (sales_month, country_name, prod_category, channel_desc, sales_amt)
      SELECT A.SALES_MONTH,
             C.COUNTRY_NAME,
             D.PROD_CATEGORY,
             E.CHANNEL_DESC,
             SUM(A.AMOUNT_SOLD)
        FROM SALES A, CUSTOMERS B, COUNTRIES C, PRODUCTS D, CHANNELS E
       WHERE A.SALES_MONTH = p_sales_month
         AND A.CUST_ID = B.CUST_ID
         AND B.COUNTRY_ID = C.COUNTRY_ID
         AND A.PROD_ID = D.PROD_ID
         AND A.CHANNEL_ID = E.CHANNEL_ID
       GROUP BY A.SALES_MONTH,
             C.COUNTRY_NAME,
             D.PROD_CATEGORY,
             E.CHANNEL_DESC;

    END;

결과

    PROCEDURE IUD_CH10_SALES_PROC이(가) 컴파일되었습니다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.