oracle调用API

一、开启ACL

1、创建ACL  黄色标记的换成对应的用户名即可

begin

 dbms_network_acl_admin.create_acl (

 acl => 'HTTPUSER_UTL_INADDR.xml',--自定义授权配置文件

 description => 'utl_inaddr',

  principal => 'HTTPUSER',   --此为将来要进行操作的用户

 is_grant => TRUE,

  privilege => 'resolve'

  );

  commit;

  end;

2  、增加权限

begin

dbms_network_acl_admin.add_privilege (

acl => 'HTTPUSER_UTL_INADDR.xml',

principal => 'HTTPUSER',

is_grant => TRUE,

privilege => 'connect'

);

 commit;

end;

3 、授予用户权限

begin

dbms_network_acl_admin.assign_acl(

acl => 'HTTPUSER_UTL_INADDR.xml',

host => '*'--允许访问的ip地址

);

commit;

end;

二、创建函数

create or replace function jgh22(r_content in  string)

return varchar2

 IS

  req  UTL_HTTP.REQ;

  resp UTL_HTTP.RESP;

  message  clob;

  strtemp varchar2(32767);

  r_content2 varchar2(32767);

  r_content3 varchar2(32767);

  r_url varchar2(2000) := 'http://192.168.31.86:8504/api'; #换成对应的API

begin

    begin

      r_content2:='{'||'"line":"'||r_content||'"}';

      r_content2:=replace(r_content2,chr(10),' ') ; #替换\r \n \t

      r_content2:=replace(r_content2,chr(13),' ') ;

      r_content2:=replace(r_content2,chr(9),' ') ;

      req  := UTL_HTTP.BEGIN_REQUEST(r_url,'POST','HTTP/1.1');

       utl_http.set_persistent_conn_support(req,TRUE);

        utl_http.set_header(req, 'Content-Type', 'application/json;charset=utf-8');

         strtemp:=CONVERT(r_content2, 'UTF8','ZHS16GBK'); #字符串类型转换,需根据数据库类型适配

       ---设置字符集

      UTL_HTTP.set_body_charset(req,'utf-8');

       utl_http.set_header(req, 'Content-Length',lengthb(strtemp));

       utl_http.write_raw(req,utl_raw.cast_to_raw(strtemp));

       resp := UTL_HTTP.GET_RESPONSE(req);

       if resp.status_code = 200 then

       utl_http.read_text(resp, message, length(message));  #接收数据

       utl_http.end_response(resp);

       else--错误处理

       message := '网络访问错误!';

       utl_http.end_response(resp);

       end if;

       r_content2 :=message;

     -- utl_http.end_request(req);

    EXCEPTION

      WHEN utl_http.end_of_body THEN

        utl_http.end_response(resp);

        WHEN OTHERS THEN

          dbms_output.put_line(sqlerrm);

          dbms_output.put_line(dbms_utility.format_error_backtrace);

     -- utl_http.end_response(resp);

      utl_http.end_request(req);

    end;

    r_content2:=replace(r_content2,'[[','[')  ;

    r_content2:=replace(r_content2,']]',']')  ;

    r_content2:=replace(r_content2,'],[',']@[')  ;

    return r_content2;

END ;

三、函数调用

select ID,jgh22(DOCTEXT) AS br_level from API_SQL  #表名

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Oracle调用存储过程,可以使用以下步骤: 1. 创建存储过程:使用Oracle SQL Developer或其他数据库管理工具创建存储过程,例如: ``` CREATE OR REPLACE PROCEDURE my_procedure (p_param1 IN VARCHAR2, p_param2 OUT NUMBER) IS BEGIN -- 在这里编写存储过程的代码 p_param2 := 100; END; ``` 2. 使用PL/SQL块调用存储过程:在Oracle SQL Developer或其他数据库管理工具中,使用PL/SQL块调用存储过程,例如: ``` DECLARE v_param1 VARCHAR2(100) := 'Hello'; v_param2 NUMBER; BEGIN my_procedure(v_param1, v_param2); dbms_output.put_line('Output parameter value: ' || v_param2); END; ``` 在此示例中,我们声明了两个变量v_param1和v_param2,并将v_param1作为输入参数传递给存储过程my_procedure。存储过程将p_param2设置为100,然后将其作为输出参数返回。最后,我们使用dbms_output.put_line显示输出参数的值。 3. 使用Java代码调用存储过程:如果您正在使用Java编写应用程序,并且需要在Oracle调用存储过程,则可以使用JDBC API。以下是一个简单的示例: ``` Connection conn = DriverManager.getConnection(url, username, password); CallableStatement stmt = conn.prepareCall("{call my_procedure(?, ?)}"); stmt.setString(1, "Hello"); stmt.registerOutParameter(2, Types.INTEGER); stmt.execute(); int outputValue = stmt.getInt(2); System.out.println("Output parameter value: " + outputValue); ``` 在此示例中,我们使用JDBC API创建了一个CallableStatement对象,并指定了存储过程的名称和参数。我们将第一个参数设置为"Hello",并将第二个参数注册为输出参数。最后,我们执行了存储过程,并从CallableStatement对象中获取输出参数的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值