首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

FineReport 調用 Oracle 存儲過程兩步走:定義 Package/Cursor 與報表數據源配置

     編輯:Oracle 資料庫相關知識

業務表結構

表 StScroe:學生成績信息
ClassNo (VARCHAR2)  -- 班級號
... 其他成績字段

步驟一:Oracle 端定義存儲過程

Oracle 存儲過程無直接返回值,集合結果需通過 REF CURSOR 輸出,且必須定義在 Package 規範 中。

1. 創建 Package 規範

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

2. 創建存儲過程

CREATE OR REPLACE PROCEDURE p_STSCORE (
  Class IN VARCHAR2,
  p_CURSOR OUT TESTPACKAGE.Test_CURSOR
) IS
BEGIN
  OPEN p_CURSOR FOR
    SELECT * FROM FR.STSCORE WHERE STSCORE.ClassNo = Class;
END p_STSCORE;

步驟二:FineReport 設計器配置

  1. 啟動設計器 → 右鍵「數據源」面板 → 選擇「私有數據源」。
  2. 在彈出對話框中:
    • 數據源類型選「存儲過程」。
    • 輸入過程名:p_STSCORE。
    • 參數映射:Class 綁定報表參數或固定值;p_CURSOR 類型選「游標/結果集」。
  3. 確定後即可在報表中使用該數據源拖拽字段設計版式。

關鍵點總結

  • REF CURSOR 必須在 Package 中定義類型,否則編譯報 PLS-00320。
  • 過程參數模式:IN 輸入、OUT 輸出游標,無 IN OUT。
  • FineReport 會自動 FETCH 游標所有行填充內存數據集,大結果集需注意堆內存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved