[SQL] Prédicat JOIN ou clause MERGE ON nvalide

Vincent Lecomte

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, et le document disponible ici explique comment procéder pour la résoudre. Vous trouverez les détails à la page 41, au paragraphe “Résolution d’un incident SQL0338“. 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 le document des changements 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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Copy link