DFU Query SQL

24. SQL や Query で不正な漢字フィールドを処理するには?

漢字専用フィールド(J) でシフト文字が脱落していたり、漢字専用であるのに半角文字が
入っていたりすると、SQL での FETCH (行の取り出し)はエラーになってしまう。

WHENVER SQLERROR CONTINUE
WHENEVER SQLWARNING CONTINUE を事前に挿入しても、そのエラーのあった
フィールド以降のフィールドまでもが取得されなくなってしまう。

ところが QUERY/400や対話式のSQLでは、このような場合でもエラーで停止することなく、
エラーの漢字フィールドも表示されている。

仮に漢字専用フィールド(J) が KJNAME であったとして

SELECT KJNAME FROM MYLIB/MYFILE

で漢字フィールドの不正エラーが発生するものとする。
これを

SELECT KJNAME || '' FROM MYLIB/MYFILE

として NULL フィールドを結合して 別のフィールドとして再定義 してしまえば
漢字専用フィールドではなくなるのでSQLはエラーは返さない。
KJNAME || '' は 可変長文字ストリングの属性 となる。)

しかも正しい属性のフィールドの場合も結果は同じである。
わかってしまえば簡単な解決であるが、最初は解決に悩んでしまうかも知れない。

この方法は弊社で発見したもので Chicago Ver 5.0 にも使用されている。