LOOKUP : Récupérer une valeur dans une source de données de référence

Dans cette section :

Comment :

Langages disponibles : MODIFY

La fonction LOOKUP récupère une valeur de donnée à partir d'une source de données FOCUS de référence croisée dans une requête MODIFY. Vous pouvez effectuer la récupération depuis la source de données en référence croisée statique dans un fichier maître ou une source de données jointe dynamiquement à une autre commande JOIN. LOOKUP récupère une valeur, mais n'active pas le champ. LOOKUP est nécessaire parcequ'une requête MODIFY, contrairement à une requête TABLE ne peut pas lire de sources de données de référence croisée librement.

LOOKUP permet à une requête d'utiliser les données récupérées dans un message ou un calcul, mais ne vous autorise pas à modifier une source de données de référence croisée.

Pour modifier plus d'une source de données dans une requête, utilisez la commande COMBINE ou la fonction Maintain.

LOOKUP peut lire un segment de référence croisée directement lié à un segment dans la source de données hôte (le segment hôte). Cela signifie que le segment de référence croisé doit avoir un segment de type KU, KM, DKU, ou DKM (mais pas KL ni KLU) ou doit contenir le champ de référence croisée spécifié par la commande JOIN. Parce que LOOKUP récupère une valeur unique de référence croisée, sont utilisation est plus bénéfique avec des segments de référence croisée uniques.

Le segment de référence croisée contient deux champs utilisés par LOOKUP :

Lorsque vous utilisez LOOKUP, la requête MODIFY lit une valeur de transaction pour le champ hôte. Elle recherche ensuite le segment de référence croisée pour une instance qui contient cette valeur dans le champ de référence croisée :


Haut de page

x
Syntaxe : Récupérer une valeur dans une source de données de référence croisée
LOOKUP(field);

où :

field

est le nom du champ à récupérer dans le fichier de référence croisée. Si le nom du champ existe déjà dans la source de données hôte, vous devez le spécifier ici. N'introduisez pas d'espace entre LOOKUP et la paranthèse de gauche.

Remarque : LOOKUP n'utilise pas d'argument de sortie.



Exemple : Utiliser la valeur dans un segment hôte pour rechercher une source de données

Vous pouvez utiliser une valeur de champ dans une instance de segment hôte pour rechercher un segment de référence croisée. Réalisez une des actions suivantes :

Cette requête affiche l'ID de l'employé, date de l'augmentation de salaire, nom de l'employé et la position de l'employé après que l'augmentation ait été accordée :

La requête est :

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

Exemple d'exécution :

  1. La requête vous invite à saisir l'ID de l'employé et la date d'augmentation. Entrez l'ID de l'employé 071382660 et la date 820101 (1er Janvier 1982).
  2. La requête situe l'instance qui contient l'ID 071382660, puis situe l'instance enfant qui contient la date de l'augmentation 820101.
  3. Cette instance enfant contient le code de travail A07. La commande ACTIVATE rend cette valeur disponible à LOOKUP.
  4. LOOKUP situe le code de la tâche A07 dans le segment de référence croisée. Elle renvoie un 1, la variable RTN et récupère la description SECRETARY du travail correspondant.
  5. La commande TYPE affiche les valeurs :
    EMPLOYEE ID:          071382660
    DATE INCREASE:        82/01/01
    NAME:                 ALFRED STEVENS
    POSITION:             SECRETARY

Les champs récupérés par LOOKUP ne nécessitent pas le préfixe D. FOCUS traite les valeurs du champ comme valeurs de transaction.

Vous devrez possiblement activer le champ hôte si vous utilisez LOOKUP dans une commande NEXT. La requête affiche la dernière position tenue par un employé :

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


Exemple : Utiliser la fonction LOOKUP avec une commande VALIDATE

Lorsque vous utilisez LOOKUP, rejetez les transactions qui contiennent des valeurs pour lesquelles il n'existe aucune instance dans le segment de référence croisée. Pour y parvenir, placez la fonction dans une commande VALIDATE. Si la fonction ne peut pas situer l'instance dans le segment de référence croisée, elle définit la valeur de la variable de renvoi à 0, ce qui entraîne le rejet de la transaction par la requête.

La requête suivante met à jour les heures de cours d'un employé (ED_HRS). Si l'employé s'est inscrit en cours le 1er Janvier 1982 ou après, la requête augmente le nombre d'heures de cours par 10%. Les dates d'inscriptions sont stockées dans un segment de référence croisée (champ DATE_ATTEND). Le champ partagé est l'ID de l'employé.

La requête est :

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

Si l'enregistrement d'un employé est introuvable dans le segment de référence croisée, cet employé ne s'est jamais inscrit pour un cours. La transaction est rejetée comme erreur.


Haut de page

x
Utiliser la fonction LOOKUP étendu

Comment :

Si la fonction LOOKUP ne peut pas situer une valeur du champ hôte dans le segment de référence croisée, utilisez la syntaxe avancée pour situer la valeur de champ supérieure ou inférieure suivante de référence croisée dans le segment de référence croisée.

Pour utiliser cette fonction, créez l'index avec le paramètre INDEX défini à NEW (le schéma de l'arborescence binaire). Pour déterminer le type de l'index utilisé par une source de données, entrez la commande FDT.



x
Syntaxe : Utiliser la fonction LOOKUP étendu
COMPUTE
LOOKUP(field action);

où :

field

est le nom du champ dans la source de données de référence croisée, utilisée dans un calcul MODIFY. Si le nom du champ existe déjà dans la source de données hôte, vous devez le spécifier ici.

action

spécifie l'action que la requête doit effectuer. Voici les valeurs valables :

EQ entraîne LOOKUP à ne prendre aucune action supplémentaire si une correspondance exacte n'est pas trouvée. Si une correspondance est trouvée, la valeur de rcode est définie à 1 ; autrement elle l'est à 0. Ceci est l'option par défaut.

GE entraîne LOOKUP à situer l'instance avec la valeur supérieure suivante du champ de référence croisée. La valeur de rcode est définie à 2.

LE entraîne LOOKUP à situer l'instance avec la valeur inférieure suivante du champ de référence croisée. La valeur de rcode est définie à -2.

N'introduisez pas d'espace entre LOOKUP et la paranthèse de gauche.

La table suivante affiche la valeur de rcode, en fonction de l'instance que LOOKUP situe :

Valeur

Action

1

Valeur de référence croisée extraite située.

2

Valeur de référence croisée supérieure suivante située.

-2

Valeur de référence croisée inférieure suivante située.

0

Valeur de référence croisée située.


WebFOCUS