oracle存储过程调用http接口
创建ACL
-- 添加acl和权限控制(sql语句执行的方式来执行)begindbms_network_acl_admin.create_acl ( -- 创建访问控制文件(ACL)acl => 'utl_http.xml', -- 文件名称description => 'HTTP Access', -- 描述principal => 'N2ADMIN', -- 授权或者取消授权账号,大小写敏感is_grant => TRUE, -- 授权还是取消授权privilege => 'connect', -- 授权或者取消授权的权限列表start_date => null, -- 起始日期end_date => null -- 结束日期);dbms_network_acl_admin.add_privilege ( -- 添加访问权限列表项acl => 'utl_http.xml', -- 刚才创建的acl名称 principal => 'N2ADMIN', -- 授权或取消授权用户is_grant => TRUE, -- 与上同 privilege => 'resolve', -- 权限列表start_date => null, end_date => null);dbms_network_acl_admin.assign_acl ( -- 该段命令意思是允许访问acl名为utl_http.xml下授权的用户,使用oracle网络访问包,所允许访问的目的主机,及其端口范围。acl => 'utl_http.xml',host => '10.1.131.71', -- ip地址或者域名,填写https://localhost:9000/hello与https://localhost:9000/是会报host无效的-- 且建议使用ip地址或者使用域名,若用localhost,当oracle不是安装在本机上的情况下,会出现问题lower_port => 8080, -- 允许访问的起始端口号upper_port => Null -- 允许访问的截止端口号);commit;end;
存储过程调用http接口
CREATE OR REPLACE
PROCEDURE P_GET_HTTP_RES
/*描述:存储过程调用HTTP接口作者:tcl日期:2020-12-1
*/
(M_DOC_NO IN VARCHAR2, --单号M_DOC_TYPE IN VARCHAR2,--单据类型M_STANDBY IN VARCHAR2, --备用字段M_EMP IN VARCHAR2, --员工号RES OUT VARCHAR2 --返回值)
ASREQ utl_http.req;RESP utl_http.resp;V_LINE varchar2(4000);V_TEXT varchar2(4000);L_BODY varchar2(4000);L_RES varchar2(200);L_MSG varchar2(4000);RESVALUE varchar2(200);L_ADD varchar2(400);
BEGIN--基础数据校验BEGIN--单据为空if M_DOC_NO is null then RES := 'NG:' || F_C_GET_MULTILINGUAL('单号不能为空', M_LANG);RETURN;end if ;--单据类型为空if M_DOC_TYPE is null then RES := 'NG:' || F_C_GET_MULTILINGUAL('单据类型不能为空', M_LANG);RETURN;end if;END;--begin--请求json L_BODY := '{' || '"DOC_NUM":"' || M_DOC_NO || '","DOC_TYPE":"' ||Trim(substrb(M_DOC_TYPE, 0, 15)) || '","STANDBY":"' ||Trim(substrb(M_STANDBY, 0, 15)) || '"}'; --请求地址L_ADD:='http://127.0.0.1:8080/XM/http/interface.ms?model=CommonInterface&method=CommonInterface';REQ := utl_http.begin_request(L_ADD,'POST');utl_http.set_body_charset('UTF-8');utl_http.set_header(REQ, 'Content-Type', 'application/json');utl_http.set_header(REQ, 'Content-Length', lengthb(L_BODY));utl_http.write_text(REQ, L_BODY);RESP := utl_http.get_response(REQ);-- dbms_output.put_line(resp);looputl_http.read_line(RESP, V_LINE);V_TEXT := V_TEXT || V_LINE;dbms_output.put_line('请求json '||l_body); dbms_output.put_line('返回json '||v_text); --解析传出json {"result":"S","message":"接收成功"} oracle 12c select json_value(V_LINE,'$.result'),json_value(V_LINE,'$.message') into L_RES,L_MSG from dual;if L_RES ='S' then RES:='OK:'||L_MSG;else RES:='NG:'||L_MSG;end if;dbms_output.put_line('result:'||l_res||' message:'||L_MSG); end loop; utl_http.end_response(resp);utl_http.end_request(req);exceptionwhen utl_http.end_of_body thenutl_http.end_response(RESP);RETURN;when others thendbms_output.put_line(sqlerrm);utl_http.end_response(resp);utl_http.end_request(req);RES := 'NG:' ||sqlerrm ;RETURN;end;
END;
oracle存储过程调用http接口相关推荐
- 记录 Oracle 远程调用 HTTP 接口
记录 Oracle 远程调用 HTTP 接口 前言 1. 演示接口 2. 开启Oracle ACL权限 3. 配置HTTP连接 调用 4. 可能会使用到 修改ACL文件 查询ACL文件是否存在 遇到的 ...
- Oracle 存储过程调用语句
#oracle 存储过程调用语句 declare v_custName varchar2(10); --客户姓名 v_num number; --订单分布天数 v_time number; --每日订 ...
- oracle存储过程游标调用,oracle存储过程调用游标例子-Oracle
oracle存储过程调用游标例子. 1:首先你需要创建一个包,并定义你返回的游标的类型.存储过程 create or replace package TEST_PKG is --定义游标 type t ...
- oracle存储过程 调用java_Oracle存储过程调用Java方法
存储过程中调用Java程序段 软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:\OR ...
- oracle存储过程调用sql文件,oracle存储过程的sql调用
因为做项目的测试,所有需要不断的在数据库手工添加数据,这时候如果是批量的插入测试数据,很多情况下要用到存储过程. 如下,是Oracle数据库下一个简单的插入数据的存储过程: create or rep ...
- oracle存储过程调用游标例子
1:首先你需要创建一个包,并定义你返回的游标的类型.存储过程 create or replace package TEST_PKG is --定义游标 type t_cur is REF CUR ...
- oracle存储过程学习经典[语法+实例+调用]
Oracle存储过程基础知识 商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程. 存储过程是SQL, PL/SQL, Java 语句的组合,它使你能将执行商业规则的代码从你的应 ...
- Oracle 存储过程,Hibernate 调用存储过程,JDBC调用存储过程,Oracle 动态SQL
Oracle 存储过程学习 目录 Oracle 存储过程........................................................................ ...
- Oracle存储过程的几种调用方式
记录:284 场景:Oracle存储过程调用方式,包括PL/SQL的SQL窗口中调用.在PL/SQL的命令窗口.在Procedures菜单列表中选中存储过程名称右键点击测试.在Package Bodi ...
最新文章
- 撩课-Java面试宝典-第十二篇
- 扎心一问!为什么前后端分离后,你比从前更痛苦?
- ollvm 编译器优化的bug
- pr图形模板预设怎么使用_技术丨PR怎样安装动态图形模板?Pr mac版怎样调用Mogrt预设?Adobe Premiere导入MOGRTs预设完整教程...
- 2012服务器文件加密,Windows Server 2012安全方面的改变_服务器评测与技术-中关村在线...
- jzoj4745-看电影【期望概率,数学】
- Qt ModbusTCP ModbusRTU 使用同步读和异步写
- Python可视化神器之pyecharts
- Reactor和Proactor对比以及优缺点 (netty的底层原理reactor模型)
- 【Python爬虫】Re(正则表达式)库入门
- vue的matcher_一张思维导图辅助你深入了解 Vue | Vue-Router | Vuex 源码架构
- 硬盘损坏如何恢oracle,硬盘物理损坏,如何恢复数据库?
- gtest的介绍和使用
- html 正则表达式密码判断,JS利用正则表达式实现简单的密码强弱判断实例
- 使用Auto.js实现微信自动发朋友圈脚本
- 菜鸟教程首页制作html5
- 做正确的事和正确的做事
- 电赛专题 |国一作品_线路负载及故障检测装置
- PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.4
- puts() 与 printf() 的对比