LOOKUP: Como Obter um Valor de uma Fonte de Dados com Referências Cruzadas

Nesta seção:

Como:

Linguagens Disponíveis: MODIFY

A função LOOKUP obtém um valor de dados a partir de uma fonte de dados FOCUS com referência em uma solicitação MODIFY. Você pode obter dados de uma fonte de dados com referência cruzada estatisticamente em um sinônimo de ou de uma fonte de dados unida dinamicamente a outra pelo comando JOIN. LOOKUP obtém um valor, mas não ativa o campo. LOOKUP é necessário, pois uma solicitação MODIFY, diferentemente de uma solicitação TABLE, não pode acessar fontes de dados de referência cruzada livremente.

LOOKUP permite que uma solicitação utilize os dados obtidos em uma computação ou mensagem, mas não permite que você modifique uma fonte de dados de referência cruzada.

Para modificar mais de uma fonte de dados em uma solicitação, utilize o comando COMBINE ou o recurso do Maintain.

LOOKUP pode ler um segmento de referência cruzada vinculado diretamente a um segmento na fonte de dados host (segmento host). Isto significa que o segmento de referência cruzada deve possuir um tipo de segmento de KU, KM, DKU ou DKM (mas não KL ou KLU) ou deve conter o campo de referência cruzada especificado pelo comando JOIN. LOOKUP obtém um único valor de referência cruzada. Portanto, sua melhor utilização é com segmentos únicos de referência cruzada.

O segmento de referência cruzada contém dois campos utilizados por LOOKUP.

Durante a utilização do LOOKUP, a solicitação MODIFY lê um valor de transação para o campo host. Em seguida, procura no segmento de referência cruzada por uma ocorrência contendo este valor no campo de referência cruzada:


Topo da página

x
Sintaxe: Como Obter um Valor de uma Fonte de Dados com Referências Cruzadas
LOOKUP(field);

onde:

Campo

É o nome do campo a obter no arquivo de referência cruzada. Se o nome do campo também existir na fonte de dados host, você precisará qualificá-lo aqui. Não inclua um espaço entre LOOKUP e os parênteses à esquerda.

Observação: LOOKUP não utiliza um argumento output.



Exemplo: Como utilizar um Valor em um Segmento Host para Pesquisa em uma Fonte de Dados

Você pode utilizar um valor de campo em uma ocorrência de segmento host para pesquisar um segmento de referência cruzada. Faça o seguinte:

Esta solicitação exibe o ID do funcionário, a data do aumento do salário, o nome do funcionário e sua posição após o aumento:

A solicitação é:

MODIFY FILE EMPLOYEE
PROMPT EMP_ID DAT_INC
MATCH EMP_ID
   ON NOMATCH REJECT
   ON MATCH CONTINUE
MATCH DAT_INC
   ON NOMATCH REJECT
   ON MATCH ACTIVATE JOBCODE
   ON MATCH COMPUTE
      RTN = LOOKUP(JOB_DESC);
   ON MATCH TYPE
      "EMPLOYEE ID:        <EMP_ID"
      "DATE INCREASE:      <DAT_INC"
      "NAME:               <D.FIRST_NAME <D.LAST_NAME"
      "POSITION:           <JOB_DESC"
DATA

A execução de exemplo é:

  1. A solicitação pede que você insira o ID do funcionário e a data do aumento de salário. Insira o ID de funcionário 071382660 e a data 820101 (1 de janeiro de 1982)
  2. A solicitação localiza a ocorrência que contém o ID 071382660 e, em seguida, localiza a ocorrência filho que contém a data do aumento 820101.
  3. Esta ocorrência filho contém o código de trabalho A07. O comando ACTIVATE disponibiliza este valor para LOOKUP.
  4. LOOKUP localiza o código de trabalho A07 no segmento de referência cruzada. Exibe um número 1 para a varíavel RTN e obtém a descrição do trabalho correspondente SECRETARY.
  5. O comando TYPE exibe os valores:
    EMPLOYEE ID:          071382660
    DATE INCREASE:        82/01/01
    NAME:                 ALFRED STEVENS
    POSITION:             SECRETARY

Campos obtidos pelo LOOKUP não necessitam do prefixo D. FOCUS trata os valores de campo como valores de transação.

Você também pode precisar ativar o campo host caso esteja utilizando LOOKUP dentro de um comando NEXT. Esta solicitação exibe a última posição de um funcionário:

MODIFY FILE EMPLOYEE
PROMPT EMP_ID
MATCH EMP_ID
   ON NOMATCH REJECT
   ON MATCH CONTINUE
NEXT DAT_INC
   ON NONEXT REJECT
   ON NEXT ACTIVATE JOBCODE
   ON NEXT COMPUTE
      RTN = LOOKUP(JOB_DESC);
   ON MATCH TYPE
      "EMPLOYEE ID:      <EMP_ID"
      "DATE OF POSITION: <DAT_INC"
      "NAME:             <D.FIRST_NAME <D.LAST_NAME"
      "POSITION:         <JOB_DESC"
DATA


Exemplo: Como Utilizar a Função LOOKUP com um Comando VALIDATE

Ao utilizar LOOKUP, rejeite transações que contêm valores para os quais não há ocorrências correspondentes no segmento de referência cruzada. Para isto, posicione a função em um comando VALIDATE. Se a função não puder localizar a ocorrência no segmento de referência cruzada, ela definirá o valor da variável de retorno como 0, fazendo com que a solicitação rejeite a transação.

A solicitação a seguir atualiza as horas de aula de um funcionário (ED_HRS). Se o funcionário se matriculou em aulas na data de janeiro 1, 1982 ou após a mesma, a solicitação aumenta o número de horas de aula em 10%. As datas de matrícula são armazenadas em um segmento de referência cruzada (campo DATE_ATEEND). O campo compartilhado é o ID do funcionário.

A solicitação se o exemplo abaixo:

MODIFY FILE EMPLOYEE
PROMPT EMP_ID ED_HRS
VALIDATE
   TEST_DATE = LOOKUP(DATE_ENROLL);
COMPUTE
   ED_HRS = IF DATE_ENROLL GE 820101 THEN ED_HRS * 1.1
         ELSE ED_HRS;
MATCH EMP_ID
   ON MATCH UPDATE ED_HRS 
    ON NOMATCH REJECT
DATA

Se um registro de funcionário não for localizado no segmento de referência cruzada, este funcionário nunca se matriculou em uma aula. A transação é rejeitada como um erro.


Topo da página

x
Como Utilizar a Função Estendida LOOKUP

Como:

Se a função LOOKUP não puder localizar um valor do campo do host no segmento de referência cruzada, utilize a sintaxe ampliada para localizar o próximo valor de campo de referência cruzada mais alto ou mais baixo no segmento de referência cruzada.

para utilizar este recurso, crie o índice com o parâmetro INDEX definido como NEW (o esquema de árvore binária). Para determinar o tipo deíndice utilizado por uma fonte de dados, insire o comando FDT.



x
Sintaxe: Como Utilizar a Função Estendida LOOKUP
COMPUTE
LOOKUP(field action);

onde:

Campo

É o nome do campo na fonte de dados de referência cruzada utilizado em uma computação MODIFY. Se o nome do campo também existir na fonte de dados host, você precisará qualificá-lo aqui.

ação

Especifica a ação que o pedido realiza. Valores válidos são:

EQ faz com que o LOOKUP não execute ações caso uma correspondência exata não seja encontrada. Se uma correspondência for encontrada, o valor de rcode será definido como 1; caso contrário, será definido como 0. Este é o padrão.

GE faz com que LOOKUP localize a ocorrência com o próximo valor mais alto do campo de referência cruzada. O valor de rcode é definido como 2.

LE faz com que LOOKUP localize a ocorrência com o próximo valor mais baixo do campo de referência cruzada. O valor de rcode é definido como -2.

Não inclua um espaço entre LOOKUP e os parênteses à esquerda".

A tabela a seguir exibe o valor de rcode dependendo de qual ocorrência LOOKUP localiza:

Valor

Ação

1

Valor exato de referência cruzada localizado.

2

Próximo valor de referência cruzada mais alto localizado.

-2

Próximo valor de referência cruzada mais baixo localizado.

0

Valor de referência cruzada não localizado.


Information Builders