关于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 ...
最新文章
- 关于MySQL count(distinct) 逻辑的另一个bug
- BZOJ2584 : [Wc2012]memory
- 机器学习——推荐算法
- 现代化权限管理解决方案平台推动商业模式的演进
- vuex mysql_vuex + koa + mysql实现购物车功能(一)
- intelij idea启动之谜
- 洛谷P4173:残缺的字符串(FFT、通配符匹配)
- python---Socket编程
- mysql管理应用_如何在PHP和MySQL中制作出色的库存管理应用程序
- java求值不用后缀表达式_数据结构之后缀表达式求值(java实现)
- Ubuntu 18.04 rc.local systemd设置
- phar打包thinkphp5项目
- JDBC连接效率问题
- eclipse 安装gradle并成功创建一个项目
- html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例
- nginx搭建html
- 齐齐哈尔计算机应用软件学校,黑龙江齐齐哈尔计算机应用技术课程
- Android笔记-Felix
- 免费的实时数据库,我们该选谁?----BerkeleyDB与SQLite评测对比
- python绘制子图技巧——plt.subplot和plt.subplots、及坐标轴修改
热门文章
- “不是内部或外部命令,也不是可运行的程序或批处理文件”
- 1-3 js基础还是看caicia吧(老师说小游戏)
- [T-ARA][TIAMO]
- java regux_使用Unix命令在Java中打印Mac的序列号
- 2013年5月25日星期六
- windows11 任务栏和开始菜单都不见了怎么办?
- 嵌入式系统设计电子书
- 小白装机工具提示在引导修复时检测到错误解决方法
- java四种权限修饰符 (private 、default(缺省)、prote、public)适用范围
- PEG/蛋白Prote/抗体antibody/PAA/SiO2功能化 修饰NaY(Gd/Lu/Nd):Yb,Tm@NaYF4:Yb,Nd上转换纳米颗粒