Jointure sur des bases de données différentes avec WebDev 16: encore une déception !

Dans la cas d’une application multibase, on peut être amené à aggréger des données en provenance de bases différentes. La sélection peut s’opérer en 2 étapes: rapatrier les données de chaques bases puis les aggréger en mémoires. Si l’aggrégation consiste à faire une jointure on préfèrerait que cela se fasse dans la « base ».

En J2EE, le développeur ferait appel à des EJB puis avec un EQL ferait la sélection interbase. Il s’appuirait ainsi sur des mécanismes de chargement paresseux afin limiter l’occupation mémoire en évitant de charger la base en mémoire! Comment webdev adresse-t-il se problème ?

Prenons un cas concrêt de 2 requêtes paramêtrées, chacune mettant en jeu des tables sur des bases de données différentes. Le test SQL de chacune de ces 2 requêtes dans l’IDE se fait sans encombre puisque aucune ne fait pas intervenir l’autre. Créons une 3e requêtes qui fait une produit cartésien sur les 2 premières. Cette 3e requête est elle-même paramêtrée afin d’assurer la jointure. Et bien le test SQL de la 3e requête dans l’IDE se passe parfaitement !

Cela donne l’illusion au développeur de pouvoir utiliser la 3e requêtes comme source pour un tableau. Que nenni ! On a droit à une belle explosion, webdev se plaigant que le fichier (table) correspondant à la 3e requête n’existe pas. Dommage que l’IDE laisse au développeur espérer une opération magique qui n’existe pas !

La solution consiste à remplir le tableau manuellement avec le résultat de l’appel à des requêtes SQL manuelles. Il faut déclarer une source de données pour chacune des requêtes et executer le SQL associé sur chacune d’elle (HExecuteEquêteSQL). Ensuite il faut faire de même avec une nouvelle source de données et un requête SQL faisant un produit cartésien sur les 2 premières sources de données.

Finalement on arrive a nos fin mais au prix d’un effort de programmation non négligeable et une rupture dans les concepts: le médecin doit abandonner le confort de la manipulation d’objet dans l’IDE (requêtes) pour écrire du SQL dans une chaine de caratères non validée par l’IDE. Quel dommage !

Cet article, publié dans Application, Gestion de projet, est tagué . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s