Oracle Reports 提供六種報表風格,其中 Tabular(表格式)與 Matrix(矩陣式)最常用。Tabular 風格列數固定、行數動態,打印時常需每頁固定行數(定長輸出)。本文介紹利用報表觸發器 After Parameter Form 與 After Report 插入/刪除空記錄,實現定長分頁輸出的實戰方法。
基表 WZDM(物資代碼信息):
| 字段名 | 含義 | 長度 | 類型 |
|---|---|---|---|
| WZDM | 物資代碼 | 9 | CHAR |
| WZMC | 物資名稱 | 20 | CHAR |
| XHGG | 型號規格 | 20 | CHAR |
| JLDW | 計量單位 | 6 | CHAR |
需求:每頁固定輸出 X 行(X 根據紙張大小確定),不足行以空白行填充。
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 的倍數。
BEGIN
DELETE FROM wzdm WHERE wzdm IS NULL;
COMMIT;
END;
報表生成後立即刪除臨時插入的空記錄,不影響業務數據。
啟動 Oracle Reports,建立 Tabular 風格報表,綁定上述觸發器,運行即可獲得每頁固定 X 行的定長輸出。
:x。巧用報表觸發器在數據層面「補齊」行數,是實現 Tabular 定長輸出的經典技巧,無需複雜的格式化邏輯,兼容性強,適合各類打印單據、清單報表。