Lösungsvorschläge

Vielleicht haben Sie folgende Funktion geschrieben:

CREATE OR REPLACE FUNCTION anzahl_studenten(semester INT) RETURNS bigint AS $$
  SELECT COUNT(*) FROM studenten s WHERE s.semester = semester; 
$$ LANGUAGE SQL;

Wenn Sie genau nachsehen, stellen Sie fest, dass diese Funktion für jeden Parameter das gleiche Ergebnis liefert -- die Anzahl aller Studenten.

Das liegt daran, dass sich beide Seiten der Gleichheit s.semester = semester auf das Attribut des aktuellen Studententupels beziehen. Als Ausweg können Sie entweder den Parameter umbenennen oder wie folgt qualifizieren: s.semester = anzahl_studenten.semester:

CREATE OR REPLACE FUNCTION anzahl_studenten(semester INT) RETURNS bigint AS $$
  SELECT COUNT(*) FROM studenten s WHERE s.semester = anzahl_studenten.semester; 
$$ LANGUAGE SQL;

Analog dazu schreiben Sie die Funktion, die nach Namen zählt:

CREATE OR REPLACE FUNCTION anzahl_studenten(name VARCHAR) RETURNS bigint AS $$
  SELECT COUNT(*) FROM studenten s WHERE s.name = anzahl_studenten.name; 
$$ LANGUAGE SQL;

results matching ""

    No results matching ""