如何在 DDS 邏輯文件中正確使用 PFILE 關鍵字?(AS400)
我在正確表述這個問題時遇到了麻煩(也不確定我是否在正確的堆棧部分)
我的問題是我有一個
ORDFILE
位於ORDRENTLB
庫中的邏輯文件,即假設可以訪問CIFFILE
位於CUSTINFOLB
庫中的物理文件數據。編譯時,我得到的程序只是“異常結束”錯誤。
但是,當我刪除
PFILE(CUSTINFOLB/CIFFILE)
並將類型更改為 PF 時,它可以完美編譯。CIFFILE 已成功編譯為它唯一的 PF。
我嘗試過的:移動
ORDFILE
到與 CIFFILE 相同的庫(異常結束錯誤)嘗試通過在中放置一個旁邊來聲明為a (CUSTOMER
出現錯誤)嘗試在 , 周圍放置單引號(錯誤)foreign key``F``CUSTOMER``ORDFILE``'CUSTINFOLB/CIFFILE'
我究竟做錯了什麼?
謝謝你的時間。
編輯
範圍:在 iSeries 平台上創建一個小型分發系統。創建一系列包含以下程式碼的庫:
- 客戶資訊文件 (CIF) 功能
- 訂單輸入功能
- 採購功能
- 庫存功能
我的要求:
- 根據指定的資訊,為 4 個文件組中的每一個創建 4 個 DDS 規範。
- 為您使用 DDS 規範設置的 4 個文件中的每一個創建 4 個 DFU 程序。
- 創建 4 個 CL 程序來執行您創建的 DFU 程序。
包括一些評論以及選擇菜單選項後將出現在螢幕上的消息。例如,如果您選擇選項 #1 來輸入 CIF 數據,則最初應顯示一條消息,例如 -“CIF 數據輸入程序現在正在執行”
- 為 3 個部門(訂單輸入/庫存/採購)中的每一個創建 3 個菜單,每個菜單上都有相應的標題。
- 創建一個名為 MAINMENU 的主菜單以訪問 3 個部門菜單。
- 根據 CIF 文件創建 Query/400 報告並將其作為選項添加到主菜單。
確保您已遵循以下 3 個要求:
通過選擇“列印”選項將查詢創建為報告。格式化 CIF # 以消除報告上的數字中的“,”。在報表上放置一個頁面標題。
- 主菜單應包括以下菜單選項:
轉到 3 個不同的“部門”菜單 執行 CIF 查詢程序 訪問假離線文件 註銷
- 在您創建的菜單上設置 CLP 程序。
CIF 主文件只能存在於一個地方,但所有部門都必須能夠訪問同一個文件。
數據庫:
客戶資訊文件 =>
客戶編號(5 位數字欄位)- KEY
公司名
聯繫人姓名
城市
電話號碼
客戶訂單總額 ($)
訂單輸入文件 =>
訂單輸入編號(6 位數字欄位)- KEY
顧客號碼
訂購的商品編號(10 個字元)
訂購日期 訂購數量
排序者(人名)
訂單總額 ($)
庫存文件 =>
零件編號(6 位數字欄位)- KEY
部分說明
手頭數量
單位成本
缺貨指示符(1 字節 Alpha)
購買文件 =>
採購訂單號(4 位數字欄位)- KEY
零件號
購買數量
數量延期交貨
購買日期
總採購訂單金額 ($)
這四件事中的每一個都應該有自己的PF(又名表)。在現實世界中,它們中的任何一個甚至可能最好由附加的補充表來服務,這可能是適當的。例如,假設客戶希望為幾個不同的項目安排訂單。這通常使用訂單標頭檔來處理,以儲存與整個訂單相關的數據,以及每個被訂購商品的訂單詳細資訊文件。但我們將保持在您的任務範圍內,該任務已明確措辭與預期的設計。
這些表本身不訪問彼此的資訊。但它們將包含欄位(又名列),這些欄位將引用其他表中的關鍵欄位。通過為每個這樣的鍵序列創建一個簡單的鍵控邏輯文件,為每個表創建索引通常是一個好主意,因為我們可以期望以各種方式訪問它。
在這種情況下,在你定義了你的 之後
ORDFILE
,你可以定義一個邏輯文件,例如ORDFILE1
,CUSTOMER
作為$$ first $$關鍵欄位,可能後跟
ORDRNUM
. 您可能有另一個由 鍵控ITEMNUM
。任何可能派上用場的鍵序列都可以擁有自己的 LF。索引在 iSeries 上的成本非常低,因此有幾十個不是問題,即使其他平台可能有較低的推薦指南。因此,在現實世界中,您可能希望在這些文件上創建一個很好的品種,以幫助優化器處理您的使用者可能想要的各種查詢。對於這樣的任務,只創建與需求相關的任務。 將各種物理欄位組合在一起的 LF 類型稱為連接(或連接)邏輯文件。除非你的教授提到它,否則這可能超出了他/她的期望範圍。一個查詢可以讀取多個 PF,就像連接邏輯一樣,因此在這種情況下連接 LF 可能是多餘的。免責聲明
該平台上的現代最佳實踐通常是對數據庫使用 SQL,而不是 DDS 和 Query/400。知道 QM Query 可以將 Query/400 查詢轉換為 SQL 可能會很方便。但是大多數公司仍然有大量使用 DDS 定義的數據庫文件。當您是該平台上的專業開發人員時,了解這些早期技術非常重要,因為您可能必須支持它們。