| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> Re: FUNCTION in PL/SQL
Acáacio Nuno Loureiro de Jesus wrote:
> 
> Hi!
>  If you have a function in PL/SQL that converts a number into it's
> designation like
> for example : 1 returns 'one'
>                      10 returns 'ten'
>                     234 returns 'two hundred and thirty four'
> Please send me.
>  Thanks!
> 
> Acáacio.
Hi
I had been wanting to write one of these and your post prompted me to do it. Here it is:
create or replace
FUNCTION wordnum(inparam integer) RETURN VARCHAR2
IS
   TYPE ones IS TABLE OF VARCHAR2(9) INDEX BY BINARY_INTEGER;
   TYPE tens IS TABLE OF VARCHAR2(7) INDEX BY BINARY_INTEGER;
   one_to_19  ones;
   tensdigs  tens;
   nextdig  integer;
   resultstring VARCHAR2(120);
   charnum VARCHAR2(10);
BEGIN
   IF inparam >= 100000000 THEN
      RETURN 'Number input must be less than one billion';
   END IF;
   IF inparam = 0 THEN
      RETURN 'ZERO';
   END IF;
one_to_19(1) := 'ONE'; one_to_19(2) := 'TWO'; one_to_19(3) := 'THREE'; one_to_19(4) := 'FOUR'; one_to_19(5) := 'FIVE'; one_to_19(6) := 'SIX'; one_to_19(7) := 'SEVEN'; one_to_19(8) := 'EIGHT'; one_to_19(9) := 'NINE'; one_to_19(10) := 'TEN'; one_to_19(11) := 'ELEVEN'; one_to_19(12) := 'TWELVE'; one_to_19(13) := 'THIRTEEN'; one_to_19(14) := 'FOURTEEN'; one_to_19(15) := 'FIFTEEN'; one_to_19(16) := 'SIXTEEN'; one_to_19(17) := 'SEVENTEEN'; one_to_19(18) := 'EIGHTEEN'; one_to_19(19) := 'NINETEEN'; tensdigs(2) := 'TWENTY'; tensdigs(3) := 'THIRTY'; tensdigs(4) := 'FOURTY'; tensdigs(5) := 'FIFTY'; tensdigs(6) := 'SIXTY'; tensdigs(7) := 'SEVENTY';
      nextdig := 2 + (i-2)*3;
      IF SUBSTR(charnum,nextdig,3) != '000' THEN
         IF SUBSTR(charnum,nextdig,1) != 0 THEN
            resultstring := resultstring || ' ' ||
               one_to_19(TO_NUMBER(SUBSTR(charnum,nextdig,1))) ||
               ' HUNDRED';
         END IF;
         IF TO_NUMBER(SUBSTR(charnum,nextdig+1,1)) > 1 THEN
            resultstring := resultstring || ' ' ||
               tensdigs(TO_NUMBER(SUBSTR(charnum,nextdig+1,1)));
            IF SUBSTR(charnum,nextdig+2,1) != '0' THEN
               resultstring := resultstring || '-' ||
               one_to_19(TO_NUMBER(SUBSTR(charnum,nextdig+2,1)));
            END IF;
         ELSIF SUBSTR(charnum,nextdig+1,2) != '00' THEN
            resultstring := resultstring || ' ' ||
               one_to_19(TO_NUMBER(SUBSTR(charnum,nextdig+1,2)));
         END IF;
         IF i = 2 THEN
            resultstring := resultstring || ' MILLION';
         ELSIF i =3 THEN
            resultstring := resultstring || ' THOUSAND';
         END IF;
      END IF;
Shall I demonstrate:
SQL> select wordnum(717022) from dual;
WORDNUM(717022)
WORDNUM(82736492)
Good luck
Ken Denny
kdenny_at_interpath.com
Received on Mon Jun 16 1997 - 00:00:00 CDT
![]()  | 
![]()  |