web-dev-qa-db-ja.com

IBM DB2メンバーテーブルからすべてのデータを選択

古いas400システムには、「メンバー」と呼ばれるものがあります。基本的に、テーブルに複数のメンバーを設定して、選択したメンバーのみを操作できます。 詳細

メンバーのあるテーブルから選択する場合、いくつかのオプションがあります。選択を行うだけで、最初のメンバーからデータが取得されます。または、ストアドプロシージャを呼び出して、テーブルのメンバーを設定し、それを取得します。または、テーブルにアクセスするためのメンバーを含むテーブルのエイリアスを作成します。しかし、単に取得する方法はありません

すべてのメンバーからテーブルからすべてのデータを選択する方法はありますか?

1
Ruslan

最善の解決策は、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)として定義することです。

0
Charles

この質問: 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)オプションがある)を使用してそれを行う方法がありますが、私は今そのルートを試す立場にはありません。

1
MandyShaw