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

Oracle存儲過程返回結果集:REF CURSOR與Package實現詳解

     編輯:Oracle 資料庫基礎

為什麼需要Package?

Oracle存儲過程無直接返回值,所有返回通過OUT參數實現。返回結果集(集合類型)時,不能使用普通參數,必須定義REF CURSOR類型,而自定義類型必須在Package規格中聲明。

兩步實現方案

第一步:創建Package定義游標類型

CREATE OR REPLACE PACKAGE TESTPACKAGE AS
    TYPE Test_CURSOR IS REF CURSOR;
END TESTPACKAGE;

第二步:創建存儲過程使用游標輸出

CREATE OR REPLACE PROCEDURE TESTC(
    p_CURSOR OUT TESTPACKAGE.Test_CURSOR
) IS
BEGIN
    OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;
END TESTC;

核心機制:將游標(指向結果集的指針)作為OUT參數返回。

Java調用REF CURSOR

CallableStatement proc = conn.prepareCall("{call hyq.testc(?)}");
proc.registerOutParameter(1, OracleTypes.CURSOR);
proc.execute();
ResultSet rs = (ResultSet) proc.getObject(1);
while (rs.next()) {
    System.out.println(rs.getString(1) + " | " + rs.getString(2));
}

關鍵技術點

  • 必須導入oracle.jdbc.OracleTypes註冊游標類型
  • 使用getObject()獲取並強轉為ResultSet
  • Package規格與體分離,便於類型復用和維護
  • 游標在調用端需顯式關閉,防止資源洩漏

進階應用

可結合動態SQL構建靈活查詢:OPEN p_CURSOR FOR 'SELECT * FROM ' || table_name; 實現通用分頁、報表查詢等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved