Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 13/02/2012 21:48:42
- kadbra78
- Membre
ERROR: operator does not exist: character varying = integer
Lorsque j'exécute cette line sur mon serveur de base de données originale version 8.1
Je n'ai aucun message d'erreurs
Fmt(command,"%s<%s%s","SELECT typecertificat FROM mac WHERE infodht_no_serie=",no_serie);
Par contre lorsque cette commande est exécuter sur mon nouveau serveur version 9.0 sur lequel j'ai restauré ma base de données original
J’ai eu ce message d'erreur
ERROR: operator does not exist: character varying = integer
LINE 1: ...ECT typecertificat FROM mac WHERE infodht_no_serie =55137954
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
********** Error **********
ERROR: operator does not exist: character varying = integer
SQL state: 42883
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Character: 55
Y a t-il un moyen de régler ce problème sans que je modifie ma requête ?
Hors ligne
#2 13/02/2012 21:54:27
- rjuju
- Administrateur
Re : ERROR: operator does not exist: character varying = integer
Il y a moyen, en modifiant les tables sytème, de remettre le cast automatique, mais cela peut apporter plus de problèmes qu'en résoudre.
Vous pouvez regarder ce thread http://forums.postgresql.fr/viewtopic.php?id=1804 pour plus de détail
Julien.
https://rjuju.github.io/
Hors ligne
#3 13/02/2012 22:24:44
- gleu
- Administrateur
Re : ERROR: operator does not exist: character varying = integer
Ce que veut dire rjuju, c'est que la version 8.3 et les versions ultérieures sont beaucoup plus restrictives au niveau des conversions implicites. Pour que votre requête fonctionne, elle doit utiliser une conversion explicite. Donc soit
SELECT typecertificat FROM mac WHERE infodht_no_serie::integer=5513795
soit
SELECT typecertificat FROM mac WHERE infodht_no_serie ='5513795'
Guillaume.
Hors ligne
#4 13/02/2012 23:05:10
- kadbra78
- Membre
Re : ERROR: operator does not exist: character varying = integer
voulez vous m'informer SVP s'il y a un moyen de modifier cette command de sorte que soit accepter par tout mes serveur le 8.1 et 9.0
int PSQL_GetCertificat(char no_serie[], char *typecert)
{
int status;
char command[400];
PGresult *result;
int nbTuples;
Fmt(command,"%s<%s%s","SELECT typecertificat FROM mac WHERE infodht_no_serie=",no_serie);
result = PQexec(db, command);
status = VerifyCmdWithData(result);
Hors ligne
#5 13/02/2012 23:13:21
- gleu
- Administrateur
Re : ERROR: operator does not exist: character varying = integer
C'est ma réponse ci-dessus. La requête avec la conversion explicite fonctionne sur toutes les versions.
Guillaume.
Hors ligne
#6 14/02/2012 09:43:44
- Marc Cousin
- Membre
Re : ERROR: operator does not exist: character varying = integer
Il vaut mieux toutefois utiliser la version infodht_no_serie ='5513795' : dans le cas inverse, on applique une fonction sur infodht_no_serie, qui empêchera d'utiliser l'index sur la colonne s'il y en a un.
Marc.
Hors ligne