從 IBM DB2 成員表中選擇所有數據
舊的 as400 系統有一個叫做“成員”的東西。基本上,您可以在一張桌子上擁有多個成員,然後只使用選定的一個。 更多資訊
當您從具有成員的表中進行選擇時,您有幾個選項。只需進行選擇將從第一個成員中檢索數據。或者呼叫儲存過程來設置表的成員並檢索它。或者為表創建一個別名以供成員訪問它。但是沒有辦法只得到一個
有沒有辦法從所有成員的表中選擇所有數據?
最好的解決方案是安裝 DB2 Multisystem 產品並將表重新創建為本地“分區表”。
在幕後,DB2 for i 將表創建為一個多成員 PF,基本上就像您現在所擁有的一樣。
但是,引用該表的 SQL 語句將自動神奇地查看所有數據。使用 OVRDBF 覆蓋特定成員的舊 RPG 應用程序將繼續像以前一樣工作。
不幸的是,DB2 多系統並不便宜。如果您還沒有它,我懷疑您是否想獲得它。
您可以使用 DTAMBRS(*ALL) 創建 DDS 邏輯文件或使用 OVRDBF MBR(*ALL) 創建數據的單個“視圖”。但不幸的是,只有使用記錄級訪問(RLA - 又稱“原生 RPG I/O 操作碼”)的 RPG 程序才能使用它們。SQL 訪問會導致
CPF4268 - Object *ALL in *N type *MEM not found.
DB2 for i 中唯一對成員一無所知的 SQL 語句就是該
CREATE ALIAS
語句。因此,您可以CREATE ALIAS
根據需要發出 a 來訪問您需要的成員。或者您可以為每個成員預先創建別名。然後,您可以像這樣在 select 語句中使用別名
select * from myalias1 UNION ALL select * from myalias2
如果您可以根據上面的語句創建視圖,那就太好了,不幸的是您不能。嘗試這樣做會導致
SQL7030 - Alias MYALIAS1 for table MYTABLE in MYLIBRARY not valid for statement.
封裝我知道的語句的唯一方法是將其定義為儲存過程或使用者定義的表函式 (UDTF)。