关于oracle中utl_http,Oracle使用utl_http访问webservice
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相关推荐
- oracle中totimestamp,oracle中to_timestamp和to_date什么区别
date类型是Oracle常用的日期型变量,时间间隔是秒.两个日期型相减得到是两个时间的间隔,注意单位是"天". timestamp是DATE类型的扩展,可以精确到小数秒(frac ...
- oracle中primary,oracle中如何 Primary key自增
oracle中如何 Priamry key自增 摸索了一晚上,终于实现了key的自增,现在将实现的过程总结如下: (1)首先创建一个表:这里是我创建的一个User表,包括id,user_name,pa ...
- oracle中命令,oracle中常用命令汇总(一)
1.如何查看Oracle的数据库sid名称? 如果用sysdba身份登录.执行以下命令: SQL> conn / as sysdba; 已连接. SQL> select name from ...
- oracle中nextday,Oracle日期函数 next_day
Oracle日期函数 next_day 在Oracle是提供了next_day求指定日期的下一个日期. 语法 : next_day( date, weekday ) date is used to f ...
- oracle中submit,Oracle中DBMS_JOB.SUBMIT的用法说明
Oracle中DBMS_JOB.SUBMIT的用法说明 用法DEMO: DBMS_JOB.SUBMIT(:jobno,//job号 'your_procedure;',//要执行的过程 trunc(s ...
- oracle中isnumeric,Oracle 中 isnumeric 的三种实现
使用过 asp 的应该对 isnumeric 函数不会陌生,这是一个常用的判断入参是否为数字的函数.在 oracle 中没有现成的判断是否为数字函数,下面就用三种方法来实现: 1. 利用 to_num ...
- oracle中pdb,Oracle 12C新特性-CDB和PDB 详解
最近看到好多人都在尝试Oracle中的12C新特性-容器数据库,今年3月Orcle推出了Release2版本,可以算是一个稳定版本了.下午着手尝试了一下,还是蛮不错得 1.前言 CDB与PDB是Ora ...
- oracle中database,Oracle Database 一些基本的视图和表
近日收集了一些Oracle Database中DBA常用的表和视图,便于使用和学习之用.........[@more@] ☆dba_开头..... dba_users 数据库用户信息 dba_segm ...
- oracle中persons,oracle 简单备注
1. 建立数据库 备注: 1) oracle 不同于mysql 可以直接create database 2) oracle 创建schema时对应一个用户,即该schema的访问用户,与用户一一对应: ...
- oracle中 awr,ORACLE AWR(AWR、SNAPSHOT、BASELINE)
1. AWR是什么? AWR(Automatic Workload Repository)是存放oracle数据库历史性能数据的信息库,包含系统.session.SQL等大量的统计数据,存放在SYSA ...
最新文章
- 如何自定义制表符到空格的转换因子?
- 通过facade(尤其是realtime facade)来使代码更优雅
- jni jvm 内存泄漏_内存泄漏
- 如何设计一个 A/B test?
- 歌一定要带监听耳机吗_在演唱会上,歌手耳朵里戴的不是“耳机”,而是这个东西...
- python如何查询数据库_python如何实现查询sql数据库并生成html文件?
- java能过吗_java – 你能通过例子解释AspectJ的cFlow(P u00...
- Android之library class android.webkit.WebViewClient depends on program class android.net.http.SslErro
- SQL Server里查看当前连接的在线用户数
- VS2017专业版使用最新版Qt5.9.2教程(转载)
- 专业零售商行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- java 夏令时 容器 问题,Java夏令时有关问题
- 重定向linux编译,linux重定向 - 悟性的个人页面 - OSCHINA - 中文开源技术交流社区...
- 如何对西数硬盘固件进行逆向分析(下)
- Tunnel Warfare HDU 1540 区间合并+最大最小值
- 编程小工具总结(一) 取色器
- matlab仿真怎么添加干扰信号,噪声干扰信号的matlab仿真
- 【CUDA开发】CUDA的安装、Nvidia显卡型号及测试
- Prometheus学习之Blackbox
- 网站外链建设:论坛签名外链还值得做吗?