相关文章推荐
高大的毛衣  ·  将 Entity ...·  1 月前    · 
好帅的抽屉  ·  使用存储过程、函数或打包的过程和函数轮询 ...·  1 月前    · 
无邪的海豚  ·  sql server 存储过程访问 url ...·  3 周前    · 
骑白马的开水瓶  ·  mysql ...·  3 周前    · 
重感情的西装  ·  Mysql存储过程退出循环的方法是什么开发者社区·  3 周前    · 
一直单身的跑步鞋  ·  生成一个vba,筛选G列,取消全选和空白,点 ...·  7 月前    · 
近视的手套  ·  Seaborn + ...·  1 年前    · 
叛逆的乒乓球  ·  MySQL NULL 值处理 | 菜鸟教程·  1 年前    · 
多情的黑框眼镜  ·  使用 vite 代替 webpack 搭建 ...·  2 年前    · 
Code  ›  ORACLE存储过程调用Web Service--Java学习网开发者社区
web技术 oracle 存储过程
https://cloud.tencent.com/developer/article/1844697
有胆有识的玉米
1 年前
作者头像
用户1289394
0 篇文章

ORACLE存储过程调用Web Service--Java学习网

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Java学习网 > ORACLE存储过程调用Web Service--Java学习网

ORACLE存储过程调用Web Service--Java学习网

作者头像
用户1289394
发布 于 2021-07-09 11:57:10
432 0
发布 于 2021-07-09 11:57:10
举报

1. 概述

最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明。其他主流 数据库 ,比如mysql和sql service,调用web service的方法这里就不做介绍了,本文主要用来介绍oracle存储过程调用Web Service的方法。

众所周知,在Web Service通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP协议是基于HTTP协议的,两者的关系就好比高速公路是基于普通公路改造的,在一条公路上加上隔离栏后就成了高速公路。

同理,在oracle的存储过程中能不能也通过创建XML格式的报文+HTTP协议来调用Web Service呢?答案是肯定的,在ORACLE中有一个名叫UTL_HTTP的工具包,我们可以通过这个工具包来实现存储过程调用Web Service。

上文提到的AEAI ESB是数通畅联的核心产品之一,可以实现WEB服务开发和WEB服务注册等功能,本文的接口样例,本考虑使用ESB创建的WEB服务,但是由于涉及到的需要介绍的内容和本文主题太远,所以采用了AEAI DP开发平台自带的Web服务样例来说明。有对AEAI ESB感兴趣的读者可以通过本文最后的相关链接查找了解。

2. 预期读者

  • 数通畅联新员工
  • 广大技术爱好者

3. 环境信息

操作系统:Windows7

Oracle: 版本为oracle11g

Mysql:版本为mysql5.1

Jdk: jdk1.6.0_10

4. 名词解释

AEAI ESB:应用集成平台主要作为企业信息系统的“龙骨”来集成各业务系统,一般称之为企业服务总线(Enterprise Service BUS,ESB),在数通畅联软件的产品家族中应用集成平台命名为AEAI ESB。

AEAI DP:AEAI DP应用开发平台专门用于开发MIS类的Java Web应用,也称Miscdp(Misc Develope Platform)综合应用开发平台。AEAI DP应用开发平台在数通畅联软件产品家族中也作为扩展开发的支撑工具,比如:为AEAI Portal门户平台扩展开发Portlet组件、Web Service和Http Service;为AEAI BPM流程集成平台扩展开发业务流程表单及功能等。

存储过程:大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

UTL_HTTP:oracle中自带的HTTP协议工具包,可以用来发送post请求。

PL/SQL Developer:一个集成开发环境,由Allround Automations公司开发,专门面向Oracle 数据库存储 的程序单元的开发

5. 操作步骤

5.1 创建样例接口

使用AEAI DP开发平台,创建自带WS服务的应用,如下图:

选择数据库信息

部署应用后,查看刚刚创建的应用自带的WS服务

5.2 创建存储过程

5.2.1 基本语法

以下为创建存储过程的基本语法

CREATE OR REPLACE PROCEDURE存储过程名 ( --定义参数 )IS定义变量BEGIN开始PL/SQL体END说明PL/SQL体结束

5.2.2 创建步骤

1、打开PL/SQL,并打开一个sql窗口

2、将创建存储过程的语句放入其中并执行

这样一个调用web service的存储过程样例就创建了,以下为详细的样例sql体


--创建存储过程,定义四个参数,入参:userid,code,name;出参:resmark
CREATE OR REPLACE PROCEDURE pro_test_ws(name in varchar2,resmark out varchar2) IS
--定义四个变量,http请求,http返回,请求报文,返回报文
  http_req    UTL_HTTP.REQ;
  http_Resp   UTL_HTTP.RESP;
  request_env VARCHAR2(32767);
  l_Replyline VARCHAR2(1000);
BEGIN
--开始pl/sql体
  request_env := '
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:demo="http://demo.service.wstest.agileai.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <demo:sayHi>
         <!--Optional:-->
         <theGirlName>'|| name ||'</theGirlName>
      </demo:sayHi>
   </soapenv:Body>
</soapenv:Envelope>
--打印请求报文
dbms_output.put_line(request_env);
--请求WS地址
  http_req    := UTL_HTTP.
                 begin_request('http://localhost:6060/cam/services/UserSync?wsdl',
                               'POST',
                               UTL_HTTP.http_version_1_1);
-- 保持连接状态
      Utl_Http.Set_Persistent_Conn_Support(http_req, TRUE);
--设置编码
      Utl_Http.Set_Header(http_req, 'Content-Type', 'text/xml;charset=utf-8');
      Utl_Http.Set_Header(http_req, 'SOAPAction', '');
--设置字符集
      Utl_Http.Set_Body_Charset(http_req, 'utf-8');
--该参数代表我发送的POST报文多长,不可少
      Utl_Http.Set_Header(http_req, 'Content-Length', Lengthb(request_env));
      Utl_Http.Write_Line(http_req, request_env);
--赋值http返回
      http_Resp := Utl_Http.Get_Response(http_req);
--将请求报文赋值给 l_Replyline
      Utl_Http.Read_Text(http_Resp, l_Replyline);
      dbms_output.put_line(l_Replyline);
 
推荐文章
高大的毛衣  ·  将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库
1 月前
好帅的抽屉  ·  使用存储过程、函数或打包的过程和函数轮询 Oracle 数据库 - BizTalk Server | Microsoft Learn
1 月前
无邪的海豚  ·  sql server 存储过程访问 url - IWing
3 周前
骑白马的开水瓶  ·  mysql 循环需要存储过程吗_mob64ca12dc88a3的技术博客_
3 周前
重感情的西装  ·  Mysql存储过程退出循环的方法是什么开发者社区
3 周前
一直单身的跑步鞋  ·  生成一个vba,筛选G列,取消全选和空白,点击筛选-CSDN博客
7 月前
近视的手套  ·  Seaborn + Pandas带你玩转股市数据可视化分析 - 开发者头条
1 年前
叛逆的乒乓球  ·  MySQL NULL 值处理 | 菜鸟教程
1 年前
多情的黑框眼镜  ·  使用 vite 代替 webpack 搭建 react 前端开发环境_mjzhang1993的博客-CSDN博客
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号