CHKPCK: Como Validar um Campo Compactado

Como:

Linguagens Disponíveis: Reporting, Maintain

A função CHKPCK valida os dados em um campo descrito como formato compactado (caso disponível na sua plataforma). A função impede que uma exceção de dados ocorra quando uma solicitação lê um campo que se espera conter um número compactado válido, mas não contém.

Para utilizar CHKPCK:

  1. Certifique-se de que o Arquivo Master (atributos USAGE e ACTUAL) define o campo como alfanumérico, e não compactado. Isto não altera os dados do campo, que se mantém compactado, mas permite que a solicitação leia os dados sem uma exceção de dados.
  2. Chame o CHKPCK para examinar o campo. A função exibe a saída para um campo definido como compactado. Se o valor examinado for um número compactado válido, a função exibe o valor; se o valor não for compactado, a função exibe um código de erro.

Topo da página

x
Sintaxe: Como Validar um campo compactado
CHKPCK(length, in_value, error, output)

onde:

comprimento

Numérico

É o comprimento do campo compactado. Ele pode ter entre 1 e 16 bytes.

infield

Alfanumérico

É o nome do campo compactado ou do valor a ser verificado como decimal compactado. O valor deve ser descrito como alfanumérico, não compactado.

error

Numérico

É o código de erro que a função retorna se um valor não estiver compactado. Escolha um código de erro fora do intervalo de dados. O erro de código é primeiro truncado para um número inteiro, e depois convertido em formato compacto. No entanto, pode aparecer em um relatório com um ponto decimal dependendo do formato de saída.

saída

Decimal em pacote

É o nome do campo que contém o resultado ou o formato do valor de saída posto entre aspas simples.



Exemplo: Como Validar Dados Compactados
  1. Prepare uma fonte de dados que inclui dados compactados inválidos. O exemplo a seguir cria TESTPACK, que contém o campo PACK_SAL. PACK_SAL é definido como alfanumérico, mas contém dados compactados. Os dados compactados inválidos são armazenados como AAA.
    DEFINE FILE EMPLOYEE
    PACK_SAL/A8 = IF EMP_ID CONTAINS '123'
          THEN 'AAA' ELSE PCKOUT(CURR_SAL, 8, 'A8');
    END
    TABLE FILE EMPLOYEE
    PRINT DEPARTMENT PACK_SAL BY EMP_ID
    ON TABLE SAVE AS TESTPACK
    END

    A saída é:

     NUMBER OF RECORDS IN TABLE=       12  LINES=     12 
    ALPHANUMERIC  RECORD NAMED  TESTPACK 
    FIELDNAME                         ALIAS          FORMAT        LENGTH
    EMP_ID                            EID            A9               9 
    DEPARTMENT                        DPT            A10             10 
    PACK_SAL                                         A8               8 
    TOTAL                                                            27
  2. Crie um Arquivo Master para a fonte de dados TESTPACK. Define o campo PACK_SAL como alfanumérico nos atributos USAGE e ACTUAL.
    FILE  = TESTPACK,  SUFFIX = FIX
    FIELD = EMP_ID    ,ALIAS = EID,USAGE = A9 ,ACTUAL = A9 ,$
    FIELD = DEPARTMENT,ALIAS = DPT,USAGE = A10,ACTUAL = A10,$
    FIELD = PACK_SAL  ,ALIAS = PS ,USAGE = A8 ,ACTUAL = A8 ,$
  3. Crie uma solicitação que utiliza CHKPCK para validar os valores no campo PACK_SAL e armazene o resultado no campo GOOD_PACK. Os valores que não estão em formato compactado retornam o código de erro -. Os valores em formato compactado são exibidos com precisão.\, -999, '
    DEFINE FILE TESTPACK
    GOOD_PACK/P8CM = CHKPCK(8, PACK_SAL, -999, GOOD_PACK); 
    END
    TABLE FILE TESTPACK
    PRINT DEPARTMENT GOOD_PACK BY EMP_ID
    END

    A saída é:

    EMP_ID     DEPARTMENT    GOOD_PACK 
    ------     ----------    --------- 
    071382660  PRODUCTION      $11,000 
    112847612  MIS             $13,200 
    117593129  MIS             $18,480 
    119265415  PRODUCTION       $9,500 
    119329144  PRODUCTION      $29,700 
    123764317  PRODUCTION        -$999 
    126724188  PRODUCTION      $21,120 
    219984371  MIS             $18,480 
    326179357  MIS             $21,780 
    451123478  PRODUCTION        -$999 
    543729165  MIS              $9,000 
    818692173  MIS             $27,062

Information Builders