首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

PL/SQL 呼叫 HTTP API 完整範例:UTL_HTTP 實作 GET/POST 請求

     編輯:Oracle 教學

PL/SQL 使用 UTL_HTTP 呼叫外部 REST API

在 PL/SQL 中整合外部系統時,UTL_HTTP 套件是核心工具。使用前必須確保執行用戶擁有 NETWORK_ACL 權限(11g+ 需 DBMS_NETWORK_ACL_ADMIN 設定)。

GET 請求函數

CREATE OR REPLACE FUNCTION http_get(p_url IN VARCHAR2) RETURN CLOB IS
  http_req  UTL_HTTP.REQ;
  http_resp UTL_HTTP.RESP;
  l_raw     RAW(1024);
  l_resp    CLOB;
BEGIN
  http_req := UTL_HTTP.BEGIN_REQUEST(p_url, 'GET');
  http_resp := UTL_HTTP.GET_RESPONSE(http_req, TRUE);
  LOOP
    UTL_HTTP.READ_RAW(http_resp, l_raw, 1024);
    l_resp := l_resp || UTL_RAW.CAST_TO_VARCHAR2(l_raw);
  END LOOP;
  UTL_HTTP.END_RESPONSE(http_resp);
  RETURN l_resp;
EXCEPTION
  WHEN UTL_HTTP.END_OF_BODY THEN
    UTL_HTTP.END_RESPONSE(http_resp);
    RETURN l_resp;
END;

POST 請求函數

CREATE OR REPLACE FUNCTION http_post(
  p_url  IN VARCHAR2,
  p_data IN VARCHAR2  -- 格式:a=1&b=2
) RETURN CLOB IS
  http_req  UTL_HTTP.REQ;
  http_resp UTL_HTTP.RESP;
  l_raw     RAW(1024);
  l_resp    CLOB;
BEGIN
  http_req := UTL_HTTP.BEGIN_REQUEST(p_url, 'POST');
  UTL_HTTP.SET_HEADER(http_req, 'Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
  UTL_HTTP.SET_HEADER(http_req, 'Content-Length', LENGTH(p_data));
  UTL_HTTP.WRITE_TEXT(http_req, p_data);
  http_resp := UTL_HTTP.GET_RESPONSE(http_req, TRUE);
  LOOP
    UTL_HTTP.READ_RAW(http_resp, l_raw, 1024);
    l_resp := l_resp || UTL_RAW.CAST_TO_VARCHAR2(l_raw);
  END LOOP;
  UTL_HTTP.END_RESPONSE(http_resp);
  RETURN l_resp;
EXCEPTION
  WHEN UTL_HTTP.END_OF_BODY THEN
    UTL_HTTP.END_RESPONSE(http_resp);
    RETURN l_resp;
END;

關鍵點提醒

  • ACL 設定:11g 後預設封鎖外部連線,需執行 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE 授權。
  • 編碼處理:中文參數請先 UTL_URL.ESCAPE,回傳 CLOB 以支援大量資料。
  • 逾時控制:可用 UTL_HTTP.SET_TRANSFER_TIMEOUT 避免卡死。
  • HTTPS:需匯入憑證至 Oracle Wallet,並用 UTL_HTTP.SET_WALLET 指定。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved