精华内容
下载资源
问答
  • oracle存储过程调用webservice

    千次阅读 2015-01-06 15:41:05
    oracle10以后,提供了可以使用存储过程调用webservice的功能,首先需要在官网下载dbws-callout-utility-10131包,解压缩之后把sqlj\lib下面的包都复制到oracle的product\11.2.0\dbhome_1\sqlj\lib下; 之后使用sys...

    oracle10以后,提供了可以使用存储过程调用webservice的功能,首先需要在官网下载dbws-callout-utility-10131包,解压缩之后把sqlj\lib下面的包都复制到oracle的product\11.2.0\dbhome_1\sqlj\lib下;

    之后使用sys账户登录到数据库,设置

    shared_pool_size=132M
    java_pool_size=80M

    showparameter SHARED_POOL_SIZE
    show parameter JAVA_POOL_SIZE

    alter system set SHARED_POOL_SIZE=132M scope=both;

    alter system set JAVA_POOL_SIZE=80M scope=both;

    之后执行

    loadjava -u scott/tiger -r -v -f -genmissing dbwsclientws.jardbwsclientdb11.jar

    scott/tiger 是需要调用webservice的用户和密码

    之后执行

    SQL> call dbms_java.grant_permission( 'SCOTT','SYS:java.lang.RuntimePermission', 'setFactory', '' );

    SQL> call dbms_java.grant_permission( 'SCOTT','SYS:java.lang.RuntimePermission', 'shutdownHooks', '' );
    SQL> call dbms_java.grant_permission( 'SCOTT','SYS:java.util.logging.LoggingPermission', 'control', '' );

    再执行

    SQL> @?/sqlj/lib/utl_dbws_decl.sql
    SQL> @?/sqlj/lib/utl_dbws_body.sql

    需要给Scott用户一些权限

    exec dbms_java.grant_permission( 'RADIUS', 'SYS:java.net.SocketPermission', 'localhost:7001', 'listen,resolve' );
    exec dbms_java.grant_permission( 'SCOTT', 'SYS:java.net.SocketPermission', 'localhost', 'resolve' );
    exec dbms_java.grant_permission( 'SCOTT', 'SYS:java.net.SocketPermission', '127.0.0.1:7001', 'connect,resolve' );
    EXEC Dbms_Java.Grant_Permission('SCOTT','java.io.FilePermission', '*','read ');
    EXEC dbms_java.grant_permission( 'SCOTT', 'SYS:java.lang.RuntimePermission', 'createClassLoader', '' );
    exec  dbms_java.grant_permission( 'SCOTT', 'SYS:java.util.PropertyPermission', 'HTTPClient.socket.idleTimeout', 'write' );
    exec dbms_java.grant_permission( 'SCOTT', 'SYS:java.lang.RuntimePermission', 'setFactory', '' );
    exec  dbms_java.grant_permission( 'SCOTT', 'SYS:java.lang.RuntimePermission', 'accessClassInPackage.sun.util.calendar', '' );
    exec dbms_java.grant_permission( 'SCOTT','SYS:java.lang.IllegalAccessException','getClassLoader', '' );
    exec dbms_java.grant_permission( 'SCOTT', 'SYS:java.lang.RuntimePermission', 'shutdownHooks', '' );
    exec dbms_java.grant_permission( 'SCOTT', 'SYS:java.util.logging.LoggingPermission', 'control', '' );
    exec dbms_java.grant_permission( 'SCOTT', 'SYS:java.lang.RuntimePermission', 'setFactory', '' );

    之后就可以执行webservice调用了

    declare
        service_ sys.utl_dbws.SERVICE;
        call_ sys.utl_dbws.CALL;
        service_qname sys.utl_dbws.QNAME;
        port_qname sys.utl_dbws.QNAME;
        operation_qname sys.utl_dbws.QNAME;
        string_type_qname sys.utl_dbws.QNAME;
        retx ANYDATA;
        retx_string VARCHAR2(100);
        retx_len number;
        params sys.utl_dbws.ANYDATA_LIST;
    begin
        service_qname := sys.utl_dbws.to_qname(null, 'HelloServiceEJB');
        service_ := sys.utl_dbws.create_service(service_qname);
        port_qname := sys.utl_dbws.to_qname(null, 'HttpSoap11');
        operation_qname := sys.utl_dbws.to_qname('http://oracle.j2ee.ws/javacallout/Hello/types', 'sayHelloElement');
        call_ := sys.utl_dbws.create_call(service_, port_qname, operation_qname);
        sys.utl_dbws.set_target_endpoint_address(call_, 'http://stacd15:8888/javacallout/javacallout');
        --sys.utl_dbws.set_property(call_, 'ENCODINGSTYLE_URI', 'http://schemas.xmlsoap.org/soap/encoding/');
        string_type_qname := sys.utl_dbws.to_qname('http://www.w3.org/2001/XMLSchema', 'string');
            sys.utl_dbws.add_parameter(call_, 'String_1', string_type_qname, 'ParameterMode.IN');
            sys.utl_dbws.set_return_type(call_, string_type_qname);
        params(0) := ANYDATA.convertvarchar('hello');
        retx := sys.utl_dbws.invoke(call_, params);
        retx_string := retx.accessvarchar2;
        dbms_output.put_line('PL/SQL DII client return ' || retx_string);
    end;

    需要注意的是

    sys.utl_dbws.add_parameter(call_, 'String_1', string_type_qname, 'ParameterMode.IN');

    中的'String_1' 是wsdl中的参数的名字,需要完全一致,如果存在多个参数,需要多次添加

    utl_dbws.add_parameter(call_,
                               'arg0',
                               string_type_qname,
                               'ParameterMode.IN');
        utl_dbws.add_parameter(call_,
                               'arg1',
                               string_type_qname,
                               'ParameterMode.IN');
        utl_dbws.add_parameter(call_,
                               'arg2',
                               string_type_qname,
                               'ParameterMode.IN');
        utl_dbws.add_parameter(call_,
                               'arg3',
                               string_type_qname,
                               'ParameterMode.IN');
        utl_dbws.add_parameter(call_,
                               'arg4',
                               string_type_qname,
                               'ParameterMode.IN');
        utl_dbws.add_parameter(call_,
                               'arg5',
                               string_type_qname,
                               'ParameterMode.IN');
        utl_dbws.set_return_type(call_, string_type_qname);
        params(0) := ANYDATA.convertvarchar(‘11’);
        params(1) := ANYDATA.convertvarchar(‘22’);
        params(2) := ANYDATA.convertvarchar(‘33’);
        params(3) := ANYDATA.convertvarchar(‘44’);
        params(4) := ANYDATA.convertvarchar(‘55’);
        params(5) := ANYDATA.convertvarchar(‘66’);
        retx := utl_dbws.invoke(call_, params);


    展开全文
  • SQL Server数据库中直接调用Web Service,不需要通过前台调用
  • ORACLE存储过程调用WebService

    千次阅读 2017-07-19 11:15:27
    最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明。其他主流数据库,比如mysql和sql service,调用web service的方法这里就不做...
        

    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体

    \

    \

    5.2.3关键点说明

    在存储过程中,使用UTL_HTTP工具包调用web服务时,几个关键方法的使用说明

    1.通过设置请求地址、方式、协议版本,得到http请求对象

    http_req := UTL_HTTP.

    begin_request(' http://localhost:6060/wstest_project/services/HelloWorld?wsdl ',

    'POST',

    UTL_HTTP.http_version_1_1);

    2.设置协议保持连接状态

    Utl_Http.Set_Persistent_Conn_Support(http_req, TRUE);

    3.设置请求编码,SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地。

    Utl_Http.Set_Header(http_req, 'Content-Type', 'text/xml;charset=utf-8');

    Utl_Http.Set_Header(http_req, 'SOAPAction', '');

    4.设置字符集

    Utl_Http.Set_Body_Charset(http_req, 'utf-8');

    5.报文长度

    Utl_Http.Set_Header(http_req, 'Content-Length', Lengthb(request_env));

    6.调用服务,发送报文

    Utl_Http.Write_Line(http_req, request_env);

    7.得到返回体

    http_Resp := Utl_Http.Get_Response(http_req);

    8.将返回报文赋值给变量

    Utl_Http.Read_Text(http_Resp, l_Replyline);

    5.3调用存储过程

    5.3.1使用PL/SQL Developer测试

    1)选中存储过程的名字,右键选择测试,进入测试页面

    \

    2)添加响应的参数值,F9或者点击按钮开始执行,执行后可以得到看到返回值

    \

    3)切换到DBMS输出页面,可以看到打印的内容

    \

    5.3.2使用sql代码调用

    DECLARE

    resmark varchar2(1000);

    BEGIN

    pro_test_ws(''小郑',resmark);

    DBMS_OUTPUT.PUT_LINE(resmark);

    END;

    1)打开sql窗口,执行上面的sql语句

    \

    2)查看输出信息

    \

    1处为存储过程打印的信息,2为调用时打印输出的信息

    6总结说明

    本文介绍了在oracle存储过程中,使用UTL_HTTP工具包,通过创建请求报文以及使用HTTP协议来调用Web Service,从创建oracle存储过程以及UTL_HTTP相关参数的配置,到通过PL/SQL Developer测试调用以及sql代码进行调用来详细说明。

    附件为存储过程创建sql、调用sql以及接口程序和相关的数据库文件。
    展开全文
  • SQL Server存储过程调用WebService

    千次阅读 2013-10-17 16:45:36
    一、发布WebService,服务的内容是通过...二、编写存储过程 create procedure [dbo].[proc_CallWebService] @parameter varchar(20) as begin declare @obj int declare @url varchar(200) declare @response

    一、发布WebService,服务的内容是通过手机号码查询用户姓名

    二、编写存储过程

    复制代码
    create procedure [dbo].[proc_CallWebService]
    @parameter varchar(20)
    as
    begin
        declare @obj int
        declare @url varchar(200)
        declare @response varchar(5000)
        set  @url='http://localhost/zyr/WebServiceDemo.asmx/GetUserNameByMobile?mobile='+@parameter+''
        exec sp_OACreate 'MSXML2.ServerXMLHttp',@obj out
        exec sp_OAMethod @obj,'Open',null,'GET',@url,false
        exec sp_OAMethod @obj,'send'
        exec sp_OAGetProperty @obj,'responseText',@response out
        
        select @response [response]
        exec sp_OADestroy @obj
    end
    复制代码

    说明:

    sp_OACreate 创建 OLE 对象实例。

    • 第一个参数为 OLE 对象的程序标识符(ProgID)或类标识符(CLSID)。
    • 第二个参数为返回的对象令牌,必须是数据类型为 int 的局部变量,在后面的方法中都要用到对象令牌。输出参数,必须加 OUT 或 OUTPUT。

    sp_OAMethod 调用 OLE 对象的方法。

    • 第一个参数为对象令牌。
    • 第二个参数为方法名称。
    • 第三个参数为方法的返回值,如果方法返回的是对象,则该参数类型为 int。输出参数,必须加 OUT 或 OUTPUT。
    • 第四个及以后的参数为方法的参数值,如果方法的参数是输出参数,则要加上 OUT 或 OUTPUT。
    • sp_OAMethod 也可用来获取属性值。

    sp_OAGetErrorInfo 获取 OLE 自动化错误信息。

    • 第一个参数为对象令牌。
    • 第二个参数为错误信息的来源。输出参数,必须加 OUT 或 OUTPUT。
    • 第三个参数为错误的描述。输出参数,必须加 OUT 或 OUTPUT。

    sp_OADestroy 释放已创建的 OLE 对象。

    • 第一个参数为对象令牌。

    另外,sp_OAGetProperty 获取 OLE 对象的属性值,sp_OASetProperty 将 OLE 对象的属性设置为新值,sp_OAStop 停止服务器范围内的 OLE 自动化存储过程执行环境。这些都比较简单。

    三、执行存储过程

    exec [dbo].[proc_CallWebService] '1526022****'

    结果如下:

    <?xml version="1.0" encoding="utf-8"?>  <string xmlns="http://app.cloud-erp.cn/">巫燕华</string>

    四、可能出现的错误

    1、问题一

    解决方法:

    可以使用 sp_configure 系统存储过程来查看和更改 Ole Automation Procedures 选项的当前值。

    查看 OLE Automation Procedures 的当前设置。

    EXEC sp_configure 'Ole Automation Procedures';
    GO

    启用 OLE Automation Procedures。

    复制代码
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ole Automation Procedures', 1;
    GO
    RECONFIGURE;
    GO
    复制代码

    2、问题二

     解决方法:

    在webservice的 <system.web> 节点下加入 

    <webServices>
        <protocols>
            <add name= "HttpPost" />
            <add name= "HttpGet" />
        </protocols>
    </webServices>

     原文地址:http://www.cnblogs.com/mbydzyr/archive/2013/04/17/3027350.html

    展开全文
  • 3.SQL直接调用webservice(略去触发器和存储过程)    DECLARE @scid int,@rt int   DECLARE @result nvarchar(4000)    --创建MSSOAP.SoapClient组件(如果安装的是SoapToolkit30,应该是MSSOAP.SoapClient...

    步骤:1.更改全局配置 
     sp_configure 'show advanced options', 1; 
     GO 
     RECONFIGURE; 
     GO 
     sp_configure 'Ole Automation Procedures', 1; 
     GO 
     RECONFIGURE; 
     GO 
      
    2.安装SoapToolkit(网上现有的方案大多没有提到这步)

    http://download.csdn.net/detail/ahywg/3800156
      
    3.SQL直接调用webservice(略去触发器和存储过程) 
      
    DECLARE @scid int,@rt int 
     DECLARE @result nvarchar(4000) 
      
    --创建MSSOAP.SoapClient组件(如果安装的是SoapToolkit30,应该是MSSOAP.SoapClient30,否则是MSSOAP.SoapClient),存储到@object中 
     EXEC @rt=sp_OACreate 'MSSOAP.SoapClient30',@scid out 
      
    --'http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl'为webservice地址 
     --‘qqOnlineWebService’为webservice名称 
     EXEC @rt = sp_OAMethod @scid, 'mssoapinit',null,'http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl','qqOnlineWebService' 
      
    --'qqCheckOnline'为webservice的一个方法,后面跟2个参数(输入参数:QQ号码 String,默认QQ号码:8698053。返回数据:String,Y = 在线;N = 离线;E = QQ号码错误;A = 商业用户验证失败;V = 免费用户超过数量) 
     EXEC @rt = sp_OAMethod @scid, 'qqCheckOnline', @result OUT,N'8698053' 
      
    IF @rt <> 0 
     BEGIN 
        EXEC sp_OAGetErrorInfo @scid    
    END 
     ELSE 
     BEGIN 
        select @result 
     END 
     --释放掉@scid 
     EXEC @rt = sp_OADestroy @scid 
     GO

    展开全文
  • 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明。其他主流数据库,比如mysql和sql service,调用web service的方法这里就不做...
  • 如题: 部门领导把这个活交给我了。555。我想哭,我想哭,我想哭。 求大侠们,帮助。
  • 如何在存储过程调用webservice 找了很长时间才找到解决方法,留下以下笔记。 存储过程调用webservice其实是在数据库中利用系统函数调用OLE. 1.查找webservice api 可得到MSSOAP.SoapClient。 2.查找API 接口...
  • 存储过程调用webservice

    千次阅读 2011-03-25 18:21:00
    存储过程调用webservice
  • 如果用存储过程调用webservice存储过程的功能感觉能做好多事情了? 别自欺欺人了、那些功能还是webservice来实现的... 完整的webservice代码:(也是默认的,新建.asmx文件的时候就有的:) using ...
  • WebService s 2 ( 3 @parameter nvarchar(500)=null 4 ) 5 as 6 Declare @obj int 7 Declare @SvercieUrl nvarchar(200) 8 Declare @response nvarchar(max) 9 10 11 Set @SvercieUrl = ''...
  • oracle存储过程,传入一个字符串,将传入的字符调用webservice给服务器.oracle存储过程调用webservice
  • webservice调用存储过程

    2017-05-27 14:54:00
    //--调用存储过程的方法 SqlConnection con = new SqlConnection(strCon); SqlDataAdapter sda = new SqlDataAdapter("GetTbpatient_zy_data", con); //调用存储过程,和前一个例子不同,这里用SqlDataAdapter,省去...
  • 我写了一上存储过程,很简单, 就是传入一个服务URL 通过个URL动态调用远程WebService 动态调用的类是在网上找的,一大堆,在C#程序中是没问题的 但同样的方法在CLR存储过程中无效,具体如下: /// < ...
  • excel宏: 随后更新 webservice: 1.创建空应用程序 ...创建数据同步的存储过程 下面是一些须要的代码。比較杂乱,有空再整理整理。 DataFactory.cs using System; using System.Collect...
  • 本文为转载:原文地址 在SQL SERVER 2008 R2 上亲测可用, ...这个存储过程配合SoapUI使用效果更好:参考地址 前提设置:http://www.cnblogs.com/chenxizhang/archive/2009/04/15/1436747.html 1.打开方面 ...
  • asp .net webservice 调用SqlServer带入参和SqlServer返回值的存储过程
  • 存储过程 create or replace procedure PRC_TEST( CorporationName in nvarchar2, DriverID in nvarchar2, DriverName in nvarchar2, FingerPrint in nvarchar2, retCode out number ) is v_sql ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 117
精华内容 46
关键字:

存储过程调用webservice