Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2008, 17h12   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 9
Points : 2
Points : 2
Par défaut Fonction trunc() postgresql 8.2

Bonjour a tous,

Etant en fin de migration de serveur, je rencontre quelques problèmes de compatibilité entre postge 8.2 et 7.4.

Cette requete :
Code :
1
2
select ID_LIGNE, PIECE_COMMANDEE, KR_FRS_COMMANDE_LIGNE.LIBELLE, REFERENCE, REFERENCE_FRS, IMPUTATION_LIGNE, COMMENTAIRE_LIGNE, USER_LIGNE, NOM_USER, PRENOM_USER, TEL_USER, to_char(QUANTITE_COMMANDEE, 'FM999 990D999') as QUANTITE_COMMANDEE, to_char(trunc(PRIX_UNITAIRE, 8.2), '9 999 990D00') as PRIX_UNITAIRE, to_char(trunc(QUANTITE_COMMANDEE * PRIX_UNITAIRE, 8.2), '999 999 990D00') as TOTAL_HT, QUANTITE_COMMANDEE * PRIX_UNITAIRE as MONTANT_LIGNE from KR_FRS_COMMANDE_LIGNE, KR_PIECES, KR_USERS where COMMANDE = '1280' and ID_PIECE = PIECE_COMMANDEE and ID_USER = USER_LIGNE order by USER_LIGNE, REFERENCE;
( ok c'est un peu fouillis)

me renvoie :
ERREUR: la fonction trunc(double precision, numeric) n'existe pas
HINT: Aucune fonction ne correspond au nom donné et aux types d'arguments. Vous devez ajouter des conversions explicites de type.explicit type casts.

alors qu'elle marche parfaitement sur l'ancien serveur (toujours en prod).

Si celà peut aider :
marche sur : php4 +postgre 7.4 + windows NT
marche pas sur : php5 + postgres 8.2 + linux

Je vous remercie par avance pour toute aide.
cando666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 18h25   #2
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
Tu as mis trunc(PRIX_UNITAIRE, 8.2) alors que le deuxième paramètre doit être un nombre entier correspondant au nombre de décimales à conserver
Exemple : trunc(PRIX_UNITAIRE, 2)
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 09h14   #3
Invité de passage
 
Inscription : juillet 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 9
Points : 2
Points : 2
Merci Scheu pour ta réponse, mais après modification ( remplacer le 8.2 en 2, celà ne change absolument rien :s

Le même message est renvoyé :

Requête ratée :

select distinct(NUMERO_COMMANDE), NOM_FRS, to_char(trunc(sum(QUANTITE_COMMANDEE), 2), '9990D00') as QUANTITE_COMMANDEE, coalesce(to_char(DATE_LIVRAISON_PREVUE, 'DD-mm-YYYY'), 'Au plus tôt') as DATE_LIVRAISON_PREVUE, STATUT_LIGNE from kr_frs_commande, kr_frs_commande_ligne, kr_fournisseurs where id_commande = commande and date_cloture is null and id_frs = fournisseur and piece_commandee = '1135' group by numero_commande, piece_commandee, nom_frs, date_livraison_prevue, statut_ligne

Message :


ERREUR: la fonction trunc(double precision, integer) n'existe pas HINT: Aucune fonction ne correspond au nom donné et aux types d'arguments. Vous devez ajouter des conversions explicites de type.explicit type casts.


Je précise que la même requête (avec le 8.2) fonctionne très bien sur le serveur en prod.

Peut être une incompatibilité entre pg 8.2 et 7.4???

merci d'avance d'éclairer ma lanterne
cando666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 09h53   #4
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
Ce qui est étonnant c'est que ça fonctionnait comme tu dis en 7.4

Dans la doc officielle de la 7.4 comme de la 8.2, le type de la fonction trunc est trunc(v numeric, s int)

7.4 : http://www.postgresql.org/docs/7.4/s...ions-math.html
8.2 : http://www.postgresql.org/docs/8.2/i...ions-math.html

Tu confondrais pas le trunc(..., 8.2) avec le type de données decimal(8.2) par hasard ?
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 12h10   #5
Invité de passage
 
Inscription : juillet 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 9
Points : 2
Points : 2
Citation:
Tu confondrais pas le trunc(..., 8.2) avec le type de données decimal(8.2) par hasard ?
Je ne pense pas Scheu

De plus en passant aux autres rubriques du sites à migrer je remarque plein d'autres incompatibilitées comme :
ERREUR: Valeur du champ date/time en dehors des limites : «07-31-2009 11:42:08»
-> je pense que la date est renvoyée en format anglais MM/JJ/AAAA alors qu'elle devrait être envoyée en format français JJ/MM/AAAA aucune idée comment faire.

Désolé mais la BDD ce n'est pas trop mon domaine...
cando666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 14h44   #6
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
Pour les dates c'est un autre problème, mais pour ton TRUNC, faut respecter la doc officielle. Peut-être que dans des anciennes versions des abus de notation ou d'utilisation de certaines fonctions marchaient, mais après il ne faut pas s'étonner si un jour les mauvaises syntaxes ne marchent plus.
En même temps, trunc(nombre,8.2) ça ne veut rien dire : TRUNC est pour arrondire des décimaux, soit tu arrondis à 8 décimales, soit à 2 décimales, mais pas à 8.2 décimales
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2008, 10h14   #7
Invité de passage
 
Inscription : juillet 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 9
Points : 2
Points : 2
Bonjour,
Je repassais pour prévenir que j'avais réglé mon problème.

Malheureusement, comme tu l'a di Scheu, même en remplacant par trunc(..., 2) afin de n'avoir que deux décimales, j'avais la même erreur.

J'ai donc supprimé le trunc() et je n'ai logiquement, plus d'erreur.

Bizarre tout de même cette fonction assez simple :s

En tout cas merci a toi Scheu.

cando666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h27.


 
 
 
 
Partenaires

Hébergement Web