Iseries/IBMi DB2 用。
複数のファイル/テーブルを結合しています。
私は DDS と SQL の両方でコードを書きました。
DDS 論理ファイルは期待どおりに機能していますが、デフォルトで SQE エンジンが使用されるため、rpgle に埋め込まれた SQL には使用できず、パフォーマンスが大幅に低下します。
一方、SQL ビューは、NULLs私が使用するまではIFNULL( MBRDESCR, ''). しかし、今MBRDECSRはVARCHARです。これは受け入れられません。
NULLsでは、 andなしで SQL 結合を作成するにはどうすればよいVARCHARsでしょうか。
要求されたサンプル コード:
DDS:
JDFTVAL
R TRANSR JFILE(TRANSPF MBRPF)
J JOIN(1 2)
JFLD(MBRID MBRID)
*
トランシッド JREF(1)
MBRID JREF(1)
MBRNAME JREF(2)
MBRSURNME JREF(2)
*
Kトランシッド
K MBRID
SQL:
ビュー TRANSV01 を作成 (
TRANSID を選択します。
MBRID 、
CAST(IFNULL(MBRNAME , '') as Char(20)) ,
CAST(IFNULL(MBRSURNME, '') as Char(25))
TRANSPFから
- メンバー名
MBRID = MBRID の LEFT OUTER JOIN MBRPF
) RCDFMT TRANSR;
次の点に注意してください:
上記の例は単純化されています
TRANSPF のすべての MBRID が MBRPF に対応するエントリを持っているわけではありません (つまり、参照制約はありません)。したがって、MBRPF が TRANSPF に結合されると、MBRNAME、MBRSURNME に NULL 値が存在します。JDFTVAL または IFNULL() が使用されていない場合。
rpgle でのパフォーマンスと extname() のため、VARCHAR は使用しないほうがよいと思います。
私は NULL 値を持ちたくないので、pgm でそれらを処理する必要はありません。