Versuch mal:
Code:SELECT * FROM ...
Hallo Leute,
ich habe ein kleines Problem mit meinem Rückgabe Typ einer Funktion. Es handelt sich um einen Pseudodatentyp:
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.Code: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) );
Jedoch die Kombination mit der Rückgabe gibt dieses hier wieder:Code: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; $_$;
Erwartet wird jedoch solch ein Resultat:Code:haushaltskasse=> SELECT neueumlage2('Test dummy',99,'2010-09-30',1); neueumlage2 ------------------------------------------------------------------------- (1,391,"Willi Biene",2010-09-01,2.25,Strassenbahnkarte)
Ich bin recht verwirrt. Was mache ich dabei falsch?Code:benutzernr | umlagenr | benutzer | datum | preis | verwendung ------------+----------+-------------+------------+-------+-------------------------------- 1 | 390 | Willi Biene | 2010-09-01 | 7.40 | Bahnkarte
Danke für eure Hilfe.
Versuch mal:
Code:SELECT * FROM ...
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
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
Nur wer verstanden hat, wie die Technik funktioniert, kann sie beherrschen!
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen