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. Zu dieser Konvertierung kommt es, da der Bitstrom vom Nachrichtenparser in eine Unicode-Nachrichtenbaumstruktur umgewandelt 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 wieder in die ursprüngliche Codepage umgewandelt wird, können diese Zeichen nicht zurückkonvertiert werden. In der Ausgabenachricht wird dann für jedes Zeichen ein Ersatzzeichen 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;