IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Fonction trunc() postgresql 8.2


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 6
    Points
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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)
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    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

  4. #4
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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 ?
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    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...

  6. #6
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    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.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d aide pour les fonction en postgresql
    Par dannw dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 11/07/2007, 21h20
  2. pb avec la fonction trunc()
    Par isachat666 dans le forum Delphi
    Réponses: 9
    Dernier message: 26/12/2006, 12h17
  3. Mysql et fonction trunc ?
    Par Joe Le Mort dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 15/12/2006, 17h12
  4. Problème avec la fonction Trunc
    Par yulken dans le forum Langage
    Réponses: 12
    Dernier message: 08/08/2006, 14h33
  5. fonction stockee postgresql
    Par gorby dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 10/05/2004, 14h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo