zoukankan      html  css  js  c++  java
  • 使用oracle utl_http包需要注意的事项

    总结下几次使用utl_http包遇到的几个问题

    关于utl_http包功能还是很强大的 可以通过他来捕捉网站页面的内容 或者调用一个url的接口完成某项功能
    Eg:
    declare
      req  UTL_HTTP.REQ;
      resp UTL_HTTP.RESP;
      v_text varchar2(4000);
    begin
      --here you can insert other code even procedure or funciton
      --my codeing is etl monitor
      v_text := etl_monitor; --this is the etl monitor procedure
      if v_text is not null then
      req  := UTL_HTTP.BEGIN_REQUEST('http://192.168.xxx.xxx/pass/web/alertsms.php?data=' ||
                                     v_text);
      resp := UTL_HTTP.GET_RESPONSE(req);
      utl_http.end_response(resp);
      end if;
     
    EXCEPTION
      WHEN utl_http.end_of_body THEN
        utl_http.end_response(resp);
    end;
    使用它来发送短信(告警) 注意这里可以再嵌套其他代码甚至是过程或函数
    今天在调试上述代码时总是抛出:
    declare
    *
    ERROR at line 1:
    ORA-29273: HTTP request failed
    ORA-06512: at "SYS.UTL_HTTP", line 1231
    ORA-29263: HTTP protocol error
    ORA-06512: at line 11
    这个错误 测试半天发现是v_text文本内容中含有空格 是调用的接口程序不允许含有空格字符~汗!
     
    第二个 关于有时中文乱码:
    declare
      req  UTL_HTTP.REQ;
      resp UTL_HTTP.RESP;
      val  varchar2(32767);
    begin
     
      req := UTL_HTTP.BEGIN_REQUEST('xxx');
      utl_http.set_header(req, 'Content-Type', 'text/html; charset=utf-8');--add this
      resp := UTL_HTTP.GET_RESPONSE(req);
      utl_http.read_line(resp, val, true);
      utl_http.end_response(resp);
      dbms_output.put_line(val);
     
    EXCEPTION
      WHEN utl_http.end_of_body THEN
        utl_http.end_response(resp);
    end;
  • 相关阅读:
    HDU4529 郑厂长系列故事——N骑士问题 —— 状压DP
    POJ1185 炮兵阵地 —— 状压DP
    BZOJ1415 聪聪和可可 —— 期望 记忆化搜索
    TopCoder SRM420 Div1 RedIsGood —— 期望
    LightOJ
    LightOJ
    后缀数组小结
    URAL
    POJ3581 Sequence —— 后缀数组
    hdu 5269 ZYB loves Xor I
  • 原文地址:https://www.cnblogs.com/xinxin1994/p/5992282.html
Copyright © 2011-2022 走看看