Unbekannter Wert in einem String

Hallo zusammen,

bei nachfolgend zitierter Funktion (gekürzt) habe ich das Problem, dass bei der Kundennummer immer ‘10129’ rauskommt, egal welchen Parameter ich übergebe.

Ich sehe den Fehler einfach nicht.
Welches zweite Paar Augen kann mir helfen?


CREATE OR REPLACE FUNCTION "getFreeQuota"(uid integer)
  RETURNS character varying AS
$BODY$

declare
    uid alias for $1;
    belongsto integer := 0;
    kdnr character varying;

begin
    select into belongsto "kscLogin"."belongsto" from "kscLogin" where uid = uid;
    IF (belongsto != 1) THEN
        select into kdnr "kscStammdaten"."KdNr"::character varying from "kscStammdaten" where uid = belongsto;
    ELSE
        select into kdnr "kscStammdaten"."KdNr"::character varying from "kscStammdaten" where uid = uid;
    END IF;

    return kdnr;    
end;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Schwer zu sagen. Was ergeben denn die einzelnen Anfragen mit diesen Parametern?

RAISE NOTICE kann dir hier auch noch weiterhelfen.

Einzeln und seperat ausgeführt sind die Abfragen in Ordnung.

RAISE NOTICE muss ich mir erstmal ansehen.

where uid = uid

Da dürfte Dein Problem liegen.

Verwende einen anderen Namen für den Parameter, dann sollte es klappen. So wird nämlich immer die Spalte der Tabelle referenziert, nicht der Parameter

P.S.: Warum tust Du Dir das mit der Groß/Kleinschreibung und den nervigen Quotes eigentlich an?

Du bist der Beste :sunglasses:
Sowas offensichtliches sieht man mit der Zeit einfach nicht mehr :confused:

Mein Kollege wollte die Bezeichner gerne so haben.

Öhm, wie Recht der castorp doch hat - habe ich auch übersehen :wink:

Spätestens mit dem Wechsel auf 9.0 klappt das nicht mehr. Da schmeisst Postgres dann einen Fehler wenn ein Parameter den gleichen Namen hat wie eine Spalte Deiner Abfrage.

Übrigens: das “uid alias for $1;” kannst Du Dir sparen.
Es reicht dem Parameter in der Funktionsdefinition einen Namen zu geben.