Database/Oracle

Oracle 올림(절상) 처리(RoundUp) 함수

kinorama 2018. 6. 27. 19:45

오라클에서 일반적인 정수 올림 처리함수는 CEIL을 사용한다.

그렇다면 소수 자릿수의 올림 처리함수는 다음의 함수를 구현하여 사용한다.

 

create or replace function FN_ROUNDUP (in_left  in  number,
                                       in_right in  integer default 0)
  return number is

  v_right                  integer;
  v_temp_num               number;
  v_add_num                number;
  v_rlt                    number;
begin
  /*
  사용처 : 공통
  제  목 : 입력 값의 올림 처리
  내  용 : 소수 자릿수에 의한 입력 값의 올림 처리 함수
  ------------------------------------------------------------
  인자명 : 설명(인자값 예)
  in_left     : 원본 값
  in_right    : 올림 처리할 소수 자릿수

  반환값       : 올림 처리 값
  ------------------------------------------------------------
  변경날짜     변경자   변경사유
  2018-06-27   박현준   1. 초기작성
  */
 
  if in_right is null then
     v_right := 0;
  else
     v_right := in_right;
  end if;
 
  if v_right = 0 then
   
     v_rlt := ceil(in_left);
 
  else
 
     if instr(in_left, '.') = 0 then
        v_temp_num := 0;
     else
        v_temp_num := in_left - to_number(substr(in_left, 0, instr(in_left, '.') + v_right));
     end if;

     if v_temp_num = 0 then
        v_rlt := in_left;
     else
        v_add_num := 1/power(10, v_right);        
        v_rlt := to_number(substr(in_left, 0, instr(in_left, '.') + v_right)) + v_add_num;
     end if;
 
  end if;
   
  return(v_rlt);

exception
  when others then 
       return 0;
       -- Application 반환 에러
       --raise_application_error(-20001, dbms_utility.format_error_stack || sqlerrm);
end FN_ROUNDUP;