Nous allons bientôt passer en version V7R1 du système i de IBM et nous testons nos applications. Nous avons rencontré plusieurs fois l’erreur suivante : JOIN predicate or MERGE ON clause not valid (SQL0338). Qu’est-ce que cela signifie ? Et bien c’est très simple : le moteur SQL de DB2 a été amélioré au fil du temps et bien sûr, il est bien plus strict qu’auparavant. Cela peut arriver si vous utilisez des jointures implicites pour certaines tables (la condition se trouve alors dans la clause « WHERE »), couplées à des jointures gauche/droite/interne/externe (JOIN ON) à la suite. Cela arrive également si l’ordre des jointures ne peut être correctement vérifié par le moteur.
Pour résoudre ce problème, il faut donc réordonner toutes les jointures. Cette restriction est apparue dans la version V6R1 du système. La méthode pour résoudre le problème est documentée dans un mémo destiné aux utilisateurs mais également sur le site web du support IBM. Un premier conseil que nous pouvons vous donner est d’utiliser le même type de jointure : soit uniquement des jointures implicites et toutes les conditions seront alors dans la clause « WHERE« , soit uniquement des prédicats et toutes les jointures seront ordonnées dans la clause « FROM« , avec des parenthèses supplémentaires si nécessaire.
Vous pouvez également consulter la documentation des nouveautés pour le système i V7R1 ici. Les modifications apportées à la base de données sont détaillées dès la page 29.