create or replace function to_word ( m_amount_in in number, m_first_para in varchar2 := 'Dhirhams', m_second_para in varchar2 := 'Fills' ) return varchar2 -- correct as m_amount number := m_amount_in; word_string varchar2(1000); lower_number number; lower_str varchar2(50); loop_var number := 1; function to_string ( m_val_in number) return char --correct is begin if m_val_in > 0 then return ( initcap (to_char (to_date (m_val_in, 'SSSSS'),'SSSSSSP'))); else return (''); end if; end; --correct begin lower_number := (m_amount MOD 1) * 100; if length(lower_number) < 3 then if m_amount >= 1 and lower_number > 0 then lower_str := '' || m_first_para || 'AND' || LOWER (to_string (lower_number)) || '' || m_second_para; elsif m_amount < 1 and lower_number > 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; --correct while loop_var = 1 loop if m_amount > 0 and m_amount <= 1000 then word_string := 'AED'||' '|| word_string || ( initcap (to_string (floor (m_amount))) || lower_str); loop_var := 0; elsif m_amount > 1000 and m_amount < 1000000 then word_string := 'AED'||' '|| 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 < 10000000000 then word_string := 'AED'||' '|| word_string || initcap ( to_string ( floor ( m_amount / 1000000))) || 'Million'; m_amount := floor ( m_amount MOD 100000); if m_amount = 0 then loop_var := 0; word_string := word_string || lower_str; end if; elsif m_amount >= 1000000000 and m_amount <= 99999999999.99 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; /