Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm ơn để đánh vần số (đơn vị tiền tệ) sang đơn vị tiền tệ của Ý mà không cần mã cứng số bản dịch

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
    -- 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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vòng lặp lồng nhau Tham gia vào Oracle 11g

  2. ORA-00947 Không đủ giá trị khi khai báo kiểu trên toàn cầu

  3. SQL Server tương đương với hàm WM_CONCAT

  4. Hàm LOG () trong Oracle

  5. Sửa lỗi “ORA-01790:biểu thức phải có cùng kiểu dữ liệu với biểu thức tương ứng”