在 IBM i (原 AS/400) 中,邏輯文件 (Logical File, LF) 相當於關係數據庫的 View + Index 合體:
A R LFREC PFILE(PFNAME) * 記錄格式名,引用物理文件
A FIELD1 * 包含字段 (投影)
A FIELD2
A K FIELD1 * 鍵字段 (索引順序)
R:記錄格式名 (通常與 PF 同名或加後綴)。PFILE:指定基礎物理文件 (可多個,實現聯接邏輯文件)。K:鍵字段,構建索引順序,支持 DESC、ABSVAL、ZONE、FCFO/FIFO/LIFO 等排序屬性。
A R LFREC PFILE(PFNAME)
A FIELD1
A FIELD2
A K FIELD1
A S FIELD2 COMP(GT 100) * 選擇 FIELD2 > 100 的行
A O FIELD3 COMP(EQ 'DEL') * 省略 FIELD3 = 'DEL' 的行
S (Select):僅包含滿足條件的行。O (Omit):排除滿足條件的行。EQ/NE/LT/LE/GT/GE、RANGE、LIST、VALUES。S FIELD1 COMP(GT 10) COMP(LT 100) 等價 BETWEEN。
A R JLFREC PFILE(PF1 PF2) * 多物理文件
A PF1.FIELD1
A PF2.FIELD2
A PF2.FIELD3
A K PF1.FIELD1
A J JOIN(1 2) * 聯接規範
A JFLD(PF1.KEY / PF2.FKEY) * 聯接字段
A JREF(1) * 主文件 (左表)
A JTYPE(INNER) * INNER/LEFT/RIGHT/EXCEPTION
A R LFREC PFILE(PFNAME)
A FIELD1
A FULLNAME 30A COLHDG('Full Name')
A FULLNAME CONCAT(FIELD1 ' ' FIELD2) * 表達式定義
A K FULLNAME
| 概念 | DDS LF | SQL |
|---|---|---|
| 投影列 | 列出字段名 | SELECT col1, col2 ... |
| 行過濾 | S/O ... COMP(...) | WHERE ... |
| 排序/索引 | K field ... | CREATE INDEX ... ON ... (col) / ORDER BY |
| 聯接 | JOIN ... JFLD ... JTYPE | JOIN ... ON ... |
| 衍生欄位 | CONCAT/SUBST/表達式 | col1 || ' ' || col2 AS new_col |
| 唯一性約束 | UNIQUE 關鍵字 | UNIQUE INDEX / PRIMARY KEY |
OPEN 同一 LF 多次可共享開放數據路徑,減少開銷。
-- 等價 SQL 對象
CREATE VIEW LF_VIEW AS
SELECT FIELD1, FIELD2, FIELD1 || ' ' || FIELD2 AS FULLNAME
FROM PF_TABLE
WHERE FIELD2 > 100 AND FIELD3 <> 'DEL';
CREATE INDEX LF_IDX ON PF_TABLE (FIELD1); -- 鍵序列
-- 選擇/省略在 SQL 中由 View WHERE 實現,索引由優化器決定是否使用
趨勢:新開發優先用 SQL DDL (View/Index/Trigger),DDS LF 維護存量應用。IBM i 7.3+ 完整支持 SQL 標準,優化器對 View+Index 組合優化極佳。
邏輯文件是 IBM i 獨特的「視圖+索引」融合抽象,將數據訪問路徑 (選擇、投影、排序、聯接) 封裝為系統級對象,被查詢優化器、高級語言 (RPG/COBOL/CL) 直接識別。掌握 DDS 語法與 SQL 映射關系,能在存量現代化改造中平滑過渡,保護既有投資。