FIND : Vérifier l'existence d'une valeur dans une source de données

Comment :

Langages disponibles : MODIFY, Maintain

La fonction FIND détermine si la valeur d'une données et dans un champ de source de données en cours de recherche. La fonction affecte un champ temporaire à 1 (une valeur non égale à zéro pour MODIFY) si la valeur de données est trouvée dans le champ de sources de données, et à 0 si elle ne l'est pas. FIND ne modifie pas la position en cours de base de données du champ recherché. Une valeur supérieure à zéro confirme la présence de la valeur de données, pas le nombre d'instances dans le champ de source de données.

Vous pouvez également utiliser FIND dans une commande VALIDATE pour déterminer si une valeur de champ de transaction existe dans une source de données FOCUS différente. Si la valeur n'est pas dans la source de données, la fonction renvoie une valeur de 0, entraînant l'echec du test de validation et le rejet de la transaction par la requête.

Vous pouvez utiliser tout nombre de FINDs dans une commande COMPUTE ou VALIDATE. Cependant, davantage de FINDs augmentent la durée de traitement et nécessite plus d'espace de mise en mémoire tampon dans la mémoire.

Limite : FIND ne fonctionne pas sur les fichiers avec des mots de passe DBA diférents.

L'inverse de FIND est NOT FIND. La fonction NOT FIND définit un champ temporaire à 1 si la valeur entrante n'est pas dans la source de données, et à 0 si elle l'est.


Haut de page

x
Syntaxe : Vérifier l'existence d'une valeur dans une source de données
FIND(fieldname [AS dbfield] IN file);

où :

fieldname

est le nom du champ contenant la valeur de données d'entrée.

AS dbfield

est le nom du champ de la source de données dont les valeurs sont comparées aux valeurs du champ entrant.

Pour Maintain - le champ AS est requis et le nom doit être qualifié.

file

est le nom de la source de données FOCUS .

Pour Maintain - le fichier IN n'est pas nécessaire puisque le nom de champ AS est requis et doit être qualifié.

Remarque :



Exemple : Vérifier l'existence d'une valeur dans une autre source de données (Maintain)

Dans l'exemple suivant, la fonction FIND détermine si une valeur de donnée est trouvée dans une autre source de données.

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

La sortie est :

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


Exemple : Vérifier l'existence d'une valeur dans la même source de données (Maintain)

Dans l'exemple suivant, la fonction FIND détermine si une valeur de donnée est trouvée dans la même source de données.

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

La sortie est :

THERE IS A CAR WITH A RETAIL_COST OF    31,500
 TRANSACTIONS: COMMITS   =    1 ROLLBACKS =    0
 SEGMENTS    : INCLUDED  =    0 UPDATED   =    0 DELETED   =    0

WebFOCUS