Les trucs & astuces de la semaine du 28 Novembre au 4 décembre 2005
Ordonner les enregistrements d’après une colonne dans un fichier Join secondaire
Q: Je veux joindre des enregistrements provenant des fichiers Customer et Sales et les ordonner d’après le champ TotAmt du fichier Sale. J’ai essayé d’utiliser DDS pour créer un fichier logique join, mais les fichiers clé doivent venir du fichier primaire, qui est mon fichier Customer. Est-il possible d’ordonner les enregistrements sur un champ de fichier secondaire ?
R: Voici la réponse « facile » à votre question précise : inversez l’ordre des fichiers Customer et Sale (c’est-à -dire sur les mots-clés JFILE et JOIN dans votre source DDS de fichier logique). Cette manoeuvre fait du fichier Sale le fichier primaire et vous pouvez ensuite spécifier le champ TotAmt comme le champ clé du fichier logique join. Mais supposons que cette méthode ne convienne pas dans une certaine situation. Par exemple, vous pourriez vouloir ordonner les enregistrements sur des champs provenant de deux, ou plus, des fichiers joints. Il y a alors deux solutions. La plus simple consiste à utiliser SQL. Sur l’instruction Select, incluez une clause Order By qui peut spécifier les colonnes (champs) provenant de n’importe quelle table (fichier) dans le join (figure 1).
Vous pouvez utiliser une instruction Select qui a une clause Order By dans une requête ad hoc, dans une instruction SQL Declare Cursor imbriquée, ou via JDBC ou ODBC. (Vous ne pouvez pas utiliser ce genre d’instruction pour créer une vue SQL.)
La commande OpnQryF (Open Query File) offre une alternative non-SQL. Utilisez le paramètre KeyFld (Key field) de la commande, qui autorise des champs provenant de n’importe quel fichier joint. La figure 2 en montre un exemple.
Comme avec toute commande OpnQryF, utilisez d’abord un override de fichier pour faire du fichier de requête ouvert un partagé ouvert. Dans le cas d’un join, utilisez aussi l’override pour rediriger l’opération d’ouverture de fichier d’un programme applicatif vers le fichier de requête. (Pour un fichier de requête non-join, le nom du fichier de requête et le nom du fichier du programme d’application sont souvent les mêmes et donc la redirection n’est pas nécessaire.)
Cet exemple suppose que le programme applicatif DFspCusSale déclare le fichier CustSale (par exemple, sur un F-spec RPG), un fichier logique join qui sert à fournir le format d’enregistrement pour les opérations d’I/O du programme applicatif et OpnQryF. L’override redirige les références de fichier CustSale du programme applicatif vers le fichier de requête partagé, qui est par défaut identifié par le premier fichier listé dans le paramètre File (nom du fichier) de la commande OpnQryF (c’est-à -dire Customer).
Quand le programme DspCusSale exécute une opération open pour le fichier CustSale, le système utilisera le fichier de requête ouvert par la commande OpnQryF pour fournir les enregistrements au programme. Ces enregistrements seront ordonnés par les champs CustId et TotAmt.
Téléchargez cette ressource
Guide inmac wstore pour l’équipement IT de l’entreprise
Découvrez les dernières tendances et solutions IT autour des univers de Poste de travail, Affichage et Collaboration, Impression et Infrastructure, et notre dossier Green IT sur les actions engagés par inmac wstore pour réduire son impact environnemental