Rückgabetyp ist falsch bei Funktion

Hallo Leute,

ich habe ein kleines Problem mit meinem Rückgabe Typ einer Funktion. Es handelt sich um einen Pseudodatentyp:

DROP FUNCTION IF EXISTS neueumlage2(character varying, numeric, date, integer);
DROP TYPE IF EXISTS t_monatgesamt;


CREATE TYPE t_monatgesamt AS
(
    --benutzernr Integer, umlagenr Integer,benutzer character varying(50), datum DATE,preis numeric(10,2),verwendung character varying(150) 
    benutzer character varying(50), datum DATE,preis numeric(10,2),verwendung character varying(150) 
);

Nun startet meine Funktion, die das bewirkt was sie soll. Auch das Select-Statement allein gibt die richtigen Daten zurück die ich sauber in einem Resultset verarbeiten kann.

CREATE FUNCTION neueumlage2(character varying, numeric, date, integer) RETURNS SETOF t_monatgesamt
    LANGUAGE plpgsql
    AS $_$
  DECLARE
    rec t_monatgesamt;
    
  BEGIN
    INSERT INTO umlage VALUES(default, $3, $2, $1);
    INSERT INTO benutzerumlage VALUES($4,(SELECT currval('umlage_umlagenr_seq')));
    
    For rec IN
        --SELECT benutzer.benutzernr, umlage.umlagenr, benutzer.name AS benutzer, umlage.datum, umlage.preis, umlage.verwendung FROM ((benutzerumlage JOIN umlage ON ((benutzerumlage.umlagenr = umlage.umlagenr))) JOIN benutzer ON ((benutzerumlage.benutzernr = benutzer.benutzernr))) WHERE (date_part('month'::text, umlage.datum) = date_part('month'::text, ('now'::text)::date)) ORDER BY umlage.datum LOOP
        SELECT benutzer.name AS benutzer, umlage.datum, umlage.preis, umlage.verwendung FROM ((benutzerumlage JOIN umlage ON ((benutzerumlage.umlagenr = umlage.umlagenr))) JOIN benutzer ON ((benutzerumlage.benutzernr = benutzer.benutzernr))) WHERE (date_part('month'::text, umlage.datum) = date_part('month'::text, ('now'::text)::date)) ORDER BY umlage.datum LOOP
    return next rec;
    END LOOP;
    RETURN;
  
  END;
$_$;

Jedoch die Kombination mit der Rückgabe gibt dieses hier wieder:

haushaltskasse=> SELECT neueumlage2('Test dummy',99,'2010-09-30',1);
                               neueumlage2
-------------------------------------------------------------------------
 (1,391,"Willi Biene",2010-09-01,2.25,Strassenbahnkarte)

Erwartet wird jedoch solch ein Resultat:

 benutzernr | umlagenr |  benutzer   |   datum    | preis |           verwendung
------------+----------+-------------+------------+-------+--------------------------------
          1 |      390 | Willi Biene | 2010-09-01 |  7.40 | Bahnkarte

Ich bin recht verwirrt. Was mache ich dabei falsch?

Danke für eure Hilfe.

Versuch mal:

SELECT * FROM ...

Nein, der Rückgabetyp ist richtig. Der wurde ja angegeben.

Nur sollte man den Unterschied zwischen einen Datentyp und einer Tabelle kennen, bzw. was ein Recordtyp ist.

Die Funktion liefert einen Datentyp zurück. Was Du aber haben willst ist die Zeile eine Tabelle.


mfg

fristo