PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 29/04/2014 06:26:05

tatou
Membre

fonction

Bonjour PLPGSQL pro smile

j'aimerais faire une fonction qui me divise un entier par 1000 ci-dessous le code :

CREATE FUNCTION unite_s ( x integer)
returns numeric(6,3)
AS

$corps$

Begin

return (  x /1000) ;

end;

$corps$

LANGUAGE PLPGSQL

mais lors de l'exécution une erreur s'affiche:
ERREUR:  champ numérique en dehors des limites
DETAIL:  Un champ de précision 6 et d'échelle 3 doit être arrondi à une valeur
absolue inférieure à 10^3.

j'ai essayé avec :  select 465551/1000 ::numeric(7,3);
il me renvoie : 465.5510000000000000 et moi je veux que 465.551 sitou comment faire plz

merci pour ton aide appréciée

Hors ligne

#2 29/04/2014 08:37:54

Geo-x
Membre

Re : fonction

Bonjour tatou.

Essayez plutôt : select (465551/1000) ::numeric(7,3);

Sinon c'est 1000 que vous mettez en numeric(7,3).

Geo-x

Hors ligne

#3 29/04/2014 12:06:57

tatou
Membre

Re : fonction

merci pour ta réponse Geo-x,
je l'ai essayé :

select (465551/1000) ::numeric(7,3);
465.000   et non pas 465.551

Hors ligne

#4 29/04/2014 13:47:22

arthurr
Membre

Re : fonction

test# select (465551::decimal/1000)::decimal(7,3);
 numeric 
---------
 465.551
(1 row)

Dernière modification par arthurr (29/04/2014 13:48:05)

Hors ligne

#5 29/04/2014 14:24:51

tatou
Membre

Re : fonction

merciii arthurr pour ta réponse alors ça veut qu'on doit définit le nombre 465551 comme étant décimal ?

et comme conséquence le code de ma fonction doit etre comme ça ?
CREATE FUNCTION unite_s ( xdecimal ) // au lieu de x integer on déclare x decimal
returns decimal (7,3)
AS

$corps$

Begin

return (  x /1000) ;

end;

$corps$

LANGUAGE PLPGSQL

Hors ligne

#6 30/04/2014 10:40:19

arthurr
Membre

Re : fonction

Celle là fonctionne bien :

test=# CREATE OR REPLACE FUNCTION unite_s (x decimal ) returns decimal AS $corps$
Begin
 return (  x /1000)::decimal(7,3) ;
end;
$corps$
LANGUAGE PLPGSQL;
CREATE FUNCTION
test=# select * from unite_s(465551);
 unite_s 
---------
 465.551
(1 row)

Hors ligne

#7 30/04/2014 11:38:31

tatou
Membre

Re : fonction

merci arthurr pour ton aide appréciée

Hors ligne

#8 16/08/2014 13:50:52

Harry
Membre

Re : fonction

Je m'explique, à la base, j'ai un fichier .csv dans lequel j'ai une colonne de temps (du timestamp) toutes les 5, 6 ou 30min sur une année et une colonne de pluie (en mm). La fonction devrait permettre de calculer un intervalle de temps 24H et de sommer les quantités de pluies correspondantes à cet intervalle.

Hors ligne

#9 03/09/2014 09:06:19

Geo-x
Membre

Re : fonction

Bonjour Harry.

Il me semble que ce sujet a déjà été traité : http://forums.postgresql.fr/viewtopic.php?id=3044

Geo-x

Hors ligne

Pied de page des forums