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. 关于MySQL count(distinct) 逻辑的另一个bug
  2. BZOJ2584 : [Wc2012]memory
  3. 机器学习——推荐算法
  4. 现代化权限管理解决方案平台推动商业模式的演进
  5. vuex mysql_vuex + koa + mysql实现购物车功能(一)
  6. intelij idea启动之谜
  7. 洛谷P4173:残缺的字符串(FFT、通配符匹配)
  8. python---Socket编程
  9. mysql管理应用_如何在PHP和MySQL中制作出色的库存管理应用程序
  10. java求值不用后缀表达式_数据结构之后缀表达式求值(java实现)
  11. Ubuntu 18.04 rc.local systemd设置
  12. phar打包thinkphp5项目
  13. JDBC连接效率问题
  14. eclipse 安装gradle并成功创建一个项目
  15. html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例
  16. nginx搭建html
  17. 齐齐哈尔计算机应用软件学校,黑龙江齐齐哈尔计算机应用技术课程
  18. Android笔记-Felix
  19. 免费的实时数据库,我们该选谁?----BerkeleyDB与SQLite评测对比
  20. python绘制子图技巧——plt.subplot和plt.subplots、及坐标轴修改

热门文章

  1. “不是内部或外部命令,也不是可运行的程序或批处理文件”
  2. 1-3 js基础还是看caicia吧(老师说小游戏)
  3. [T-ARA][TIAMO]
  4. java regux_使用Unix命令在Java中打印Mac的序列号
  5. 2013年5月25日星期六
  6. windows11 任务栏和开始菜单都不见了怎么办?
  7. 嵌入式系统设计电子书
  8. 小白装机工具提示在引导修复时检测到错误解决方法
  9. java四种权限修饰符 (private 、default(缺省)、prote、public)适用范围
  10. PEG/蛋白Prote/抗体antibody/PAA/SiO2功能化 修饰NaY(Gd/Lu/Nd):Yb,Tm@NaYF4:Yb,Nd上转换纳米颗粒