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

Oracle Reports 固定行列輸出技巧:Tabular 與 Matrix 樣式實作

     編輯:Oracle 資料庫基礎

Oracle Reports 產出的報表預設為動態行列數,列印時常因頁尾資料不足導致版面錯位。本文分享兩種樣式的固定行列輸出實作:Tabular 用「觸發器補空白列」,Matrix 用「視圖 Union 空白列」,皆經實務驗證可直接套用。

一、Tabular 樣式:固定行數(列數固定、行數不定)

需求

  • 基表 wzdm(物資代碼),欄位:wzdm、wzmc、xhgg、jldw
  • 每頁固定輸出 x 行(如 30 行),不足補空白列

實作步驟

  1. 建立報表版面(略)。
  2. After Parameter Form Trigger:報表跑查詢前,先算出需補幾列,插入空白列。
  3. After Report Trigger:報表輸出完成後,刪除剛插入的空白列,還原資料。

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
    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 為使用者參數,可在報表執行時輸入每頁行數。

After Report 程式碼

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

二、Matrix 樣式:固定行數與列數(行列皆不定)

需求

  • 基表 t_zjxhqx(物資資金消耗去向月報),欄位:lbmc(類別)、dwmc(單位)、je(金額)
  • 每頁固定 x 行(類別)、y 列(單位),不足補空白

實作邏輯:建立輔助表 + 視圖 Union

  1. 建立序號表 t_kjl(no NUMBER(2)),塞入 1..z(z = 每頁最大可印行數)。
  2. 建立視圖 v_tjbb,將實際資料與空白列做 UNION,透過 MOD 計算需補行數與列數。
  3. 報表查詢直接選 v_tjbb,即可得到固定 x 行 y 列結果。

視圖 DDL

CREATE VIEW v_tjbb AS
SELECT dwmc, lbmc, je FROM t_zjxhqx
UNION
SELECT dwmc, NULL, TO_NUMBER(NULL)
FROM t_zjxhqx, t_kjl
WHERE no - (z - x) > (SELECT MOD(COUNT(DISTINCT lbmc) - 1, x) + 1 FROM t_zjxhqx)
UNION
SELECT NULL, lbmc, TO_NUMBER(NULL)
FROM t_zjxhqx, t_kjl
WHERE no - (z - y) > (SELECT MOD(COUNT(DISTINCT dwmc) - 1, y) + 1 FROM t_zjxhqx);

z、x、y 需依實際版面替換為常數。

比較與選擇建議

樣式方法優點缺點
TabularTrigger 插/刪空白列邏輯直觀、不改動基表結構會實際寫入資料表,並發環境需注意鎖衝突
Matrix視圖 Union 空白列零侵入、效能佳、適合交叉表視圖 SQL 較複雜,維護需理解 MOD 邏輯

遷移至 BI Publisher / APEX 的提示

若專案已規劃移轉現代化報表工具,Tabular 固定行可用 RTF 模板 for-each@last-page 邏輯;Matrix 固定行列可用 Pivot Table 設定「顯示無資料項目」。

掌握這兩招,即可在 Oracle Reports 專案中輸出整齊劃一的列印版面,滿足財務、稽核單位的格式嚴格要求。

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