대장 프로시져에서 하위 프로시져를 호출하는 구조일때 트랜잭션 문제 좀.. 0 3 1,463

by 공기 [PL/SQL] 트랜잭션 [2017.01.24 10:40:20]


안녕하세요.
프로시져 패키지의  트랜잭션이 궁금해서 질문 좀 드립니다...

 

하나의 패키지에 각각 데이터를 계산하는 하위프로시져가 있고

(아래처럼 PROC_RESOURCE_20004T  이런것들..)


대장프로시져 PROC_TOTAL_SUM 에서  하위프로시져들을  콜하는  형태로 저렇게 만든다면,  트랜잭션은 어떻게 되는지 궁금합니다.

 


각각의 하위프로시져 속에서  commit도하고  EXCEPTION  WHEN OTHERS 일때 rollback도 하는데..

하위프로시져에서만  익셉션 처리하고  대장PROC_TOTAL_SUM 에서는 익셉션 처리할 필요 없는지요?

 

아니면 단순하게 봐서, 이 대장PROC_TOTAL_SUM 에서  하위프로시져 호출하는 모든것들이  하나의 세션이니까  대장PROC_TOTAL_SUM에서만 익셉션 처리해주면 될까요?

 

 

CREATE OR REPLACE PACKAGE BODY NMAS_SSG.PKG_SUMMARY
AS
----------------------------------------------------------------------------------
-- CREATOR      : 홍길동
-- ALTER DATE   : 2017.01.17
-- DESC         : 서머리
-- HISTORY      : 1. CREATE (2017.01.17, 홍길동)
----------------------------------------------------------------------------------


PROCEDURE PROC_TOTAL_SUM (

    I_YYYYMM      IN  VARCHAR2
)
IS


BEGIN

    PROC_RESOURCE_20004T ('201612');

    PROC_RESOURCE_20021T ('201612');

    PROC_RESOURCE_20020T ('201612');

    PROC_RESOURCE_20002T ('201612');

    PROC_RESOURCE_20008T ('201611');

    PROC_RESOURCE_20001T ('201612');

    COMMIT;

    EXCEPTION
        WHEN OTHERS  THEN
            ROLLBACK;
            RETURN;

END;

 

------------------------------------------------------------------------------
-- CREATOR      : 홍길동
-- ALTER DATE   : 2017.01.17
-- DESC         : 집계 프로시져
-- HISTORY      : 1. CREATE (2017.01.17, 홍길동)
------------------------------------------------------------------------------
PROCEDURE PROC_RESOURCE_20004T (

    I_YYYYMM      IN  VARCHAR2
)
IS

BEGIN

    어쩌고 
    ...

    저쩌고 insert
    ...

    COMMIT;

    EXCEPTION
        WHEN OTHERS  THEN
            ROLLBACK;
            RETURN;

by jkson [2017.01.24 10:52:33]

sub 프로시저가 각각 commit 되어야 할 구조라면 sub 프로시저 안에서 exception 및 commit 처리

통으로 commit이거나 rollback의 구조라면(sub프로시저 update 결과가 한꺼번에 commit이든지 rollback이든지..) 

main 프로시저에서 exception 및 commit 처리.. 이런 식으로 하시면 되겠습니다.


by 마농 [2017.01.24 11:26:04]

각 서브 작업별로 커밋하는게 맞는지?
메인에서만 커밋하는게 맞는지?
둘 중 어느게 맞는지부터 업무적으로 판단하셔야 할 듯 하네요.


by 겸댕2후니 [2017.01.24 13:33:55]

단순히 예를들어

은행이체업무라면?

1. 잔액확인 -> 2. 본인계좌 - 입금액 -> 3. 이체계좌 + 입금액

메인에서만 커밋하는게 맞겠죠.

업무의 상황에 따라, 판단하셔야 할 것 같습니다.

각각의 서브 프로시져들이 커밋되어도 문제가없는건지, 전체적으로 커밋/롤백 되어야하는건지.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입