You might face the same issue to me when you want to spell number to text in different language than English.
Here is the solution I asked in StackOverflow and made together with the one who initialized this idea, it’s kind of a great idea you may want this experience.
We used Yahoo Babelfish translation service to translate our converted English spelling number to Italian and you can try this kind of method for any other language that exists in babelfish, check it out from here:
CREATE OR REPLACE FUNCTION Currency_conversion(currency IN NUMBER)
RETURN VARCHAR2 IS
txt varchar2(4000);
tlum varchar2(4000);
babelTxt varchar(32000);
req utl_http.req;
resp utl_http.resp;
webtext VARCHAR2(4000);
webextract VARCHAR2(4000);
BEGIN
tlum:=NULL;--used for multiple execution in the same session
-- This is used to convert number to words in english
SELECT CAST( to_char( to_timestamp( lpad(currency,9,'0'), 'FF9' ), 'FFSP' ) AS VARCHAR2(100) )
into txt from dual;
-- FFSP is used to spell Fraction second in words for example HH24SP
-- can be used to spell hours from 0 to 23,i used FFSP to get max range
txt:=translate(txt,'x-','x ');
-- The below logic is taken from
-- https://forums.oracle.com/forums/thread.jspa?threadID=1122273(and)start=15(and) tstart=0
--need to test once
-- request that exceptions are raised for error status codes
utl_http.set_response_error_check(enable => TRUE);
-- allow testing for exceptions like Utl_Http.Http_Server_Error
utl_http.set_detailed_excp_support(enable => TRUE);
txt:=utl_url.escape(txt);
babelTxt := 'http://babelfish.yahoo.com/translate_txt?doit=done' || '&' || 'lp=en_it' || '&' || 'intl=1' || '&' || 'ei=utf8' || '&' || 'trtext=' || txt;
req:=utl_http.begin_request(url => babelTxt, method => 'GET');
resp := utl_http.get_response(r => req);
BEGIN
LOOP
--utl_http.read_text(r => resp, data => webtext, len => 32767);
utl_http.read_line(r => resp , data => webtext);
webextract := regexp_substr(webtext,'<div id="result"><div style="padding:0.6em;">(.+)</div></div>');
if webextract is not null
then
select regexp_replace(webextract,'<div id="result"><div style="padding:0.6em;">(.+)</div></div>','\1')
into tlum FROM dual;
end if;
exit when tlum is not null;
END LOOP;
EXCEPTION
WHEN utl_http.end_of_body THEN
NULL;
END;
utl_http.end_response(r => resp);
return tlum;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
return '';
END;
/
exit;
If you want to adopt it to other language, please change this line:
babelTxt := 'http://babelfish.yahoo.com/translate_txt?doit=done' || '&' || 'lp=en_it' || '&' || 'intl=1' || '&' || 'ei=utf8' || '&' || 'trtext=' || txt; Example: English to French, changes: lp=en_fr
Check detail to our discussion at StackOverflow