UPPER および UCASE は等価のストリング処理関数で、CHARACTER ストリング・データを処理し、ストリング内の小文字を大文字に変換します。
UPPER および UCASE は両方とも、source_string と同一の新しい文字ストリングを戻します。ただし、英小文字はすべて、対応する大文字に置き換えられます。
UPPER('ABCD')
は、'ABCD' を戻します。 UCASE('abc123')
'ABC123' を戻します。特定のコード・ページを使用している場合に、UPPER または UCASE 関数を使用すると、そのコード・ページでは相当する大文字を持たない文字が変換されてしまう場合があります。このような変換は、メッセージ・パーサーによってビット・ストリームが Unicode メッセージ・ツリーに変換されるために起こります。 ソースのコード・ページではそれらの文字に相当する大文字が存在しなかったとしても、Unicode コード・ページでは相当する大文字が存在していることがあり、それが UPPER または UCASE 関数によって変換されてしまいます。 ビット・ストリームを元のコード・ページに変換し直しても、これらの文字は元の文字には変換されず、出力メッセージではその文字のところに置換文字が挿入されてしまいます。 挿入される置換文字は、元のコード・ページが何であるかによって異なります。例えば、EBCDIC コード・ページへの変換では X'3F' のバイトが挿入され、日本語コード・ページへの変換では X'7F' のバイトが挿入されます。
この問題を解決するには、UPPER 関数や UCASE 関数を使用する代わりに、TRANSLATE 関数を使用して、選択した文字を大文字に変換します。コード・ページに相当する大文字がない文字は、変換の対象から除外されます。
DECLARE char1 CHAR;
SET char1 = TRANSLATE(InputRoot.XML.MSG.APPDATA,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ');
SET OutputRoot.MQMD.CodedCharSetId = 284;
SET OutputRoot.XML.TEST.translated = char1;