2016-09-19 76 views
0

我已經創建了一個使用UTL_HTTP包從Oracle 11.2服務器調用restful Web服務的過程。這是一個post請求,我發送一個阿拉伯數值以及其他定義爲varchar2的數據。PL SQL UTL_HTTP Restful Web服務調用不起作用

阿拉伯文字符串以「???? ????」的形式發送到我在記錄中檢查的Web服務。我將主體設置爲UTF-8,數據庫服務器字符集爲「AR8ISO8859P6」。

我嘗試使用convert函數,並在過去的2天內儘可能地進行。我無法弄清楚如何解決它。感謝任何專家對此的幫助。提前致謝。

查看下面的代碼。

t_request_body := 
     '{ 
"ArabicValue":"' 
     || p_arabic_value 
     || '", 
"EnglishValue":"' 
     || p_english_value 
     || '" 
}'; 

    UTL_HTTP.set_transfer_timeout (5); 
    t_http_req := 
     UTL_HTTP.begin_request 
     ('webservice_url', 
      'POST', 
      'HTTP/1.1' 
     ); 
    /*Describe in the request-header*/ 
    UTL_HTTP.SET_BODY_CHARSET('UTF-8'); 
    UTL_HTTP.set_header (t_http_req, 'Content-Type', 'application/json;charset=UTF-8'); 
    UTL_HTTP.set_header (t_http_req, 'Content-Length', LENGTH (t_request_body)); 
    UTL_HTTP.set_header (t_http_req, 'TransactionId', t_transaction_id); 
    UTL_HTTP.set_header (t_http_req, 'Accept', 'application/xml'); 

    /*Put the data in de body of the request*/ 
    UTL_HTTP.write_text (t_http_req, t_request_body); 
/*Web service call*/ 
    t_http_resp := UTL_HTTP.get_response (t_http_req); 
/*Reading transaction id from header*/ 
    UTL_HTTP.get_header_by_name (t_http_resp, 'TransactionId', t_trans); 

英文值參數傳遞給Web服務罰款。阿拉伯語的價值是「????? ????」。我嘗試在oracle中使用convert函數將其轉換爲UTF-8。它不工作。如果有人知道如何解決這個問題,請幫助。

回答

0

使用以下:

length_bytes:=長度(utl_raw.convert(utl_raw.cast_to_raw(t_request_body), 'AL32UTF8', 'AR8ISO8859P6'));

UTL_HTTP.set_header(t_http_req,'Content-Length',length_bytes);

UTL_HTTP.write_raw(t_http_req,t_request_body);