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

Oracle Reports 定長報表實現:Tabular 風格的分頁控制技巧

     編輯:Oracle 資料庫基礎

前言

Oracle Reports 提供六種報表風格,其中 Tabular(表格式)與 Matrix(矩陣式)最常用。Tabular 風格列數固定、行數動態,打印時常需每頁固定行數(定長輸出)。本文介紹利用報表觸發器 After Parameter Form 與 After Report 插入/刪除空記錄,實現定長分頁輸出的實戰方法。

場景與數據模型

基表 WZDM(物資代碼信息):

字段名含義長度類型
WZDM物資代碼9CHAR
WZMC物資名稱20CHAR
XHGG型號規格20CHAR
JLDW計量單位6CHAR

需求:每頁固定輸出 X 行(X 根據紙張大小確定),不足行以空白行填充。

實現步驟

1. 報表觸發器:After Parameter Form(報表運行前插入空記錄)

DECLARE
  v_jls NUMBER(2);  -- 總記錄數
  i     NUMBER(2) := 1;
BEGIN
  SELECT COUNT(*) INTO v_jls FROM wzdm;
  IF MOD(v_jls, :x) <> 0 THEN  -- :x 為每頁行數參數
    LOOP
      EXIT WHEN i >= (:x - MOD(v_jls, :x)) + 1;
      INSERT INTO wzdm (wzdm, wzmc, xhgg, jldw) VALUES ('', '', '', '');
      i := i + 1;
    END LOOP;
    COMMIT;
  END IF;
END;

邏輯:計算總行數對每頁行數取模,若有餘數,則插入 (X - 餘數) 條空記錄,使總行數成為 X 的倍數。

2. 報表觸發器:After Report(報表輸出後清理空記錄)

BEGIN
  DELETE FROM wzdm WHERE wzdm IS NULL;
  COMMIT;
END;

報表生成後立即刪除臨時插入的空記錄,不影響業務數據。

3. 運行報表

啟動 Oracle Reports,建立 Tabular 風格報表,綁定上述觸發器,運行即可獲得每頁固定 X 行的定長輸出。

遷移與應用建議

  • 適用於所有 Tabular 風格報表,只需修改表名、字段名及每頁行數參數 :x。
  • 若基表有非空約束,可插入特殊標記值(如 'DUMMY'),刪除時按標記值過濾。
  • 大數據量場景下,頻繁 INSERT/DELETE 可能產生碎片,建議定期整理表或使用臨時表方案。

總結

巧用報表觸發器在數據層面「補齊」行數,是實現 Tabular 定長輸出的經典技巧,無需複雜的格式化邏輯,兼容性強,適合各類打印單據、清單報表。

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