Funktion ungewollt "mehrfach" aufgerufen

Hallo liebes Forum,

ich stehe vor einem merkwürdigen Problem.

Ich nutze folgende Funktion:

CREATE OR REPLACE FUNCTION schnittpunkt(gid_a integer,gid_b integer)
  RETURNS geometry AS
$BODY$
DECLARE
schnittpunkt geometry;
i integer;
j integer;

BEGIN

RAISE NOTICE 'BeGINN';

 schnittpunkt:= astext(intersection(a.the_geom, b.the_geom)) from (select the_geom from ways where gid=$1)a, (select the_geom from ways where gid = $2) b;

i:=NumPoints(the_geom) from ways where gid=$1;

FOR j IN 1 .. i LOOP

RAISE NOTICE 'Anzahl der Punkte:%',j;
END LOOP;


RETURN schnittpunkt;
RETURN i;

END;
$BODY$
  LANGUAGE 'plpgsql' IMMUTABLE STRICT;

Die Funktion errechnet mir über PostGIS den Schnittpunkt zweier Geometrien (funktioniert auch sauber).
Zudem wird mir eine Anzahl von Knotenpunkten einer Straßengeometrie ausgegeben (auch korrekt).

Was merkwürdig ist:

Ich rufe die Funktion auf und erhalte alle Notices doppelt, als ob die Funktion doppelt aufgerufen wird:

test=# SELECT schnittpunkt(14730,14717);
NOTICE: BeGINN
NOTICE: BeGINN
NOTICE: Anzahl der Punkte:1
NOTICE: Anzahl der Punkte:2
NOTICE: Anzahl der Punkte:3
NOTICE: Anzahl der Punkte:4
NOTICE: Anzahl der Punkte:5
NOTICE: Anzahl der Punkte:6
NOTICE: Anzahl der Punkte:7
NOTICE: Anzahl der Punkte:1
NOTICE: Anzahl der Punkte:2
NOTICE: Anzahl der Punkte:3
NOTICE: Anzahl der Punkte:4
NOTICE: Anzahl der Punkte:5
NOTICE: Anzahl der Punkte:6
NOTICE: Anzahl der Punkte:7
schnittpunkt

010100000037F8413069612B4186CFCE2575215A41
(1 row)

Hat jemand eine Ahnung woran das liegen kann?

Danke jetzt schon mal, Kai

Kannst du mal bitte den Ausführungsplan für deine Anfrage posten?

Könnte es daran liegen, das deine Variable so heißt wie die Funktion?

Gruß Uwe

Hallo allerseits, zunächst einmal vielen Dank für die Antworten.

Es liegt leider nicht daran, dass VAriablenname und Funktionssname gleich sind.


“Kannst du mal bitte den Ausführungsplan für deine Anfrage posten?”

Was genau meinst Du damit. Meinst Du das Ziel der Funktion. Es geht letztlich darum eine MULTILINE-Geometrie zu zerlegen, und das von einem Routing-Schnittpunkt ausgehend.

Viele Grüße, Kai

Die Funktion ist deklariert als RETURNS geometry, Du versuchst aber, auch noch einen INT auszugeben und behauptest, daß dies auch erfolgen würde. Geht aber nicht, zumindest nicht so, wie oben gezeigt.


Ich rufe die Funktion auf und erhalte alle Notices doppelt, als ob die Funktion doppelt aufgerufen wird:

Hat jemand eine Ahnung woran das liegen kann?

Danke jetzt schon mal, Kai

Ich vermute, daß Du beim basteln nicht nur diese eine Funktion mit diesem Namen hast, sondern weitere, mit unterschiedlichen Return-Parametern, und da irgend was durcheinander kommt.

Mit anderen Worten: vermutlich PEBKAC.

Andreas