UPPER e UCASE são funções de manipulação de cadeias equivalentes que manipulam os dados da cadeia CHARACTER e convertem caracteres minúsculos em uma cadeia para maiúsculas.
UPPER e UCASE retornam uma nova cadeia de caracteres, que é idêntica a source_string, exceto que todas as letras minúsculas são substituídas pelas letras maiúsculas correspondentes.
UPPER('ABCD')returns 'ABCD'.
UCASE('abc123')retorna 'ABC123'.
Se você estiver utilizando determinadas páginas de códigos, os caracteres sem equivalente maiúsculo em sua página de códigos poderão ser convertidos ao utilizar a função UPPER ou UCASE. Essa conversão ocorre porque o fluxo de bits é convertido para uma árvore de mensagens Unicode pelo analisador de mensagens. Mesmo que os caracteres não tenham equivalente maiúsculo na página de códigos de origem, ainda assim eles podem ter um equivalente maiúsculo na página de códigos Unicode e são convertidos pela função UPPER ou UCASE. Quando o fluxo de bits é reconvertido para a página de códigos original, esses caracteres não podem ser reconvertidos e um caractere de substituição é inserido na mensagem de saída para cada caractere. O caractere de substituição inserido depende da página de códigos original. Por exemplo, a conversão para uma página de códigos EBCDIC insere um byte X'3F' e a conversão para uma página de códigos em japonês insere um byte X'7F'.
Uma solução para esse problema é utilizar a função TRANSLATE para converter caracteres selecionados para maiúsculos, em vez de utilizar a função UPPER ou UCASE. Quaisquer caracteres que não tiverem equivalente maiúsculo na página de códigos serão excluídos da conversão.
DECLARE char1 CHAR; SET char1 = TRANSLATE(InputRoot.XML.MSG.APPDATA,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ'); SET OutputRoot.MQMD.CodedCharSetId = 284; SET OutputRoot.XML.TEST.translated = char1;