Ergebnis 1 bis 3 von 3

Thema: Table Functions mit Parameter aus JOJN

  1. #1
    Registriert seit
    06.10.2006
    Beiträge
    44

    Standard Table Functions mit Parameter aus JOJN

    Hallo,
    laut DOc Kap. 7.2.1.4. Table Functions
    kann ich eine Funktion, die ein setof zurückgibt , wie eine Tabelle verwenden.
    Mein Problem nun ist, dass der Parameter, den ich der Funktion übergeben möchte, eben ein Parameter und damit variabel ist.
    Postgres sagt dann:

    FEHLER: ungültiger Verweis auf FROM-Klausel-Eintrag für Tabelle »op«
    LINE 11: join getsusers(op.schemaname) as us on us.id = user_id;
    ^
    HINT: Es gibt einen Eintrag für Tabelle »op«, aber auf ihn kann aus diesem Teil der Anfrage kein Bezug genommen werden.

    Beispiel:
    ======

    create or replace function getData( name varchar) returns setof blahblah as ( ...)

    Diese Funktion funktioniert, ich kann sie aufrufen mit

    select id, name from getData(123) where blah blah...
    alles OK soweit.

    Jetzt ist der Parameter 123 aber nicht fix sondern kommt aus einem JOIN, Z.B.

    select id, name , xx.nochwas
    from bestellung op
    join getData(op.spalte) as xx on xx... = ...
    where blah blah...


    liefert oben genannte Fehlermeldung.
    Das gleiche passiert, wenn ich das in ein WITH packe, also die Form

    with order_data as (
    select spalte, ... from bestellung
    ...
    )
    select b.spate, xx.nochwas from order_data op
    join getData (op.spalte) ...


    Wenn ich die beiden selects aufrufe und statt des parameters op.spalte einen konkreten Wert übergebe, funktioniert das jeweils.

    Weiß jemand Rat ?
    Rolf


  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von rolf.schaufelberger Beitrag anzeigen
    Hallo,
    laut DOc Kap. 7.2.1.4. Table Functions
    kann ich eine Funktion, die ein setof zurückgibt , wie eine Tabelle verwenden.
    Mein Problem nun ist, dass der Parameter, den ich der Funktion übergeben möchte, eben ein Parameter und damit variabel ist.
    Postgres sagt dann:

    FEHLER: ungültiger Verweis auf FROM-Klausel-Eintrag für Tabelle »op«
    LINE 11: join getsusers(op.schemaname) as us on us.id = user_id;
    ^
    HINT: Es gibt einen Eintrag für Tabelle »op«, aber auf ihn kann aus diesem Teil der Anfrage kein Bezug genommen werden.

    Beispiel:
    ======

    create or replace function getData( name varchar) returns setof blahblah as ( ...)

    Diese Funktion funktioniert, ich kann sie aufrufen mit

    select id, name from getData(123) where blah blah...
    alles OK soweit.

    Jetzt ist der Parameter 123 aber nicht fix sondern kommt aus einem JOIN, Z.B.

    select id, name , xx.nochwas
    from bestellung op
    join getData(op.spalte) as xx on xx... = ...
    where blah blah...


    liefert oben genannte Fehlermeldung.
    Das gleiche passiert, wenn ich das in ein WITH packe, also die Form

    with order_data as (
    select spalte, ... from bestellung
    ...
    )
    select b.spate, xx.nochwas from order_data op
    join getData (op.spalte) ...


    Wenn ich die beiden selects aufrufe und statt des parameters op.spalte einen konkreten Wert übergebe, funktioniert das jeweils.

    Weiß jemand Rat ?
    Rolf

    Mal davon abgesehen, daß Du in Deiner Beschreibung ein INT als VARCHAR-Parameter an die Funktion übergibst denke ich mal, das wird so generell nicht gehen. Dein JOIN, welcher den Parameter liefert, kann ja potentiell auch mehr als einen Record liefern, schon das ist ein Problem. Der HINT im engl. lautet ja auch: "but it cannot be referenced from this part of the query".

    Also, was Du tun kannst, wäre eine Funktion zu schreiben, die das macht. Also, Deine Tabelle zu durchlaufen und für jede Zeile die Funktion aufzurufen, und das dann via RETURN NEXT auszugeben.

    Falls Du einen Weg findest, daß doch noch als PLAIN SQL zu machen würde mich die Lösung sehr interessieren ...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Registriert seit
    06.10.2006
    Beiträge
    44

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Mal davon abgesehen, daß Du in Deiner Beschreibung ein INT als VARCHAR-Parameter an die Funktion übergibst
    Copy & Paste error :-)

    Zitat Zitat von akretschmer Beitrag anzeigen
    Falls Du einen Weg findest, daß doch noch als PLAIN SQL zu machen würde mich die Lösung sehr interessieren ...
    Andreas
    nun, im Moment sehe ich auch keinen Weg wie ich das tun soll. Ich werde das wohl in einer weiteren Funktion zu kapseln.

    Gruß Rolf

Ähnliche Themen

  1. Frage dynamisches SQL bzw. WHERE Parameter möglich?
    Von burning snow im Forum PL/pgSQL
    Antworten: 6
    Letzter Beitrag: 13.01.2012, 09:53
  2. Antworten: 2
    Letzter Beitrag: 08.05.2009, 20:28
  3. Antworten: 4
    Letzter Beitrag: 16.06.2008, 10:42
  4. NOTIFY mit Parameter
    Von tueb im Forum Trigger und Funktionen
    Antworten: 8
    Letzter Beitrag: 05.06.2008, 21:28
  5. Arrays-Aggregate Functions und Searching
    Von forestjoe im Forum PL/pgSQL
    Antworten: 1
    Letzter Beitrag: 22.01.2007, 20:57

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