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억