Articles

Stocker automatiquement une jointure dans une table

Écrit le 18/02/2010   conseils   oracle   sgbd   sql  

Une fois n'est pas coutume, j'attire votre attention sur un petit truc tordu à destination des gens qui ont le malheur de toucher à Oracle.

Imaginez-vous avec deux tables R et S dont vous voulez stocker la jointure sur la condition R.aR = S.aS dans une table. Soit, faites-le avec un soupçon de... ceci ?
CREATE TABLE jointurez AS
        SELECT * FROM R, S
        WHERE R.a = S.b;
Il se trouve qu'il existe des cas dans lesquels vous adoreriez que ça marche, mais là où ça ne marche pas. Le cas typique, c'est quand la table R contient un champ de nom pouet, que S contient lui aussi ce champ, mais que vous ne faites pas la jointure sur ces champs ! Dans ce cas, si la sélection à elle seule marche bien, la table ne se créera jamais car le SGBD ne peut pas aplanir les résultats dans une table : il échoue avec l'erreur "y'a deux champs qu'ont l'même nom, ventrebleu" (erreur ORA-666).
Le problème est que si vous pouvez renommer les attributs du même nom de manière à ce qu'il n'y ait pas de conflit, vous ne pouvez sûrement pas le faire de manière automatique (dans un script, dans une application, dans un rêve que vous ne contrôlez pas directement...).
La solution malpropre est de créer une vue intermédiaire qui accueillera le résultat de la jointure, puis de créer la table qu'on voulait comme une sélection d'autant de colonnes que vous voulez de la vue intermédiaire. Ensuite vous pouvez dire au revoir à votre vue.
CREATE OR REPLACE...

Lire l'article en entier

oin? oin.

26573 oins since near 2010.

dubtrip

Fathaya Sound Syndicate

c.oin.name (en construction)

Chez Olivier El Mekki

Mon profil sur Posterous

oin, a join creation icons by fixicon — background by crazy-alice — powered by posterous

Ce site personnel est un fourre-tout qui peut servir de journal personnel, de répertoire de musique, de portfolio, de carnet de notes, de recueil de pensées diverses sur des sujets variés. Les auteurs dévoilent une partie de leur personne et de leurs recherches, afin qu’en retour ils puissent y trouver l’avis d’autres personnes. Les informations que vous trouverez ici sont données sans aucune garantie. Par ailleurs, ouvrir ce site annule la garantie. La musique qui se trouve sur ce site (et non pas celle qui est liée) est sous licence Creative Commons Music Sharing. L’administrateur du site se réserve le droit de vilipender quiconque sur ses terres et de retirer toute participation extérieure qui lui ferait perdre patience.