古いas400システムには、「メンバー」と呼ばれるものがあります。基本的に、テーブルに複数のメンバーを設定して、選択したメンバーのみを操作できます。 詳細
メンバーのあるテーブルから選択する場合、いくつかのオプションがあります。選択を行うだけで、最初のメンバーからデータが取得されます。または、ストアドプロシージャを呼び出して、テーブルのメンバーを設定し、それを取得します。または、テーブルにアクセスするためのメンバーを含むテーブルのエイリアスを作成します。しかし、単に取得する方法はありません
すべてのメンバーからテーブルからすべてのデータを選択する方法はありますか?
最善の解決策は、DB2マルチシステム製品をインストールして、テーブルをローカルの「パーティション分割テーブル」として再作成することです。
背後では、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
を発行して、必要なメンバーにアクセスできます。または、すべてのメンバーのエイリアスを事前に作成することもできます。
次に、エイリアスを次のようにselectステートメントで使用できます
select * from myalias1
UNION ALL
select * from myalias2
上記のステートメントからビューを作成できればいいのですが、残念ながらできません。そうしようとすると、SQL7030 - Alias MYALIAS1 for table MYTABLE in MYLIBRARY not valid for statement.
になります。
私が知っているステートメントをカプセル化する唯一の方法は、それをストアード・プロシージャーまたはユーザー定義テーブル関数(UDTF)として定義することです。
この質問: https://stackoverflow.com/questions/353424/list-of-source-members-in-a-file-with-sql は、テーブルのメンバーを一覧表示するSQLを提供します。
SELECT TABLE_PARTITION FROM SYSPARTITIONSTAT
WHERE TABLE_NAME = 'MYTABLE' AND TABLE_SCHEMA = 'MYSCHEMA'
次に、リストをループし、これらの行に沿ってsqlを使用して、各メンバーへのアクセスを順番に取得できます。
CREATE ALIAS QTEMP.MYMBRB FOR MYSCHEMA.MYTABLE (MBRB)
データをプルすることができます:
SELECT * FROM QTEMP.MYMBRB
お役に立てれば。
または、IBM i CLコマンドを使用して満足している場合は、おそらくOVRDBF(MBR(* ALL)オプションがある)を使用してそれを行う方法がありますが、私は今そのルートを試す立場にはありません。