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 21/03/2011 03:23:07

SQLpro
Membre

Bug or not Bug ????

Bonjour,

Il semble que la fonction RANDOM ne veuille jamais rien savoir lorsqu'elle est incorporée dans une fonction PG au sein d'un INTERVAL...

Exemple :

CREATE OR REPLACE FUNCTION F_TEST (n1 INT, n2 INT)
RETURNS TIMESTAMP STABLE AS $$ 

DECLARE n3 INT;
BEGIN
   n3 = n1 + n2 + FLOOR(10 * RANDOM());
   RETURN CAST('2011-01-01' AS TIMESTAMP) + INTERVAL '$3 DAYS';
END; $$ LANGUAGE plpgsql ;

à la place de STABLE, vous pouvez mettre ce que vous voulez : VOLATILE, IMMUTABLE....

Bref, l'exécution de cette fonction :

SELECT F_TEST (1, 2)

Ne donne jamais que toujours la même chose :
2011-01-04 00:00:00

Moi je chercher à faire quelque chose d'aléatoire !!!!

A +


Frédéric Brouard, alias SQLpro,  ARCHITECTE DE DONNÉES,  Expert langage SQL
Le site sur les SGBD relationnel et langage SQL   : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA, ISEN Toulon,  CESI Aix en Provence  * * * * *

Hors ligne

#2 21/03/2011 10:33:08

gleu
Administrateur

Re : Bug or not Bug ????

Pas un bug. Vous indiquez $3 qui ne correspond à rien vu que la fonction n'a que deux arguments. Du coup, interval '$3 days' est compris comme interval '3 days', ce qui explique qu'il renvoie toujours le 4 janvier.

Au lieu de $3, il faut indiquer la variable contenant le résultat du calcul. Voici la fonction corrigée :

CREATE OR REPLACE FUNCTION F_TEST (n1 INT, n2 INT)
RETURNS TIMESTAMP STABLE AS $$ 
DECLARE n3 INT;
BEGIN
   n3 = n1 + n2 + FLOOR(10 * RANDOM());
   RETURN CAST('2011-01-01' AS TIMESTAMP) + n3 * INTERVAL '1 DAYS';
END; $$ LANGUAGE plpgsql ;

Guillaume.

Hors ligne

#3 21/03/2011 11:12:14

SQLpro
Membre

Re : Bug or not Bug ????

Mea culpa et merci ! J'ai cherché une syntaxe bien plus compliquée !

A +

Dernière modification par SQLpro (21/03/2011 11:12:42)


Frédéric Brouard, alias SQLpro,  ARCHITECTE DE DONNÉES,  Expert langage SQL
Le site sur les SGBD relationnel et langage SQL   : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA, ISEN Toulon,  CESI Aix en Provence  * * * * *

Hors ligne

Pied de page des forums