Si vous exécutez des requêtes qui comparent les types de données de chaîne à des bases de données distantes Db2® qui utilisent le type de connexion Db2 qui n'est pas en mode de compatibilité VARCHAR2, ces requêtes peuvent renvoyer des résultats incorrects.
Symptômes
Vous exécutez des requêtes qui comparent les types de données de chaîne (CHAR ou VARCHAR) à des bases de données distantes Db2 qui ne sont pas en mode de compatibilité VARCHAR2 et utilisent le type de connexion Db2. Vous obtenez des résultats différents de ceux que vous obtenez dans une base de données locale car les requêtes sont en aval et suivent les règles de comparaison Db2 distantes.
select col_char from testable1 union select col_varchar from testable2;
select col_char from testable1 except select col_varchar from testable2;
select col_char from testable1 intersect select col_varchar from testable2;
Vous pouvez vérifier la configuration de la base de données Db2 distante en exécutant la commande db2 get db
cfg
. Dans l'exemple suivant, la base de données n'est pas en mode de compatibilité VARCHAR2.
$ db2 get db cfg for testdb |grep "Varchar2 compatibility"
Varchar2 compatibility = OFF
Résolution du problème
- Exécutez l'instruction suivante pour identifier l'ID de connexion interne (
CID
) de votre source de données.select * from DVSYS.LISTRDBC;
Cette requête répertorie toutes les connexions de la grappe. Recherchez dans la sortie la ligne de la ou les connexions que vous souhaitez modifier.
- Exécutez la commande suivante pour modifier le paramètre COLLATING_SEQUENCE de cette connexion à
'I'
pour chaque connexion que vous souhaitez modifier.ALTER SERVER QPLEX OPTIONS (add <CID>@collating_sequence 'I');
Exemple :ALTER SERVER QPLEX OPTIONS (add DB210000@collating_sequence 'I');