Announcement

Collapse
No announcement yet.

Record in Tabelleform

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Record in Tabelleform

    Ich habe eine Funktion welche als IN-Parameter eine Tabelle und als Rückgabe einen Record hat.
    Wenn ich die Funktion aufrufe erhalte ich die richtigen Daten.
    Code:
    SELECT crmti_id, tst2(crmti) FROM crmti;
    crmti_id | tst2
    ----------+-----------------------------------------
    1 | (0,werkstatt," ",1126,"Ronny Kumke",C)
    Nun sollte jedes Element des zurückgegebenen Records natürlich in einer Spalte stehen. Etwa so:
    crmti_id | test1 | bla | bla
    --------------+--------+------+-----
    1 | 0 | wk | tst

    Wie sieht der Funktionsaufruf aus. Funtioniert das überhaupt so?

    Meine Funtion sieht so aus.
    Code:
    CREATE FUNCTION tst2(crmti)
    	RETURNS record AS $$
    DECLARE
    	rs0 RECOrD;
    	rs1 RECORD;
    	result RECORD;
    BEGIN 
    rs0 := SucheNummer($1.crmti_dst);
    rs1 := SucheNummer($1.crmti_src);
    SELECT INTO result rs0.id, rs0.name, rs0.typ, rs1.id, rs1.name, rs1.typ; 
    return result; 
    END; $$ LANGUAGE 'plpgsql';
    Dank und Gruß Ronny

  • #2
    Ich habe mal
    Code:
    SELECT crmti_id, (tst2(crmti)).name,  (tst2(crmti)).id FROM crmti;
    probiert doch den Fehler: 'konnte Spalte »name« im Record-Datentyp nicht identifizieren'
    Wie werden die Elemente eines Records benannt?
    Ich dachte das funktioniert so
    Code:
    SELECT INTO result rs0.id as id, rs0.name as name;

    Comment


    • #3
      gelöst

      CREATE FUNCTION foo(OUT a int, OUT b int, IN c int)
      RETURNS record AS $$
      BEGIN
      a := c + 1; b := c + 2;
      RETURN;
      END;
      $$ LANGUAGE plpgsql;

      CREATE TABLE t(c int);
      INSERT INTO t VALUES(10),(20);

      postgres=# SELECT c, foo(c) FROM t;
      c | foo
      ----+---------
      10 | (11,12)
      20 | (21,22)
      (2 rows)

      postgres=# SELECT c, (foo(c)).* FROM t;
      c | a | b
      ----+----+----
      10 | 11 | 12
      20 | 21 | 22
      (2 rows)

      Von hier: http://www.postgres.cz/index.php/PostgreSQL_SQL_Tricks

      Comment

      Working...
      X