Ergebnis 1 bis 3 von 3

Thema: Rückgabetyp ist falsch bei Funktion

  1. #1
    bobthebear ist offline Neuer Benutzer
    Registriert seit
    14.09.2010
    Beiträge
    1

    Standard 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:
    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) 
    );
    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:
    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:
    Code:
    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:
    Code:
     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.

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    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

  3. #3
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard

    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!

Ähnliche Themen

  1. sequence zählt falsch
    Von Gilbi im Forum SQL
    Antworten: 11
    Letzter Beitrag: 21.03.2011, 17:54
  2. Problem Was mach ich falsch?
    Von humphrey74 im Forum SQL
    Antworten: 2
    Letzter Beitrag: 06.01.2010, 14:12
  3. Postgres gibt double-Wert falsch an?
    Von Jdan im Forum SQL
    Antworten: 3
    Letzter Beitrag: 29.09.2008, 18:51
  4. COPY: Was ist denn da bitte falsch?
    Von Gisman im Forum SQL
    Antworten: 2
    Letzter Beitrag: 16.03.2007, 11:44
  5. Frage wegen Rückgabetyp aus Funkion
    Von Desmond im Forum Trigger und Funktionen
    Antworten: 4
    Letzter Beitrag: 08.06.2006, 09:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum