Come: |
Lingue disponibili: MODIFY, Maintain
La funzione FIND determina se si sta eseguendo la ricerca di un valore dati presente in un campo origine dati. La funzione imposta un campo temporaneo a 1 (un valore non-zero per MODIFY), se si trova il valore dati nel campo origine dati e a 0 se non si trova. FIND non modifica la posizione corrente del database del file ricercato. Un valore maggiore di zero conferma la presenza del valore dati, non il numero di istanze nel campo dell'origine dati.
È inoltre possibile usare FIND in un comando VALIDATE per determinare se un valore campo transazione esiste in un'altra origine dati FOCUS. Se il valore campo non si trova in quell'origine dati, la funzione restituisce un valore di 0, causando un errore nel test di verifica e il rifiuto della transazione da parte della richiesta.
È possibile usare qualsiasi numero di FIND in un comando COMPUTE o VALIDATE. Tuttavia, un aumento del tempo di elaborazione FIND richiede ulteriori spazio buffer in memoria.
Limite: FIND non funzione su file con parole d'ordine DBA diverse.
L'opposto di FIND è NOT FIND. La funzione NOT FIND imposta un campo temporaneo su 1 se il valore entrante non si trova nell'origine dati e su 0 se il valore entrante si trova nell'origine dati.
FIND(fieldname [AS dbfield] IN file);
dove:
Nome del campo che contiene il valore dei dati in entrata.
Nome del campo di origine dati i cui valori sono paragonati ai valori nel campo in entrata.
Per Maintain - il campo AS è richiesto e il nome deve essere qualificato.
Nome dell’origine dati FOCUS .
Per Maintain - il file AS non è necessario, poiché il nome campo AS è richiesto e deve essere qualificato.
Nota:
Nel seguente esempio, FIND determina se un valore dati si trova in un'altra origine dati.
MAINTAIN FILE MOVIES AND VIDEOTRK FOR ALL NEXT MOVIES.MOVIECODE INTO FILMSTK TYPE "RC SHOULD BE 1 WHERE MOVIECODE EXISTS IN BOTH FILES"; TYPE " " COMPUTE RC/I1; COMPUTE I/I1=1; REPEAT FILMSTK.FOCCOUNT COMPUTE RC= FIND(FILMSTK(I).MOVIECODE AS VIDEOTRK.MOVIECODE) TYPE "FOR MOVIECODE = <<FILMSTK(I).MOVIECODE , RC = <<RC" COMPUTE I=I+1; ENDREPEAT END
L'emissione è:
RC SHOULD BE 1 WHERE MOVIECODE EXISTS IN BOTH FILES FOR MOVIECODE = 001MCA, RC = 1 . . . FOR MOVIECODE = 387PLA, RC = 0 . . . FOR MOVIECODE = 963CBS, RC = 1 TRANSACTIONS: COMMITS = 1 ROLLBACKS = 0 SEGMENTS : INCLUDED = 0 UPDATED = 0 DELETED = 0
Nel seguente esempio, FIND determina se un valore dati si trova nela stessa origine dati.
MAINTAIN FILE CAR COMPUTE RETAIL_COST=31500; COMPUTE CHECK/I1; COMPUTE CHECK= FIND (RETAIL_COST); IF CHECK = 1 THEN GOTO FOUND1 ELSE GOTO NOT1; CASE FOUND1 TYPE "THERE IS A CAR WITH A RETAIL_COST OF <<RETAIL_COST" -* .... ENDCASE CASE NOT1 TYPE "THERE IS NO CAR WITH A RETAIL_COST OF <<RETAIL_COST" -*.... ENDCASE -*.... END
L'emissione è:
THERE IS A CAR WITH A RETAIL_COST OF 31,500 TRANSACTIONS: COMMITS = 1 ROLLBACKS = 0 SEGMENTS : INCLUDED = 0 UPDATED = 0 DELETED = 0
WebFOCUS |