Oracle通过procedure调用webservice接口

news2024/11/15 23:55:17

文章目录

  • 准备工作
  • 方法体如下
  • Oracle语句详情
  • 重要参数说明
    • Web Service的URL地址
    • 构造SOAP请求包体
    • 构造SOAP请求包体方法
      • 依次如下操作即可:
    • 如果需要把上面的功能变成function或者procedure,请自行搜索相关的方法实现即可。

准备工作

定义测试的webservice及其中的方法
在这里插入图片描述
如何发布全新的webservice并测试,可以参考博客C# webservice 接口编写、发布与测试

方法体如下

[WebMethod]
public string testProcedure(string sInput)
{
	return "执行时间:" + DateTime.Now.ToString() + sInput;
}

Oracle语句详情

-- 声明变量和数据类型
declare
    req        utl_http.req;         -- HTTP请求句柄
    resp       utl_http.resp;        -- HTTP响应句柄
    url        varchar2(4000) := 'http://10.xx.xx.xx:8085/WebService.asmx'; -- Web Service的URL地址
    soap_env   varchar2(4000);       -- SOAP请求包体
    buffer     varchar2(32767);      -- 字符串缓冲区
    utf8_data  clob;                 -- 存储UTF-8编码的CLOB数据类型(存储大量文本数据的数据类型)
    raw_data   raw(32767);           -- RAW数据类型,用于存储二进制数据
    raw_buffer raw(32767);           -- RAW类型的缓冲区
    line       varchar2(32767);      -- 每行读取的数据
    idx        integer := 1;         -- 循环索引变量
begin

    -- 构造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>' ||     -- 调用Web Service的方法名
        '    <tem:sInput>' ||          -- 方法参数开始
        ' testConnect + 中文test' ||   -- 参数值,包括英文和中文字符
        '</tem:sInput>' ||             -- 方法参数结束
        '  </tem:testProcedure>' ||    -- 方法调用结束
        '</soap:Body>' ||              -- SOAP主体结束
        '</soap:Envelope>';            -- SOAP包体结束

    -- 开始发起HTTP POST请求,如果此部分存在疑问,请自行寻找前端请求报文相关内容学习。
    req := utl_http.begin_request(url, 'POST', 'HTTP/1.1'); -- 初始化HTTP请求
    utl_http.set_header(req, 'Content-Type', 'application/soap+xml; charset=utf-8'); -- 设置Content-Type头部
    utl_http.set_header(req, 'Content-Length', length(soap_env)); -- 设置Content-Length头部
    utl_http.write_text(req, soap_env); -- 写入SOAP请求包体到HTTP请求

    -- 获取HTTP响应
    resp := utl_http.get_response(req); -- 获取HTTP响应句柄
    dbms_lob.createtemporary(utf8_data, true); -- 创建临时CLOB变量用于存储响应数据

    -- 循环读取HTTP响应体
    loop
        begin
            utl_http.read_raw(resp, raw_buffer, 32767); -- 读取响应体到RAW缓冲区
            dbms_lob.writeappend(utf8_data,                   -- 将RAW缓冲区的数据追加到CLOB中
                                 utl_raw.length(raw_buffer), -- 数据长度
                                 utl_raw.cast_to_varchar2(raw_buffer)); -- 将RAW转换为VARCHAR2再写入CLOB
        exception
            when utl_http.end_of_body then
                exit; -- 如果到达响应体结尾,则退出循环
            when others then
                dbms_output.put_line('在读取响应时发生错误: ' || sqlerrm); -- 其他异常处理
                exit; -- 退出循环
        end;
    end loop;

    utl_http.end_response(resp); -- 结束HTTP响应

    -- 循环读取并打印CLOB中的内容
    idx := 1;
    while idx <= dbms_lob.getlength(utf8_data) loop
        line := dbms_lob.substr(utf8_data, 255, idx); -- 从CLOB中读取一行数据
        dbms_output.put_line(line); -- 打印读取的一行数据
        idx := idx + 255; -- 更新索引
    end loop;

    dbms_lob.freetemporary(utf8_data); -- 释放临时CLOB空间

exception
    when utl_http.end_of_body then
        utl_http.end_response(resp); -- 异常处理:如果到达响应体结尾,确保关闭HTTP响应
    when others then
        dbms_output.put_line('在调用Web服务时发生错误: ' || sqlerrm); -- 其他异常处理
        if dbms_lob.istemporary(utf8_data) = 1 then
		传参的中文会乱码,但是方法内部的中文不会乱码
            dbms_lob.freetemporary(utf8_data); -- 释放临时CLOB空间
        end if;
end;
/

重要参数说明

上述程序已经解决了中文乱码的问题,但是还是不太完美,传参的中文会乱码,但是方法内部的中文不会乱码。

在这里插入图片描述

Web Service的URL地址

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

构造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>' ||     -- 调用Web Service的方法名
'    <tem:sInput>' ||          -- 方法参数开始
' testConnect + 中文test' ||   -- 参数值,包括英文和中文字符
'</tem:sInput>' ||             -- 方法参数结束
'  </tem:testProcedure>' ||    -- 方法调用结束
'</soap:Body>' ||              -- SOAP主体结束
'</soap:Envelope>';            -- SOAP包体结束

其中testProcedure为webservice中定义的测试方法名,sInput为方法的参数,多个参数,自行添加。标签<tem:sInput></tem:sInput>中间填写这个参数传的实际值,其余部分无需修改。

构造SOAP请求包体方法

我使用了soapui这个工具,怎么使用可以参考博客SoapUI 测试WebService接口可用性

依次如下操作即可:

在这里插入图片描述

如果需要把上面的功能变成function或者procedure,请自行搜索相关的方法实现即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么将图片旋转30度?旋转图片的几种方法推荐

怎么将图片旋转30度&#xff1f;在创作过程中&#xff0c;我们常常需要处理图片的镜像效果&#xff0c;确保其视觉效果和构图都达到最佳状态。镜像效果的合理运用不仅可以解决视觉单调的问题&#xff0c;还能在艺术作品中吸引观者的注意力。此外&#xff0c;镜像可以有效地调整…

MoRA: High-Rank Updating for Parameter-Efficient Fine-Tuning

文章汇总 LoRA的问题 与FFT相比&#xff0c;低秩更新难以记忆新知识。虽然不断提高LoRA的秩可以缓解这一问题&#xff0c;但差距仍然存在。 动机 尽可能地利用相同的可训练参数来获得更高的 Δ W \Delta W ΔW秩。 考虑到预训练权值 W 0 ∈ R d k W_0\in R^{d\times k} W0​…

Mac电脑上有什么好玩的肉鸽游戏推荐 苹果电脑怎么玩以撒的结合

Mac电脑尽管在游戏兼容性上可能不及Windows。但是&#xff0c;对于喜欢在Mac上游玩的玩家来说&#xff0c;依然有不少优秀的游戏可以选择&#xff0c;尤其是那些富有挑战性和策略性的肉鸽游戏。此外&#xff0c;对于经典游戏《以撒的结合》&#xff0c;Mac平台也提供了良好的游…

原创作品—数据可视化大屏

设计数据可视化大屏时&#xff0c;用户体验方面需注重以下几点&#xff1a;首先&#xff0c;确保大屏信息层次分明&#xff0c;主要数据突出显示&#xff0c;次要信息适当弱化&#xff0c;帮助用户快速捕捉关键信息。其次&#xff0c;设计应直观易懂&#xff0c;避免复杂难懂的…

论文 | Chain-of-Thought Prompting Elicits Reasoningin Large Language Models 思维链

这篇论文研究了如何通过生成一系列中间推理步骤&#xff08;即思维链&#xff09;来显著提高大型语言模型进行复杂推理的能力。论文展示了一种简单的方法&#xff0c;称为思维链提示&#xff0c;通过在提示中提供几个思维链示例来自然地激发这种推理能力。 主要发现&#xff1…

飞睿智能会议室静止雷达人体检测传感器,实时监测使用状态,有人、无人智能感应节能减

在这个科技日新月异的时代&#xff0c;每一个细微的创新都可能成为推动行业创新的关键力量。今天&#xff0c;让我们聚焦于一项看似不起眼却实则潜力无限的技术——飞睿智能静止雷达人体检测传感器&#xff0c;以及它在会议室这一商务交流核心区域中的巧妙应用。想象一下&#…

嵌入式c语言——指针加修饰符

指针变量可以用修饰符来修饰

图吧工具箱:DIY爱好者必备工具合集

名人说&#xff1a;莫道谗言如浪深&#xff0c;莫言迁客似沙沉。 ——刘禹锡《浪淘沙》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、概述二、主要功能1、硬件检测2、测试与故障诊断 三、使用方法四、总结 很…

我是如何渗透电信网络的

TLDR&#xff1b;作为一个电信公司的红队&#xff0c;从该公司的网络监控系统&#xff08;NMS&#xff09;获得一个立足点。通过基于HTTP协议的SSH隧道解决了Shell反连问题。通过HTTP获得SSH连接时&#xff0c;使用了Ninja。搭建代理以进行内部网络扫描。使用SS7应用程序访问CD…

斯坦福大学博士在GitHub发布的漫画机器学习小抄,竟斩获129k标星

斯坦福大学数据科学博士Chris Albon在GitHub上发布了一份超火的机器学习漫画小抄&#xff0c;发布仅仅一天就斩获GitHub榜首标星暴涨120k&#xff0c;小编有幸获得了一份并把它翻译成中文版本&#xff0c;今天给大家分享出来&#xff01; 轻松的画风配上让人更容易理解的文字讲…

瑞萨RH850 RTC计时进位异常

RH850 MCU的RTC&#xff08;实时时钟&#xff09;采用BCD&#xff08;二进制编码的十进制&#xff09;编码格式&#xff0c;支持闰年自动识别&#xff0c;并具有秒、分、时、日、周、月、年的进位功能。其中&#xff0c;秒和分为60进位&#xff0c;时为12或24进位&#xff0c;周…

救生拉网的使用方法及注意事项_鼎跃安全

水域救援在夏季尤为重要&#xff0c;随着气温的升高&#xff0c;人们更倾向于参与水上活动&#xff0c;如游泳、划船、垂钓等&#xff0c;这些活动虽然带来了乐趣和清凉&#xff0c;但同时也增加了水域安全事故的风险。救生拉网作为水域安全的重要工具之一&#xff0c;其重要性…

Vue3 pdf.js将二进制文件流转成pdf预览

好久没写东西&#xff0c;19年之前写过一篇Vue2将pdf二进制文件流转换成pdf文件&#xff0c;如果Vue2换成Vue3了&#xff0c;顺带来一篇文章&#xff0c;pdf.js这个东西用来解决内网pdf预览&#xff0c;是个不错的选择。 首先去pdfjs官网&#xff0c;下载需要的文件 然后将下载…

前端入门知识分享:如何在HTML或CSS文件中引用CSS文件。

阅读提示&#xff1a;本文仅仅仅适用于刚刚接触HTML和CSS的小白从业者&#xff0c;新人爱好者。自觉身份不符的老鸟们&#xff0c;尽快绕行吧&#xff01; 什么是CSS&#xff1f;什么是CSS文件。 CSS&#xff0c;全称为Cascading Style Sheets&#xff08;层叠样式表&#xff…

数字化时代下,财务共享数据分析建设之路

随着人工智能、云计算、大数据、区块链等技术&#xff0c;以及衍生出的各种产品的大发展&#xff0c;使得数字化发展的速度再一次加快&#xff0c;也让数字经济和数字化转型得到了更多人的关注和认可。 在传统经济增长逐渐放缓&#xff0c;市场竞争愈发激烈的局面下&#xff0…

解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)

在使用虚拟机(Wmware)中&#xff0c;我们经常会在需要的时候拍摄虚拟机快照&#xff0c;尤其是虚拟机运行时的快照&#xff0c;动辄几个G&#xff0c;容易占满硬盘空间&#xff0c;那么有什么方法能够压缩虚拟机文件呢 下面是压缩后的存放虚拟机的文件夹 可以看到节约了大约2…

Banana Pi BPI-F3开发板支持OpenWrt

Banana Pi BPI-F3开源硬件开发板支持OpenWrt了。 基于原生OpenWrt 23.05集成Spacemit Stone 系列芯片的 BSP&#xff0c;包含监管程序接口&#xff08;OpenSBI&#xff09;、引导加载程序&#xff08;U-Boot/UEFI&#xff09;、Linux 内核、根文件系统&#xff08;包含各种中间…

安防视频监控/云存储/视频汇聚EasyCVR平台播放设备录像不稳定,是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供7*24小时实时高清视频监控、云端录像、云存储、录像检索与回看、智能告警…

【微信小程序开发实战项目】——个人中心页面的制作

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

hash

哈希 key->value&#xff0c;借助离散化的思想对数据进行映射&#xff0c;可视为用value代表原本的key 在C中&#xff0c;可使用map当做哈希表使用&#xff0c;将std::hash当做哈希函数使用 hash<Typename>name; size_t valuename(key);数字哈希 哈希函数的设计 方…