UPPER und UCASE sind funktional entsprechende Funktionen zur Bearbeitung von Zeichenfolgen, mit denen CHARACTER-Zeichenfolgedaten geändert und Kleinbuchstaben in einer Zeichenfolge in Großbuchstaben umgewandelt werden.
Sowohl UPPER als auch UCASE geben eine neue Zeichenfolge zurück, die mit der Quellenzeichenfolge identisch ist, außer dass alle Kleinbuchstaben durch die entsprechenden Großbuchstaben ersetzt wurden.
UPPER('ABCD')gibt 'ABCD' zurück.
UCASE('abc123')gibt 'ABC123' zurück.
Bei der Verwendung bestimmter Codepages werden Zeichen ohne Entsprechung in Großschreibung möglicherweise umgewandelt, wenn Sie die Funktion UPPER oder UCASE benutzen. Diese Konvertierung tritt auf, da der Bitstrom vom Nachrichten-Parser in eine Unicode-Nachrichtenbaumstruktur konvertiert wird. Selbst wenn Zeichen keine Entsprechung in Großschreibung in der Quellcodeseite aufweisen, können sie diese dennoch in der Unicode-Codepage haben und werden von der UPPER oder UCASE-Funktion konvertiert. Wenn der Bitstrom zurück zur original Codepage konvertiert wird, können diese Zeichen nicht zurück konvertiert werden, und ein Ersatzzeichen wird in der Ausgabenachricht für jedes Zeichen eingefügt. Das eingefügte Ersatzzeichen hängt von der ursprünglichen Codepage ab. Beispiel: Bei der Konvertierung in eine EBCDIC-Codepage wird ein X'3F'-Byte eingefügt und bei der Konvertierung in einer japanische Codepage ein X'7F'-Byte.
Eine Lösung zu diesem Problem besteht darin, mit der TRANSLATE-Funktion ausgewählte Zeichen in Großbuchstaben umzuwandeln und nicht die UPPER- oder UCASE-Funktion zu verwenden. Jegliche Zeichen, die keine Entsprechung in Großbuchstaben in der Codepage enthalten, werden aus der Konvertierung ausgeschlossen.
DECLARE char1 CHAR; SET char1 = TRANSLATE(InputRoot.XML.MSG.APPDATA,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'); SET OutputRoot.MQMD.CodedCharSetId = 284; SET OutputRoot.XML.TEST.translated = char1;