DECODE: Como Decodificar Valores

Como:

Referência:

Linguagens Disponíveis: Reporting, Maintain

A função DECODE designa valores com base no valor codificado de um campo de entrada. DECODE é útil para fornecer um valor mais significativo a um valor codificado em um campo. Por exemplo, o campo GENDER pode ter o código F para funcionárias (feminino) e M para funcionários homens (masculino) para que o armazenamento seja eficiente 9por exemplo, um caractere em vez de oito para 'feminino'). DECODE expande (decodifica) estes valores para garantir a interpretação correta em um relatório.

Você pode utilizar o DECODE fornecendo valores diretamente na função ou lendo valores a partir de um arquivo separado.


Topo da página

x
Sintaxe: Como Fornecer Valores na Função
DECODE fieldname(code1 result1 code2 result2...[ELSE default ]);
DECODE fieldname(filename ...[ELSE default]);

onde:

fieldname

Alfanuméricos ou Numéricos

É o nome do campo de entrada.

código

Alfanuméricos ou Numéricos

É o valor codificado que DECODE compara ao valor atual de fieldname. Se o valor possuir espaços, vírgulas ou outros caracteres especiais incorporados, coloque-os entre aspas simples. Quando DECODE localiza o valor especificado, ele retorna o resultado correspondente. Quando o código é comparado ao valor do nome do campo, o código e o nome do campo devem ter o mesmo formato".

resultado

Alfanuméricos ou Numéricos

É o valor retornado que corresponde ao código. Se o resultado possuir espaços ou vírgulas incorporados ou contiver um número negativo, coloque-os entre aspas simples. Não utilize aspas duplas (").

Se o resultado estiver apresentado no formato alfanumérico, esta string não poderá ser nula ou em branco. O formato do resultado deve corresponder ao tipo de dados da expressão.

padrão

Alfanuméricos ou Numéricos

É o valor retornado como resultado para códigos não correspondentes. O formato deve ser o mesmo do formato de result. Ao omitir um valor padrão, DECODE atribui um espaço em branco ou zero para códigos não correspondentes.

Nome do arquivo

Alfanumérico

É o nome do arquivo no qual os códigos/pares de resultados são armazenados. Cada registro no arquivo deve conter um par.

Você pode utilizar até 40 linhas para definir o código e pares de resultados para qualquer função DECODE ou 39 linhas caso também utilize uma frase ELSE. Utilize uma vírgula ou espaço para separar o código do resultado ou um par de outro.

Observação: DECODE não possui um argumento output.



Exemplo: Como Fornecer Valores Utilizando a Função DECODE

A função EDIT extrai o primeiro caractere do campo CURR_JOBCODE e, em seguida, a função DECODE exibe ADMINISTRATIVE ou DATA PROCESSING, dependendo do valor extraído.

TABLE FILE EMPLOYEE
PRINT CURR_JOBCODE AND COMPUTE
DEPX_CODE/A1 = EDIT(CURR_JOBCODE, '9$$'); NOPRINT AND COMPUTE
JOB_CATEGORY/A15 = DECODE DEPX_CODE(A 'ADMINISTRATIVE' 
              B 'DATA PROCESSING');
BY LAST_NAME
WHERE DEPARTMENT EQ 'MIS';
END

A saída é:

LAST_NAME    CURR_JOBCODE    JOB_CATEGORY
---------    ------------    ------------
BLACKWOOD    B04             DATA PROCESSING
CROSS        A17             ADMINISTRATIVE
GREENSPAN    A07             ADMINISTRATIVE
JONES        B03             DATA PROCESSING
MCCOY        B02             DATA PROCESSING
SMITH        B14             DATA PROCESSING

Topo da página

x
Referência: Orientações para a Leitura de Valores de um Arquivo


Exemplo: Como Ler os Valores DECODE de um Arquivo

O exemplo a seguir possui duas partes. A primeira parte cria uma lista de IDs e lê a fonte de dados EDUCFILE. A segunda parte lê a fonte de dados EMPLOYEE e atribui 0 para estes funcionários que tiveram aulas e 1 para os funcionários que não participaram das aulas. O arquivo HOLD contém apenas uma coluna de valores. Portanto, DECODE atribui o valor 0 a um funcionário cujo EMP_ID aparece no arquivo e 1 quando o EMP_ID não aparece no arquivo.

TABLE FILE EDUCFILE
PRINT EMP_ID
ON TABLE HOLD
END
TABLE FILE EMPLOYEE
PRINT EMP_ID AND LAST_NAME AND FIRST_NAME AND COMPUTE 
NOT_IN_LIST/I1 = DECODE EMP_ID(HOLD ELSE 1); 
WHERE DEPARTMENT EQ 'MIS';
END

A saída é:

EMP_ID     LAST_NAME        FIRST_NAME  NOT_IN_LIST
------     ---------        ----------  -----------
112847612  SMITH            MARY                  0
117593129  JONES            DIANE                 0
219984371  MCCOY            JOHN                  1
326179357  BLACKWOOD        ROSEMARIE             0
543729165  GREENSPAN        MARY                  1
818692173  CROSS            BARBARA               0

Information Builders