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.