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 10/05/2013 02:20:22

newkek
Membre

Problème avec time

Bonjour, je débute en pl/pgsql j'ai une petite question (petite ne veux pas dire importante ! smile ) je crée deux variables qui sont des variables de type de 'time', et je n'arrive pas à les additionner l'une avec l'autre...

Le code :

create or replace function heure_attribuee(pid_tournois integer, pcategorie integer)
returns time
as $$
declare
heure_retour time;
heure_debut time;
equipe_inscrite record;
begin
    if (pcategorie = 1)
    then heure_retour:='00:00';
    elsif (pcategorie = 2) then heure_retour:='02:00';
    elsif (pcategorie = 3) then heure_retour:='04:00';
    else heure_retour:='00:00';
    end if;
    for equipe_inscrite in select IdEquipe from equipe where IdCategorie=pcategorie loop
    heure_retour:=heure_retour + '00:05';

    end loop;
    heure_debut:=(select heuredebut from tournois where IdTournois=pid_tournois);
    heure_retour:=heure_retour+heure_debut;
    return heure_retour;
end;
$$ language plpgsql;


Voilà et postgres me bloque lors de l'appel de cette fonction, au niveau de l'addition des deux heures... Il me dit que je dois caster clairement les deux types des variables:

PL/pgSQL function triggerfunc_add_inscription() line 6 at assignment
ERROR:  operator is not unique: time without time zone + time without time zone
LINE 1: SELECT heure_retour+heure_debut
                                ^
HINT:  Could not choose a best candidate operator. You might need to add explicit type casts.
QUERY:  SELECT heure_retour+heure_debut

J'ai donc essayé :

heure_debut:=cast((select heuredebut from tournois where IdTournois=pid_tournois) as time);
heure_retour:=cast(heure_retour+heure_debut as time);

Mais rien n'y fait, auriez-vous une solution svp ?

Merci, bonne soirée !

Hors ligne

#2 10/05/2013 13:40:57

gleu
Administrateur

Re : Problème avec time

Vous avez une erreur tout simplement parce que ce que vous essayez de faire n'a pas de "sens". C'est comme si je voulais additionner deux dates. Quel est le résultat de "12/01/2012" + "15/01/2012" ? ça n'a pas de sens. Par contre, si j'ajoute deux jours à une date, ça, ça a du sens.

Donc en fait, vous devez ajouter un intervalle à une heure. Ça nous donne ceci :

postgres=# select '05:00'::time+'02:00'::interval;
 ?column? 
----------
 07:00:00
(1 row)

Guillaume.

Hors ligne

#3 12/05/2013 01:30:10

newkek
Membre

Re : Problème avec time

Merci pour cette réponse ! C'est vrai que je n'avais pas fait le distingo entre les deux types c'est une erreur de ma part, je débute smile Du coup j'ai seulement changé l'heure de la variable 'heure_debut' qui est donc maintenant un 'interval'. Merci encore !

Bonne soirée.

Hors ligne

Pied de page des forums