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 :
Par exemple, LOOKUP récupère tous les champs du segment.
RTN = LOOKUP(SEG.DATE_ATTEND);
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 :
LOOKUP(field);
où :
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.
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 :
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
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.
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.
COMPUTE
LOOKUP(field action);
où :
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.
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 |