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 でそれらを処理する必要はありません。