Dans cette section : Comment : |
Vous pouvez utiliser la phrase MORE dans une requête MATCH pour fusionner jusqu'à 16 ensembles de sources de données concaténées.
Il faut remplir toutes les conditions dans la requête principale. Toutes les sources de données à fusionner doivent être triées par au moins un champ avec un format commun.
La requête MATCH a pour résultat un fichier HOLD contenant toutes les données fusionnées. Vous pouvez spécifier comment chaque fichier successif est fusionné en utilisant une commande AFTER MATCH. Par exemple, vous pouvez conserver :
1. MATCH FILE file1main request MORE 2. FILE file2subrequest MORE 3. FILE file3subrequest RUN 4. FILE file4main request 5. [AFTER MATCH merge_phrase] MORE 6. FILE file5subrequest MORE 7. FILE file6subrequest RUN 8. FILE file7main request 9. [AFTER MATCH merge_phrase] MORE 10.FILE file8subrequest MORE 11.FILE file9subrequest END
Si les sources de données dans la requête MATCH partagent des critères de tri de haut niveau communs avec les mêmes noms et formats, le processus MATCH fusionne les enregistrements avec des valeurs de critère de tri correspondantes de chacun des fichiers. Si les deux sources de données dans la requête MATCH ont le même critère de tri avec différents noms, vous pouvez utiliser la phrase AS pour changer un des noms.
Si les fichiers dans la requête MATCH ne partagent pas de critère de tri de haut niveau, les champs ne se sont pas comparés. Au lieu de cela, les champs du premier enregistrement dans chaque source de données sont fusionnés pour créer le premier enregistrement du fichier HOLD, et ainsi de suite pour les enregistrements restants.
L'exemple de procédure stockée annotée suivant illustre MATCH et MORE, en utilisant un critère de tri commun :
1. DEFINE FILE EMPDATA CURR_SAL/D12.2M = CSAL; FIRST_NAME/A10 = FN; EID/A9 = PIN; END -*Start MATCH. 2. MATCH FILE EMPLOYEE SUM CURR_SAL AS 'CURRENT' FIRST_NAME AS 'FIRST' BY EID AS 'SSN' -*Concatenate file EMPDATA to EMPLOYEE to form first MATCH answer set. 3. MORE FILE EMPDATA RUN -*Second MATCH answer set: 4. FILE TRAINING PRINT EXPENSES 5. BY PIN AS 'SSN' 6. AFTER MATCH HOLD OLD-OR-NEW END -*Print merged file: 7. TABLE FILE HOLD PRINT * END
La première page de sortie est :
SSN CURRENT FIRST EXPENSES --- ------- ----- -------- 000000010 $55,500.00 DANIEL 2,300.00 000000020 $62,500.00 MICHAEL . 000000030 $70,000.00 LOIS 2,600.00 000000030 $70,000.00 LOIS 2,300.00 000000040 $62,500.00 RUTH 3,400.00 000000050 $54,100.00 PETER 3,300.00 000000060 $55,500.00 DORINA . 000000070 $83,000.00 EVELYN . 000000080 $43,400.00 PAMELA 3,200.00 000000080 $43,400.00 PAMELA 3,350.00 000000090 $33,000.00 MARIANNE . 000000100 $32,400.00 TIM 3,100.00 000000110 $19,300.00 ANTHONY 1,800.00 000000110 $19,300.00 ANTHONY 2,500.00 000000110 $19,300.00 ANTHONY 2,400.00 000000120 $49,500.00 KATE 2,200.00 000000130 $62,500.00 MARCUS .
Dans cet exemple, les sources de données fusionnées ne partagent pas de critère de tri :
DEFINE FILE EMPDATA CURR_SAL/D12.2M = CSAL; FIRST_NAME/A10 = FN; EID/A9 = PIN; END -*Start MATCH MATCH FILE EMPLOYEE SUM CURR_SAL AS 'CURRENT' FIRST_NAME AS 'FIRST' BY EID AS 'SSN' -*Concatenate EMPDATA to EMPLOYEE to form the first MATCH answer set MORE FILE EMPDATA RUN -*Second MATCH answer set: FILE TRAINING PRINT EXPENSES BY PIN AS 'EID' AFTER MATCH HOLD OLD-OR-NEW END -*Print merged file: TABLE FILE HOLD PRINT * END
La phrase AS modifie le jeu de réponses. Comme les critères de tri n'ont plus les mêmes noms, les champs sont fusionnés sans tenir compte des enregistrements correspondants.
La première page de sortie est :
SSN CURRENT FIRST EID EXPENSES --- ------- ----- --- -------- 000000010 $55,500.00 DANIEL 000000010 2,300.00 000000020 $62,500.00 MICHAEL 000000030 2,600.00 000000030 $70,000.00 LOIS 000000030 2,300.00 000000040 $62,500.00 RUTH 000000040 3,400.00 000000050 $54,100.00 PETER 000000050 3,300.00 000000060 $55,500.00 DORINA 000000080 3,200.00 000000070 $83,000.00 EVELYN 000000080 3,350.00 000000080 $43,400.00 PAMELA 000000100 3,100.00 000000090 $33,000.00 MARIANNE 000000110 1,800.00 000000100 $32,400.00 TIM 000000110 2,500.00 000000110 $19,300.00 ANTHONY 000000110 2,400.00 000000120 $49,500.00 KATE 000000120 2,200.00 000000130 $62,500.00 MARCUS 000000140 3,600.00 000000140 $62,500.00 VERONICA 000000150 3,400.00 000000150 $40,900.00 KARL 000000160 1,000.00 000000160 $62,500.00 ROSE 000000180 1,250.00 000000170 $30,800.00 WILLIAM 000000190 3,150.00
WebFOCUS |