Oracle 数据库存储过程调用SpringBoot API 接口方法
数据库存储过程代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | CREATE OR REPLACE PROCEDURE FSMT.P_GET_HTTP_RES /* 描述:存儲過程掉用HTTP接口 作者:Janus 日期:2023-11-23 */ ( M_DOC_NO IN VARCHAR2, --?? M_DOC_TYPE IN VARCHAR2,--?据?型 M_STANDBY IN VARCHAR2, --?用字段 M_EMP IN VARCHAR2, --?工? RES OUT VARCHAR2 --返回值 ) AS REQ 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 L_BODY := ' {"msgid":"12313","usercode":"F2903004","show_notification_flag":1,"play_title_voice_flag":"1","Title":"123131","content":"1231231","query_url":"http://10.74.14.38/assets/ad8bebfbfe627.jpg"}' ; L_ADD:= 'http://172.16.3.82:18848/sys-message/send_alarm_ulist' ; REQ := utl_http.begin_request(url =>L_ADD, method => 'POST' ); utl_http.set_body_charset( 'UTF-8' ); utl_http.set_header(REQ, 'Content-Type' , 'application/json' ); utl_http.set_header(REQ, 'Authorization' , 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJGMjkwMzAwNCIsImlhdCI6MTcwMDQ3MTY0NCwiZXhwIjo3NzQ4NDcxNjQ0fQ.arfdRpFzQFfDC681dU4zWqjEe3CCCS1LGWEVuDi9_WS_r1aks2CG8ooNj-jyaCUWyvv_h9cHPohrblJjMuNc3A' ); utl_http.set_header(REQ, 'Content-Length' , lengthb(L_BODY)); utl_http.write_text(REQ, L_BODY); RESP := utl_http.get_response(REQ); utl_http.end_response(resp); utl_http.end_request(req); exception when utl_http.end_of_body then utl_http.end_response(RESP); RETURN; when others then dbms_output.put_line(sqlerrm); utl_http.end_response(resp); utl_http.end_request(req); RES := 'NG:' ||sqlerrm ; RETURN; end; |
1 | 要想Oracle 访问网络接口,还需要赋予必要权限 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | begin dbms_network_acl_admin.create_acl ( acl => 'utlhttpfsmt.xml' , -- 文件名称 description => 'HTTP Access' , -- 描述 principal => 'FSMT' , -- 授权或者取消授权账号,大小写敏感 is_grant => TRUE, -- 授权还是取消授权 privilege => 'connect' , -- 授权或者取消授权的权限列表 start_date => NULL, -- 起始日期 end_date => NULL -- 结束日期 ); commit; end; ------------------------------------------------------------------------------------------ begin dbms_network_acl_admin.add_privilege ( -- 添加访问权限列表项 acl => 'utlhttpfsmt.xml' , -- 刚才创建的acl名称 principal => 'FSMT' , -- 授权或取消授权用户 is_grant => TRUE, -- 与上同 privilege => 'connect' , -- 权限列表 connect即可 start_date => NULL, end_date => NULL ); commit; end; --------------------------------------------------------------------------------------------- begin dbms_network_acl_admin.assign_acl ( -- 该段命令意思是允许访问acl名为utl_http.xml下授权的用户,使用oracle网络访问包,所允许访问的目的主机,及其端口范围。 acl => 'utlhttpfsmt.xml' , host => '172.16.3.82' , -- ip地址或者域名,填写 -- 且建议使用ip地址或者使用域名,若用localhost,当oracle不是安装在本机上的情况下,会出现问题 lower_port => 10000, -- 允许访问的起始端口号 upper_port => 30000 -- 允许访问的截止端口号 ); commit; end; |
查看权限是否已经存在
1 2 | SELECT* FROM dba_network_acl_privileges; SELECT * FROM dba_network_acls |
找一个已经写好的测试接口如图
完结!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通