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.
Per esempio, LOOKUP recupera tutti i campi dal segmento.
RTN = LOOKUP(SEG.DATE_ATTEND);
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:
LOOKUP(field);
dove:
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.
È 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 è:
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
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.
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.
COMPUTE
LOOKUP(field action);
dove:
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.
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 |