상세 컨텐츠

본문 제목

[PL/SQL] 프로시저 코드개발

SQL/Oracle

by 일동일동 2024. 8. 7. 15:27

본문

728x90
반응형

AS-IS

    ex) 14억을 전표처리 하기위해  3억or10억 단위로 끊어서 따로 처리함 ( 10억, 4억)

TO-BE

    3억or10억을 선택할 경우 입력한 금액에 맞춰서 한번에 생성하도록 기능 구현

 

총금액: '10억'일 때 묶음금액을 '3억'이라고 가정할 경우 (3억, 3억, 3억, 1억)

총금액: '14억'일 때 묶음금액을 '10억'이라고 가정할 경우 (10억, 4억)

선택을 하지않을 경우 총금액 출력

V_VALUE		VARCHAR2(10) := '1';
V_COUNTER	NUMBER;

V_DIVISION	NUMBER(12) := TRUNC (총금액 / 묶음금액 * 100000000));	--몫
V_REMAINDER	NUMBER(12) := MOD (총금액,(묶음금액 * 100000000));	--나머지

 

실행부에서 사용할 변수 선언

 

TRUNC 를 사용하는 이유는 Oracle SQL에서 소수 부분을 제거하고 정수 부분만 남기기 위해 사용

MOD 는 기존 금액으로 사용할 경우 몫을 구한 후 나머지값을 출력해야 하기 때문에 사용

 

	--차변
    *프로시저 호출 LPAD('1',6,0)  나머지 값 입력 -- 차변이기 때문에 '1' 고정
    
    --대변
    IF(묶음금액 = '3') or (묶음금액 = '10') THEN
    	FOR V_COUNTER IN 1..V_DIVISION LOOP	-- 몫
        	V_VALUE := TO_CHAR(V_COUNTER);
            프로시저 호출 LPAD(V_VALUE,6,0)+1	-- 차변이 1이기 때문에 2부터 시작해야 하므로 +1
       	END LOOP;
        
		IF V_REMAINDER > 0 THEN
    		프로시저 호출 LPAD(TO_CHAR(TO_NUMBER(V_VALUE) +2),6,'0') -- 나머지값. 몫 뒤에 붙는 값이기 때문에 +2
    	END IF;

	ELSE
    	프로시저 호출 LPAD('2',6,0) -- 묶음금액이 없을 경우 대변에 출력
    END IF;

LOOP문, IF문을 적절하게 섞어서 사용할 경우

 

TO-BE의 결과대로 개발이 완료

 

테스트

case1 ( 총 금액: 14억, 분할금액: 3억)

차변 14억

대변 3억,3억,3억,3억,2억

 

case2 ( 총 금액: 14억, 분할금액: 10억)

차변 14억

대변 10억, 4억

 

case2 ( 총 금액: 14억, 분할금액: 없음)

차변 14억

대변 14억

반응형