Vous pouvez utiliser des fonctions de chaîne avec des unités de chaîne à partir d'une source de données distante Db2, mais la fonction de chaîne n'est pas transférée sur la source de données distante Db2.
Symptômes
Vous utilisez des fonctions de chaîne avec des unités de chaîne dans une requête et la fonction de chaîne n'est pas transférée sur la source de données distante Db2.
Par exemple
select SUBSTRING (col13_char, 1, 2,OCTETS) from n1
Résolution du problème
Pour résoudre ce problème, vous devez définir les options SAME_CODESET et STRING_UNITS. L'option SAME_CODESET permet de définir l'attribut de serveur SAME_CODESET en externe. L'option STRING_UNITS permet de définir l'attribut de serveur STRING_UNITS en externe. Il s'agit de la configuration de la source de données distante string_units for Db2.
- Récupère le cid à partir de la table
dvsys.rdb_connections
.select cid, url from dvsys.rdb_connections;
- Vérifiez si le " codeset entre la base de données locale de Data Virtualization et la source de données distante " Db2 est le même.
Exécutez la commande suivante dans la base de données locale de Data Virtualization et dans la source de données distante " Db2 pour obtenir le paramètre " codeset.
db2 get db cfg for <dbname> | grep "Database code set"
Où <dbname> est le nom de la base de données et
"Database code set" = UTF-8
.Si le paramètre est le même, vous pouvez définir SAME_CODESET sur Y.
- Exécutez la commande suivante dans la source de données distante Db2 pour trouver le paramètre d'unités de chaîne.
db2 get db cfg for <dbname> | grep "STRING_UNITS"
Où < nom_bd> est le nom de la base de données et l'unité de chaîne par défaut (
"STRING_UNITS"
) est définie surSYSTEM
.Si le paramètre est
SYSTEM
, définissez STRING_UNITS surS
. Si le paramètre estCODEUNITS32
, définissez STRING_UNITS surC
. - Exécutez les commandes suivantes pour spécifier les options SAME_CODESET et STRING_UNITS . Utilisez la valeur < cid> que vous avez obtenue à l'étape 1 et la valeur de SAME_CODESET que vous avez déterminée à l'étape 2 et la valeur de STRING_UNITS que vous avez déterminée à l'étape 3.
alter server qplex options(set <cid>@same_codeset 'Y')
alter server qplex options(set <cid>@string_units 'S')
Ou
alter server qplex options(set <cid>@same_codeset 'N')
alter server qplex options(set <cid>@string_units 'C')
Pour plus d'informations, voir Chaînes de caractères dans la documentation de Db2.