LOOKUP: Richiamo di un valore da un’origine dati a riferimento incrociato

In questa sezione:

Come:

Lingue disponibili: MODIFY

La funzione LOOKUP recupera un valore dati da una origine dati FOCUS a riferimento incrociato in una richiesta MODIFY. È possibile recuperare dati da una origine dati di riferimento incrociato, statisticamente in un file principale o origine dati unita in modo dinamico ad un'altra dal comando JOIN. LOOKUP recupera un valore, ma non attiva il campo. LOOKUP è richiesto poiché una richiesta MODIFY, rispetto ad una richiesta TABLE, non è in grado di leggere liberamente origini dati di riferimento incrociato.

LOOKUP consente ad una richiesta di usare i dati recuperati in un calcolo o messaggio, ma non consente di modificare una origine dati di riferimento incrociato.

Per modificare più di una origine dati in una richiesta, usare il comando COMBINE o la funzionalità Maintain.

LOOKUP è in grado di leggere un segmento di riferimento incrociato collegato ad un segmento nell'origine dati host (il segmento host). Questo significa che il segmento di riferimento incrociato deve avere un tipo di segmento di KU, KM, DKU, o DKM (ma non KL o KLU), deve contenere il campo di riferimento incrociato specificato dal comando JOIN. Poiché LOOKUP recupera un valore di riferimento incrociato singolo, si usa al meglio con segmenti univici di riferimento incrociato.

Il segmento di riferimento incrociato contiene due campi usati da LOOKUP.

Quando si usa LOOKUP, la richiesta MODIFY legge un valore di transazione per il campo host. Tale richiesta ricerca, quindi, il segmento di riferimento incrociato per una istanza contenente questo valore nel campo di riferimento incrociato:


Inizio pagina

x
Sintassi: Come richiamare un valore da un’origine dati a riferimento incrociato
LOOKUP(field);

dove:

campo

Nome del campo da richiamare nel file con riferimento incrociato. Se il nome del campo esiste anche nell’origine dati host, è necessario definirlo qui. Non includere uno spazio tra LOOKUP e la parentesi sinistra.

Nota: LOOKUP non usa un argomento di emissione.



Esempio: Usando un valore in un segmento host per ricercare una origine dati

È possibile usare un valore campo in una istanza di segmento host per ricercare un segmento a riferimento incrociato. Eseguire i seguenti:

Questa richiesta visualizza l'ID dipendente, la data dell'aumento stipendio, il nome dipendente e la posizione ottenuto dopo l'aumento di stipendio:

La richiesta è:

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

Una esecuzione campione è:

  1. La richiesta richiede l'ID dipendente e la data di aumento stipendio. Immettere l'ID dipendente 071382660 e la data 820101 (1 Gennaio, 1982).
  2. La richiesta localizza l'istanza contenente l'ID 071382660, quindi localizza l'istanza secondaria contenente la data di aumento 820101.
  3. L'istanza secondaria contiene il codice lavoro A07. Il comando ACTIVATE rende questo valore disponibile a LOOKUP.
  4. LOOKUP localizza il codece lavoro A07 nel segmento di riferimento incrociato. Restituisce un 1 alla variabile RTN e recupera la descrizione lavoro corrispondente SECRETARY.
  5. Il comando TYPE visualizza i valori:
    EMPLOYEE ID:          071382660
    DATE INCREASE:        82/01/01
    NAME:                 ALFRED STEVENS
    POSITION:             SECRETARY

I campi recuperati da LOOKUP non richiedono il prefisso D. FOCUS tratta i valori campo come valori di transazione.

Si potrebbe dover attivare il campo host se si sta usando LOOKUP all'interno di un comando NEXT. Questa richiesta visualizza la posizione più recente di un dipendente:

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


Esempio: Usando la funzione LOOKUP con un comando VALIDATE

Quando si usa LOOKUP, rifiutare transazioni contenenti valori per cui non è presente una istanza corrispondente nel segmento di riferimento incrociato. Per eseguire questa azione, posizionare la funzione in un comando VALIDATE. Se la funzione non è in grado di localizzare l'istanza nel segmento di riferimento incrociato, questa imposta il valore della variabile di ritorno su 0, causando la richiesta di rifiutare la transazione.

La seguente richiesta aggiorna le ore di classe di un dipendente (ED_HRS). Se i dipendenti iscritti alle classi il o dopo il 1 Gennaio 1982, la richiesta aumenta il numero di ore di classe del 10%. Le date di iscrizione sono memorizzate in un segmento di riferimento incrociato (campo DATE_ATTEND). Il campo condiviso è l'ID dipendente.

La richiesta è come segue:

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 un record dipendente non si trova nel segmento di riferimento incrociato, quel dipendente non si è mai iscritto ad una classe. La transazione viene rifutata come un errore.


Inizio pagina

x
Uso della funzione LOOKUP estesa

Come:

Se la funzione LOOKUP non è in grado di localizzare un valore del campo host nel segmento di riferimento incrociato, usare la sintassi estesa per localizzare il prossimo valore campo di riferimento incrociato più alto o più basso.

Per usare questa funzione, creare l'indice con il parametro INDEX impostato su NEW (il binario, schema struttura ad albero). Per determinare il tipo di indice usato da una origine dati, immettere il comando FDT.



x
Sintassi: Come usare la funzione LOOKUP estesa
COMPUTE
LOOKUP(field action);

dove:

campo

Il nome del campo nell'origine dati di riferimento incrociato, usato in un calcolo MODIFY. Se il nome del campo esiste anche nell’origine dati host, è necessario definirlo qui.

azione

Specifica l’azione della richiesta. I valori validi sono:

EQ porta LOOKUP a non eseguire ulteriori azioni se non si trova una corrispondenza esatta. Se si trova una corrispondenza, il valore di rcode è impostato su 1; altrimenti è impostato su 0. Questa è l'opzione predefinita.

GE porta LOOKUP a localizzare l'istanza con il prossimo valore superiore del campo di riferimento incrociato. Il valore di rcode è impostato su 2.

LE porta LOOKUP a localizzare l'istanza con il prossimo valore inferiore del campo di riferimento incrociato. Il valore di rcode è impostato su -2.

Non includere uno spazio tra LOOKUP e la parentesi sinistra".

La seguente tabella mostra il valore di rcode, a seconda di quale istanza LOOKUP è in grado di localizzare:

Valore

Azione

1

Valore di riferimento incrociato esatto localizzato.

2

Prossimo valore di riferimento incrociato superiore localizzato.

-2

Prossimo valore di riferimento incrociato inferiore localizzato.

0

Valore di riferimento incrociato non localizzato.


WebFOCUS