CREATE OR REPLACE FUNCTION to_Words (
m_amount_in IN NUMBER,
m_first_para IN VARCHAR2 := 'Dollars',
m_second_para IN VARCHAR2 := 'Cents'
)
RETURN VARCHAR2
AS
m_amount NUMBER := m_amount_in;
word_stringVARCHAR2(1000);
lower_number NUMBER;
lower_strVARCHAR2(50);
loop_var NUMBER := 1;
/* Function declarartion to convert into string */
FUNCTION to_string (m_val_in NUMBER)
RETURN CHAR
IS
BEGIN
IF m_val_in 0
THEN
RETURN(INITCAP (TO_CHAR (TO_DATE (m_val_in, 'SSSSS'), 'SSSSSSP')));
ELSE
RETURN('');
END IF;
END;
/* End of Function */
BEGIN
/*--------------place the parameters at required places --------------*/
lower_number :=(m_amount MOD 1) * 100;
/* Check for lower denominations not exceeding two digits */
IF length(lower_number)
THEN
IF m_amount = 1 and lower_number 0
THEN lower_str :=
' '
m_first_para
' & '
LOWER (to_string (lower_number))
' '
m_second_para;
ELSIF m_amount 0
THEN lower_str :=
LOWER (to_string (lower_number))
' '
m_second_para;
ELSIF m_amount = 1 and lower_number = 0
THEN lower_str := ' ' m_first_para;
END IF;
ELSE
word_string := 'Invalid lower denomination !!' ;
RETURN(word_string);
END IF;
/*---------------- End of placing paramters-------------------------*/
WHILE loop_var = 1
LOOP
IF m_amount 0
AND m_amount
THEN
word_string :=
word_string
(INITCAP (to_string (FLOOR (m_amount))) lower_str);
loop_var := 0;
ELSIF m_amount 1000
AND m_amount
THEN
word_string :=
word_string
(INITCAP (to_string (FLOOR (m_amount / 1000)))
' Thousand '
to_string (FLOOR (m_amount MOD 1000))
lower_str
);
loop_var := 0;
ELSIF m_amount = 1000000
AND m_amount
THEN
word_string :=
word_string
INITCAP (to_string (FLOOR (m_amount / 1000000))) ' Million ';
m_amount := FLOOR (m_amount MOD 1000000);
IF m_amount = 0
THEN
loop_var := 0;
word_string := word_string lower_str;
END IF;
ELSIF m_amount = 1000000000
AND m_amount
THEN
word_string :=
INITCAP (
to_string (FLOOR (m_amount / 1000000000))) ' Billion ';
m_amount := FLOOR (m_amount MOD 1000000000);
IF m_amount = 0
THEN
loop_var := 0;
word_string := word_string lower_str;
END IF;
ELSIF m_amount = 0
THEN
word_string :=('Zero' lower_str);
loop_var := 0;
ELSE
word_string := 'This is beyond my scope !
!';
loop_var := 0;
END IF;
END LOOP;
RETURN(word_string);
END to_words;
/