PLSQL访问webservice, utl_dbws是个不错的选择,另外的一种方式是直接构造http请求访问。

这里,使用了utl_http工具包,并使用了XMLTABLE+XPATH获取请求的结果。

另外,普通数据库用户需要预先授权。

代码如下:

DECLARE

req     utl_http.req;

resp    utl_http.resp;

v_msg   VARCHAR2(80);

v_url   VARCHAR2(32767) := '';

v_name  VARCHAR2(32767);

v_value VARCHAR2(32767);

v_clob_content CLOB;

--这里是请求的内容

v_content VARCHAR2(32767) := '

';

v_xmltable xmltype;

BEGIN

--utl_http.set_response_error_check ( enable => true );

-- utl_http.set_detailed_excp_support ( enable => true );

--dbms_output.put_line('STATUS CODE: ' || 'resp.status_code');

req := utl_http.begin_request(v_url, 'POST', utl_http.http_version_1_1);

utl_http.set_header(req, 'Content-Type', 'text/xml; charset=utf-8');

--utl_http.set_header(req, 'Host', '220.168.42.13');

utl_http.set_header(req, 'Content-Length', length(v_content));

utl_http.write_text(req, v_content);

resp := utl_http.get_response(r => req);

dbms_output.put_line('STATUS CODE: ' || resp.status_code);

dbms_output.put_line('REASON PHRASE: ' || resp.reason_phrase);

BEGIN

LOOP

utl_http.read_line(resp, v_value, TRUE);

v_clob_content := v_clob_content || v_value;

--dbms_output.put_line(v_value);

END LOOP;

/*FOR i IN 1 .. utl_http.get_header_count(r => resp) LOOP

utl_http.get_header(r => resp,

n => i,

NAME => v_name,

VALUE => v_value);

dbms_output.put_line(v_name || ': ' || v_value);

END LOOP;*/

utl_http.end_response(r => resp);

EXCEPTION

WHEN OTHERS THEN

--dbms_output.put_line(SQLCODE || ':' || SQLERRM);

--dbms_output.put_line(dbms_utility.format_error_backtrace);

--dbms_output.put_line(dbms_utility.format_error_stack);

utl_http.end_response(r => resp);

END;

--dbms_output.put_line(v_clob_content);

/* v_clob_content := REPLACE(v_clob_content,

' SOAP-ENV:encodingStyle=" xmlns:SOAP-ENV=" xmlns:xsd=" xmlns:xsi=" xmlns:SOAP-ENC="',

'');

v_clob_content := REPLACE(v_clob_content,

' xmlns:ns1="',

'');

v_clob_content := REPLACE(v_clob_content, ' xsi:type="xsd:string"', '');

v_clob_content := REPLACE(v_clob_content, 'SOAP-ENV:', '');

v_clob_content := REPLACE(v_clob_content, 'ns1:', '');*/

--dbms_output.put_line(v_clob_content);

v_xmltable := xmltype(v_clob_content);

--这里解析返回的结果 如果有namespace需要在extract参数里声明。

--dbms_output.put_line(v_xmltable.extract('/soap:Envelope/soap:Body/svc_aboutResponse/svc_aboutResult/text()', 'xmlns:soap=" xmlns:xsi=" xmlns:xsd="')

--                     .getclobval());

dbms_output.put_line(v_xmltable.extract('/soap:Envelope/soap:Body/svc_aboutResponse/svc_aboutResult/text()', 'xmlns:soap=" xmlns:xsi=" xmlns:xsd=" xmlns="h2"').getclobval());

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line(SQLCODE || ':' || SQLERRM);

dbms_output.put_line(dbms_utility.format_error_backtrace);

dbms_output.put_line(dbms_utility.format_error_stack);

--utl_http.end_response(r => resp);

END;

关于oracle中utl_http,Oracle使用utl_http访问webservice相关推荐

  1. oracle中totimestamp,oracle中to_timestamp和to_date什么区别

    date类型是Oracle常用的日期型变量,时间间隔是秒.两个日期型相减得到是两个时间的间隔,注意单位是"天". timestamp是DATE类型的扩展,可以精确到小数秒(frac ...

  2. oracle中primary,oracle中如何 Primary key自增

    oracle中如何 Priamry key自增 摸索了一晚上,终于实现了key的自增,现在将实现的过程总结如下: (1)首先创建一个表:这里是我创建的一个User表,包括id,user_name,pa ...

  3. oracle中命令,oracle中常用命令汇总(一)

    1.如何查看Oracle的数据库sid名称? 如果用sysdba身份登录.执行以下命令: SQL> conn / as sysdba; 已连接. SQL> select name from ...

  4. oracle中nextday,Oracle日期函数 next_day

    Oracle日期函数 next_day 在Oracle是提供了next_day求指定日期的下一个日期. 语法 : next_day( date, weekday ) date is used to f ...

  5. oracle中submit,Oracle中DBMS_JOB.SUBMIT的用法说明

    Oracle中DBMS_JOB.SUBMIT的用法说明 用法DEMO: DBMS_JOB.SUBMIT(:jobno,//job号 'your_procedure;',//要执行的过程 trunc(s ...

  6. oracle中isnumeric,Oracle 中 isnumeric 的三种实现

    使用过 asp 的应该对 isnumeric 函数不会陌生,这是一个常用的判断入参是否为数字的函数.在 oracle 中没有现成的判断是否为数字函数,下面就用三种方法来实现: 1. 利用 to_num ...

  7. oracle中pdb,Oracle 12C新特性-CDB和PDB 详解

    最近看到好多人都在尝试Oracle中的12C新特性-容器数据库,今年3月Orcle推出了Release2版本,可以算是一个稳定版本了.下午着手尝试了一下,还是蛮不错得 1.前言 CDB与PDB是Ora ...

  8. oracle中database,Oracle Database 一些基本的视图和表

    近日收集了一些Oracle Database中DBA常用的表和视图,便于使用和学习之用.........[@more@] ☆dba_开头..... dba_users 数据库用户信息 dba_segm ...

  9. oracle中persons,oracle 简单备注

    1. 建立数据库 备注: 1) oracle 不同于mysql 可以直接create database 2) oracle 创建schema时对应一个用户,即该schema的访问用户,与用户一一对应: ...

  10. oracle中 awr,ORACLE AWR(AWR、SNAPSHOT、BASELINE)

    1. AWR是什么? AWR(Automatic Workload Repository)是存放oracle数据库历史性能数据的信息库,包含系统.session.SQL等大量的统计数据,存放在SYSA ...

最新文章

  1. 如何自定义制表符到空格的转换因子?
  2. 通过facade(尤其是realtime facade)来使代码更优雅
  3. jni jvm 内存泄漏_内存泄漏
  4. 如何设计一个 A/B test?
  5. 歌一定要带监听耳机吗_在演唱会上,歌手耳朵里戴的不是“耳机”,而是这个东西...
  6. python如何查询数据库_python如何实现查询sql数据库并生成html文件?
  7. java能过吗_java – 你能通过例子解释AspectJ的cFlow(P u00...
  8. Android之library class android.webkit.WebViewClient depends on program class android.net.http.SslErro
  9. SQL Server里查看当前连接的在线用户数
  10. VS2017专业版使用最新版Qt5.9.2教程(转载)
  11. 专业零售商行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  12. java 夏令时 容器 问题,Java夏令时有关问题
  13. 重定向linux编译,linux重定向 - 悟性的个人页面 - OSCHINA - 中文开源技术交流社区...
  14. 如何对西数硬盘固件进行逆向分析(下)
  15. Tunnel Warfare HDU 1540 区间合并+最大最小值
  16. 编程小工具总结(一) 取色器
  17. matlab仿真怎么添加干扰信号,噪声干扰信号的matlab仿真
  18. 【CUDA开发】CUDA的安装、Nvidia显卡型号及测试
  19. Prometheus学习之Blackbox
  20. 网站外链建设:论坛签名外链还值得做吗?

热门文章

  1. web后端--Django学习笔记04
  2. EXCEL中如何使用正则表达式
  3. 色彩大全 Android 颜色值
  4. 广州塔C语言程序,小蛮腰 led广州塔diy程序
  5. 读书笔记_课外——《红楼梦》
  6. 员工过失给企业造成损失,赔偿责任分析
  7. 2021.03.15 云题库
  8. win7设置wifi热点_Windows系统设置WIFI热点
  9. linux 下的程序格式,linux 下软件安装包的格式有哪些?
  10. 今天测试了两个跑步软件