最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle通過procedure調(diào)用webservice接口的全過程

 更新時間:2024年07月10日 10:52:35   作者:Roki Zhang  
存儲過程是一組為了完成特定功能的sql語句集合,經(jīng)過編譯后存儲在數(shù)據(jù)庫中,用戶通過制定存儲過程的名字并給出參數(shù)(如果該過程帶有參數(shù))來執(zhí)行他,本文介紹了Oracle通過procedure調(diào)用webservice接口的全過程,需要的朋友可以參考下

準(zhǔn)備工作

定義測試的webservice及其中的方法

在這里插入圖片描述

如何發(fā)布全新的webservice并測試,可以參考博客C# webservice 接口編寫、發(fā)布與測試

方法體如下

[WebMethod]
public string testProcedure(string sInput)
{
	return "執(zhí)行時間:" + DateTime.Now.ToString() + sInput;
}

Oracle語句詳情

-- 聲明變量和數(shù)據(jù)類型
declare
    req        utl_http.req;         -- HTTP請求句柄
    resp       utl_http.resp;        -- HTTP響應(yīng)句柄
    url        varchar2(4000) := 'http://10.xx.xx.xx:8085/WebService.asmx'; -- Web Service的URL地址
    soap_env   varchar2(4000);       -- SOAP請求包體
    buffer     varchar2(32767);      -- 字符串緩沖區(qū)
    utf8_data  clob;                 -- 存儲UTF-8編碼的CLOB數(shù)據(jù)類型(存儲大量文本數(shù)據(jù)的數(shù)據(jù)類型)
    raw_data   raw(32767);           -- RAW數(shù)據(jù)類型,用于存儲二進制數(shù)據(jù)
    raw_buffer raw(32767);           -- RAW類型的緩沖區(qū)
    line       varchar2(32767);      -- 每行讀取的數(shù)據(jù)
    idx        integer := 1;         -- 循環(huán)索引變量
begin

    -- 構(gòu)造SOAP請求包體
    soap_env := 
        '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">' ||
        '<soap:Header/>' ||            -- SOAP頭,這里為空
        '<soap:Body>' ||               -- SOAP主體開始
        '  <tem:testProcedure>' ||     -- 調(diào)用Web Service的方法名
        '    <tem:sInput>' ||          -- 方法參數(shù)開始
        ' testConnect + 中文test' ||   -- 參數(shù)值,包括英文和中文字符
        '</tem:sInput>' ||             -- 方法參數(shù)結(jié)束
        '  </tem:testProcedure>' ||    -- 方法調(diào)用結(jié)束
        '</soap:Body>' ||              -- SOAP主體結(jié)束
        '</soap:Envelope>';            -- SOAP包體結(jié)束

    -- 開始發(fā)起HTTP POST請求,如果此部分存在疑問,請自行尋找前端請求報文相關(guān)內(nèi)容學(xué)習(xí)。
    req := utl_http.begin_request(url, 'POST', 'HTTP/1.1'); -- 初始化HTTP請求
    utl_http.set_header(req, 'Content-Type', 'application/soap+xml; charset=utf-8'); -- 設(shè)置Content-Type頭部
    utl_http.set_header(req, 'Content-Length', length(soap_env)); -- 設(shè)置Content-Length頭部
    utl_http.write_text(req, soap_env); -- 寫入SOAP請求包體到HTTP請求

    -- 獲取HTTP響應(yīng)
    resp := utl_http.get_response(req); -- 獲取HTTP響應(yīng)句柄
    dbms_lob.createtemporary(utf8_data, true); -- 創(chuàng)建臨時CLOB變量用于存儲響應(yīng)數(shù)據(jù)

    -- 循環(huán)讀取HTTP響應(yīng)體
    loop
        begin
            utl_http.read_raw(resp, raw_buffer, 32767); -- 讀取響應(yīng)體到RAW緩沖區(qū)
            dbms_lob.writeappend(utf8_data,                   -- 將RAW緩沖區(qū)的數(shù)據(jù)追加到CLOB中
                                 utl_raw.length(raw_buffer), -- 數(shù)據(jù)長度
                                 utl_raw.cast_to_varchar2(raw_buffer)); -- 將RAW轉(zhuǎn)換為VARCHAR2再寫入CLOB
        exception
            when utl_http.end_of_body then
                exit; -- 如果到達響應(yīng)體結(jié)尾,則退出循環(huán)
            when others then
                dbms_output.put_line('在讀取響應(yīng)時發(fā)生錯誤: ' || sqlerrm); -- 其他異常處理
                exit; -- 退出循環(huán)
        end;
    end loop;

    utl_http.end_response(resp); -- 結(jié)束HTTP響應(yīng)

    -- 循環(huán)讀取并打印CLOB中的內(nèi)容
    idx := 1;
    while idx <= dbms_lob.getlength(utf8_data) loop
        line := dbms_lob.substr(utf8_data, 255, idx); -- 從CLOB中讀取一行數(shù)據(jù)
        dbms_output.put_line(line); -- 打印讀取的一行數(shù)據(jù)
        idx := idx + 255; -- 更新索引
    end loop;

    dbms_lob.freetemporary(utf8_data); -- 釋放臨時CLOB空間

exception
    when utl_http.end_of_body then
        utl_http.end_response(resp); -- 異常處理:如果到達響應(yīng)體結(jié)尾,確保關(guān)閉HTTP響應(yīng)
    when others then
        dbms_output.put_line('在調(diào)用Web服務(wù)時發(fā)生錯誤: ' || sqlerrm); -- 其他異常處理
        if dbms_lob.istemporary(utf8_data) = 1 then
		傳參的中文會亂碼,但是方法內(nèi)部的中文不會亂碼
            dbms_lob.freetemporary(utf8_data); -- 釋放臨時CLOB空間
        end if;
end;
/

重要參數(shù)說明

上述程序已經(jīng)解決了中文亂碼的問題,但是還是不太完美,傳參的中文會亂碼,但是方法內(nèi)部的中文不會亂碼。

在這里插入圖片描述

Web Service的URL地址

url varchar2(4000) := 'http://10.xx.xx.xx:8085/WebService.asmx';

構(gòu)造SOAP請求包體

soap_env := 
'<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">' ||
'<soap:Header/>' ||            -- SOAP頭,這里為空
'<soap:Body>' ||               -- SOAP主體開始
'  <tem:testProcedure>' ||     -- 調(diào)用Web Service的方法名
'    <tem:sInput>' ||          -- 方法參數(shù)開始
' testConnect + 中文test' ||   -- 參數(shù)值,包括英文和中文字符
'</tem:sInput>' ||             -- 方法參數(shù)結(jié)束
'  </tem:testProcedure>' ||    -- 方法調(diào)用結(jié)束
'</soap:Body>' ||              -- SOAP主體結(jié)束
'</soap:Envelope>';            -- SOAP包體結(jié)束

其中testProcedure為webservice中定義的測試方法名,sInput為方法的參數(shù),多個參數(shù),自行添加。標(biāo)簽<tem:sInput></tem:sInput>中間填寫這個參數(shù)傳的實際值,其余部分無需修改。

構(gòu)造SOAP請求包體方法

我使用了soapui這個工具,怎么使用可以參考博客SoapUI 測試WebService接口可用性

依次如下操作即可:

在這里插入圖片描述

如果需要把上面的功能變成function或者procedure,請自行搜索相關(guān)的方法實現(xiàn)即可。

到此這篇關(guān)于Oracle通過procedure調(diào)用webservice接口的全過程的文章就介紹到這了,更多相關(guān)Oracle procedure調(diào)用webservice內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle RMAN三種不完全恢復(fù)方式的實戰(zhàn)指南

    Oracle RMAN三種不完全恢復(fù)方式的實戰(zhàn)指南

    在Oracle數(shù)據(jù)庫的日常管理中,不完全恢復(fù)(Incomplete Recovery)是一項重要且實用的技能,尤其是在面對人為誤操作(如誤刪表)或邏輯故障(如表空間損壞)時,本文將通過三個實際演示案例,逐一呈現(xiàn)三種不完全恢復(fù)方式的操作步驟,需要的朋友可以參考下
    2025-10-10
  • Oracle數(shù)據(jù)庫時間格式轉(zhuǎn)換的常見示例

    Oracle數(shù)據(jù)庫時間格式轉(zhuǎn)換的常見示例

    這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫時間格式轉(zhuǎn)換的常見示例,在實際的工作中會經(jīng)常會用到to_char()、to_date()函數(shù)來對時間、日期進行處理,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-02-02
  • LINUX下Oracle數(shù)據(jù)庫用戶創(chuàng)建方法詳解

    LINUX下Oracle數(shù)據(jù)庫用戶創(chuàng)建方法詳解

    這篇文章主要介紹了LINUX下Oracle數(shù)據(jù)庫用戶創(chuàng)建方法,結(jié)合實例形式較為詳細(xì)的分析總結(jié)了Oracle數(shù)據(jù)庫用戶創(chuàng)建的具體步驟與相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • Oracle AI應(yīng)用的LLM模型典型配置方法

    Oracle AI應(yīng)用的LLM模型典型配置方法

    本文介紹了如何在同事的開源項目Text2SQLRAG中配置Embedding模型,并詳細(xì)描述了測試和配置DeepSeek的LLM的過程,感興趣的朋友一起看看吧
    2025-03-03
  • Oracle修改表空間大小的方法

    Oracle修改表空間大小的方法

    這篇文章主要介紹了Oracle修改表空間大小的方法,實例講述了Oracle通過命令行實現(xiàn)修改Oracle表空間大小的方法,非常簡單實用,需要的朋友可以參考下
    2015-12-12
  • ORACLE常見錯誤代碼的分析與解決二

    ORACLE常見錯誤代碼的分析與解決二

    ORACLE常見錯誤代碼的分析與解決二...
    2007-03-03
  • Oracle的默認(rèn)用戶密碼

    Oracle的默認(rèn)用戶密碼

    創(chuàng)建表空間和用戶時,需要的時候竟然忘記了密碼,試了好多次都沒連接上,進而用戶也被鎖定,下面就教您處理Oracle默認(rèn)用戶的密碼問題的方法,希望對和我一樣情況的朋友們有所幫助
    2012-07-07
  • oracle中得到一條SQL語句的執(zhí)行時間的兩種方式

    oracle中得到一條SQL語句的執(zhí)行時間的兩種方式

    這篇文章主要介紹了oracle中如何得到一條SQL語句的執(zhí)行時間,有兩種可行方式,大家可以參考下
    2014-05-05
  • Oracle數(shù)據(jù)庫的備份與恢復(fù)

    Oracle數(shù)據(jù)庫的備份與恢復(fù)

    Oracle數(shù)據(jù)庫的備份與恢復(fù)...
    2007-03-03
  • ORACLE 自動提交問題

    ORACLE 自動提交問題

    通過PL/SQL DEVELOPER向數(shù)據(jù)庫中的某個表中插入一定量的數(shù)據(jù),通過select 語句可以看到已經(jīng)插入到表中,然而詭異的是通過程序卻無法查詢到新插入的數(shù)據(jù)。
    2009-06-06

最新評論

治县。| 民权县| 江孜县| 奉化市| 日照市| 齐齐哈尔市| 屏东县| 宣汉县| 盖州市| 潮安县| 锡林郭勒盟| 东阿县| 高青县| 滕州市| 蓬莱市| 肥城市| 马关县| 罗田县| 石泉县| 永川市| 乐至县| 鄂州市| 奉贤区| 河间市| 巴彦淖尔市| 耿马| 大连市| 本溪| 新营市| 原平市| 长顺县| 易门县| 宁晋县| 鄂温| 安福县| 公安县| 平乐县| 东乌珠穆沁旗| 河南省| 翁牛特旗| 三门峡市|