ORACLE TERBILANG Function

FUNCTION ZMID(CStr IN VARCHAR2, STR IN INTEGER, LEN IN NUMBER DEFAULT 32767) RETURN VARCHAR2 IS
     iMID VARCHAR2(32767);
BEGIN
     If ( STR > Length(CStr) ) Then
         RETURN( NULL );
     END IF;
     iMID := SUBSTR( CStr, STR, len );
     RETURN ( iMID );
END;
/


FUNCTION zright(iChar VARCHAR2,jumlah NUMBER) RETURN VARCHAR IS
 Vpanjang  NUMBER;
 Vchar_Kanan VARCHAR2(100);
BEGIN
  Vpanjang:=Length(iChar)+1-jumlah;
  Vchar_Kanan:=SUBSTR(iChar,Vpanjang,jumlah);
  RETURN Vchar_Kanan;
END;
/


function ORACLE_TERBILANG(angka number) return varchar2 is

  strJmlHuruf     number;
  terbilang       varchar2(32767);
  intPecahan      varchar2(32767);
  strPecahan      varchar2(32767);
  urai            varchar2(32767);
  sMinus          varchar2(32767);
  strTot          varchar2(32767);
  x               varchar2(32767);
  y               integer;
  z               integer;
  Bil1            varchar2(32767);
  Bil2            varchar2(32767);
  pNumber         varchar2(32767);

 begin

   /*Cek Panjang input Angka*/
    pNumber :=length(angka);

    if substr(angka,1,1) <> '-' then
       if 16 <= pNumber then terbilang := ''; return(terbilang); end if;
    Else
       if 17 <= pNumber then terbilang := ''; return(terbilang); end if;
    End If;

   /*Cek Awal NOL*/
   If angka is Null or angka =0 Then terbilang := 'NOL';
      return(terbilang);
   End If;

       strJmlHuruf := LTrim((angka)); intPecahan  := 0;

  /*Cek Awal Minus*/
    If InStr(strJmlHuruf, '-') > 0 Then
            sMinus := 'MINUS ';
            terbilang := ZRight(strJmlHuruf, length(strJmlHuruf) - 1);
            strTot := terbilang; strJmlHuruf := terbilang;
    End If;

    /*Sementara Tdak ada pecahan :D*/
    If (intPecahan = 0) Then strPecahan := ''; End If;

    X := 0;
    Y := 0;
    Urai := '';

    /*::::::::::::LOOP::::::::::::*/
    While (X < length(strJmlHuruf)) Loop
                    X := X + 1;
                    strTot := ZMID(strJmlHuruf, X, 1);
                    Y := Y + (strTot);
                    z := length(strJmlHuruf) - X + 1;

    /*::::::::::::::::::::::::::Select Case Val(strTot)::::::::::::::::::::::::::*/
            if (strTot) = 1 then

                /*:::::::::::::::::::::::::::*/
                If (z = 1 Or z = 7 Or z = 10 Or z = 13) Then Bil1 := 'SATU ';

                ElsIf (z = 4) Then
                     If (X = 1) Then Bil1 := 'SE';
                        Else Bil1 := 'SATU ';
                    End If;

                ElsIf (z = 2 Or z = 5 Or z = 8 Or z = 11 Or z = 14 ) Then
                    X := X + 1;
                    strTot := ZMid(strJmlHuruf, X, 1);
                    z := length(strJmlHuruf) - X + 1;
                    Bil2 := '';

                       if  strTot = 0 then Bil1 := 'SEPULUH ';
                             ElsIf strTot = 1 then Bil1 := 'SEBELAS ';
                             ElsIf strTot = 2 then Bil1 := 'DUA BELAS ';
                             ElsIf strTot = 3 then Bil1 := 'TIGA BELAS ';
                             ElsIf strTot = 4 then Bil1 := 'EMPAT BELAS ';
                             ElsIf strTot = 5 then Bil1 := 'LIMA BELAS ';
                             ElsIf strTot = 6 then Bil1 := 'ENAM BELAS ';
                             ElsIf strTot = 7 then Bil1 := 'TUJUH BELAS ';
                             ElsIf strTot = 8 then Bil1 := 'DELAPAN BELAS ';
                             else Bil1 := 'SEMBILAN BELAS ';
                       end if;
                 else
                  Bil1 := 'SE';
              end if;
              /*:::::::::::::::::::::::::::*/

              elsif strTot = 2 then Bil1 := 'DUA ';
              elsif strTot = 3 then Bil1 := 'TIGA ';
              elsif strTot = 4 then Bil1 := 'EMPAT ';
              elsif strTot = 5 then Bil1 := 'LIMA ';
              elsif strTot = 6 then Bil1 := 'ENAM ';
              elsif strTot = 7 then Bil1 := 'TUJUH ';
              elsif strTot = 8 then Bil1 := 'DELAPAN ';
              elsif strTot = 9 then Bil1 := 'SEMBILAN ';
              else Bil1 := '';
            end if;
    /*::::::::::::::::::::::::::END Select Case Val(strTot)::::::::::::::::::::::::::*/

                If ((strTot) > 0) Then
                    If (z = 2 Or z = 5 Or z = 8 Or z = 11 Or z = 14) Then      Bil2 := 'PULUH ';
                      ElsIf (z = 3 Or z = 6 Or z = 9 Or z = 12 Or z = 15) Then Bil2 := 'RATUS ';
                      Else Bil2 := '';
                    End If;
                Else       Bil2 := '';
                End If;

                If (Y > 0) Then
                  /*::::::Select Case z:::::::*/
                   if z = 4 then        Bil2 := Bil2||'RIBU ';   Y := 0;
                      elsif z = 7  then Bil2 := Bil2||'JUTA ';   Y := 0;
                      elsif z = 10 then Bil2 := Bil2||'MILYAR '; Y := 0;
                      elsif z = 13 then Bil2 := Bil2||'TRILYUN ';Y := 0;
                   end if;
                End If;

     Urai := Urai||Bil1||Bil2;
    end loop;
    /*::::::::::::END LOOP::::::::::::*/

       Urai := sMinus||Urai||strPecahan;
        If (intPecahan = 0) Then
           Terbilang := Urai||'RUPIAH ';
        End If;
  return(terbilang);

end ORACLE_TERBILANG;
/