添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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 ?

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

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.

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);

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.

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.