SSISO Community

시소당

숫자금액을 한글로 바꿔주는 함수 Oracle

SQL> SELECT RF_한글금액(100100)||' 원' 금액
         FROM DUAL;

 

금액
--------------------------------------------
일십만일백 원

 

 

Create or replace Function rf_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;


2270 view

4.0 stars