Vous n'êtes pas identifié(e).
Pages : 1
Bonjour, je débute en pl/pgsql j'ai une petite question (petite ne veux pas dire importante ! ) 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
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
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 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
Pages : 1