숫자금액을 한글로 바꿔주는 오라클 함수

Posted by MD워시퍼
2010. 10. 21. 11:00 Study
728x90
CREATE OR REPLACE FUNCTION LIGADJUSTUSER.F_FRM_HANGULAMT (ARG_금액 NUMBER) RETURN VARCHAR2 IS
 N_숫자길이 NUMBER(2);
 N_숫자위치 NUMBER(2);
 V_숫자문자 VARCHAR2(20);
 V_자리수 VARCHAR2(1);
 V_존재여부 VARCHAR2(1);
 V_한글금액 VARCHAR2(100);
BEGIN
 IF ARG_금액 IS NULL  THEN
  RETURN (NULL);
 ELSIF ARG_금액 = 0  THEN
  RETURN ('영');
 ELSIF ARG_금액 < 0  THEN
  V_한글금액 := '-';
 END IF;
 V_숫자문자 := TO_CHAR (ABS (ARG_금액));
 N_숫자길이 := LENGTHB (V_숫자문자);
 FOR I IN 1..N_숫자길이 LOOP
  V_자리수 := SUBSTRB (V_숫자문자, I, 1);
  IF V_자리수 = '0'  THEN
   V_한글금액 := V_한글금액 || '';
  ELSE
   IF V_자리수 = '1'  THEN
    V_한글금액 := V_한글금액 || '일';
   ELSIF V_자리수 = '2'  THEN
    V_한글금액 := V_한글금액 || '이';
   ELSIF V_자리수 = '3'  THEN
    V_한글금액 := V_한글금액 || '삼';
   ELSIF V_자리수 = '4'  THEN
    V_한글금액 := V_한글금액 || '사';
   ELSIF V_자리수 = '5'  THEN
    V_한글금액 := V_한글금액 || '오';
   ELSIF V_자리수 = '6'  THEN
    V_한글금액 := V_한글금액 || '육';
   ELSIF V_자리수 = '7'  THEN
    V_한글금액 := V_한글금액 || '칠';
   ELSIF V_자리수 = '8'  THEN
    V_한글금액 := V_한글금액 || '팔';
   ELSIF V_자리수 = '9'  THEN
    V_한글금액 := V_한글금액 || '구';
   END IF;
   V_존재여부 := '1';
  END IF;
  N_숫자위치 := N_숫자길이 + 1 - I;
  IF N_숫자위치 = 1  THEN
   V_한글금액 := V_한글금액 || '';
  ELSIF N_숫자위치 = 5  THEN
   IF V_존재여부 = '1'  THEN
    V_한글금액 := V_한글금액 || '만';
   END IF;
  ELSIF N_숫자위치 = 9  THEN
   IF V_존재여부 = '1'  THEN
    V_한글금액 := V_한글금액 || '억';
   END IF;
  ELSIF N_숫자위치 = 13  THEN
   IF V_존재여부 = '1'  THEN
    V_한글금액 := V_한글금액 || '조';
   END IF;
  ELSIF N_숫자위치 = 17  THEN
   IF V_존재여부 = '1'  THEN
    V_한글금액 := V_한글금액 || '경';
   END IF;
  ELSE
   IF V_자리수 <> 0  THEN
    IF MOD (N_숫자위치, 4) = 0  THEN
     V_한글금액 := V_한글금액 || '천';
    ELSIF MOD (N_숫자위치, 4) = 1  THEN
     V_한글금액 := V_한글금액 || '';
    ELSIF MOD (N_숫자위치, 4) = 2  THEN
     V_한글금액 := V_한글금액 || '십';
    ELSIF MOD (N_숫자위치, 4) = 3  THEN
     V_한글금액 := V_한글금액 || '백';
    END IF;
   END IF;
  END IF;
  -- 일경조억만 이라는 금액이 찍히지 않도록...
  IF N_숫자위치 IN (1, 5, 9, 13, 17)  THEN
   V_존재여부 := NULL;
  END IF;
 END LOOP;
 RETURN (SUBSTR(V_한글금액,1,100));
END;

[출처] ssiso.net