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 23/04/2010 13:22:53

R.Seif
Membre

ça neretourne rien

Bonjour,
j'ai un code qui est bien écrit, je suppose, mais qui ne retourne aucun résultat.
ça tourne, mais à la fin je n'ai une insertion ni dans la table ips, ni dans la table peers!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

create or replace FUNCTION mape_add_peer(inet,integer) RETURNS integer
AS $$
DECLARE
        p_addr ALIAS for $1;
        p_port ALIAS for $2;
        ipid integer;
        peerid integer;

BEGIN
	-- Is the peer already set ?
	select into peerid peers.id from peers, ips
		where peers.ip = ips.ip and peers.id = ips.id and peers.ip = p_addr and peers.port = p_port;

	IF peerid = 0
	then
		------ Get the ID corresponding to the address
		select into ipid id from ips where ips.ip= p_addr;

		IF ipid >= 1
		then
			insert into peers(ip, port, tmstmp) values (p_addr, p_port, date_trunc ('minute', current_timestamp));
			select into peerid currval('peers_id_seq');
		else
			insert into ips(ip,md5) values (addr,'-');
			select into ipid currval('ips_id_seq');
			insert into peers(ip, port, tmstmp) values (p_addr, p_port, date_trunc ('minute', current_timestamp));
			select into peerid currval('peers_id_seq');
					
		end IF;

	end IF;
	return peerid;
end;$$
	LANGUAGE plpgsql;

Hors ligne

#2 23/04/2010 14:04:04

daamien
damien clochard

Re : ça neretourne rien

Peut être que peerid est différent de zéro ...

Pourquoi ne pas utiliser RAISE NOTICE pour tracer temporairement le déroulement de ta fonction ?

Hors ligne

#3 23/04/2010 14:13:40

R.Seif
Membre

Re : ça neretourne rien

j'ai complété la condition, "else return peerid;"
et j'ai fait des raise notice à chaque étape, toujours rien!!!!!!!!!!!!!!!

Hors ligne

#4 23/04/2010 14:15:53

daamien
damien clochard

Re : ça neretourne rien

R.Seif a écrit :

j'ai complété la condition, "else return peerid;"
et j'ai fait des raise notice à chaque étape, toujours rien!!!!!!!!!!!!!!!

C'est à dire ?

Aucun des raise notice ne s'affiche ? Que disent les logs ?

Hors ligne

#5 23/04/2010 14:17:28

R.Seif
Membre

Re : ça neretourne rien

 mape_add_peer 
---------------
              
(1 file)

tu vois?

Hors ligne

#6 23/04/2010 14:21:11

flo
Membre

Re : ça neretourne rien

Tu l'exécutes comment, la fonction?

Hors ligne

#7 23/04/2010 14:22:56

R.Seif
Membre

Re : ça neretourne rien

select mape_add_peer ('192.168.1.13',80);

une @ ip et un numéro de port quelconques commes entrées!!!!!

Hors ligne

#8 23/04/2010 15:50:20

gleu
Administrateur

Re : ça neretourne rien

Difficile de dire pourquoi, mais il est clair que, comme peerid est NULL, il n'y a pas d'insertion.


Guillaume.

Hors ligne

#9 23/04/2010 23:26:53

R.Seif
Membre

Re : ça neretourne rien

mais il doit me retourner la valeur même si elle est nulle!!!!

Hors ligne

#10 24/04/2010 00:07:09

gleu
Administrateur

Re : ça neretourne rien

Je crois que vous confondez NULL et 0. NULL, c'est en quelque sorte une absence de valeur.

Oh, et petit conseil, arrêtez avec le point d'exclamation, ça commence à être énervant.


Guillaume.

Hors ligne

Pied de page des forums