Ergebnis 1 bis 3 von 3

Thema: Arrayinhalt durch Variable in Funktion ersetzen

  1. #1
    S. Kaiser ist offline Neuer Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    3

    Böse Arrayinhalt durch Variable in Funktion ersetzen

    Hallo ihr Lieben,

    in eine Funktion werden 3 Parameter übergeben "mitarbeiter integer[], vondatum date, bisdatum date", die in einem Recordset benutzt werden müssten. Folgendes funktioniert tadellos:

    for r in EXECUTE 'select fid_mitarbeiter, von, bis from tagebuch.eintrag
    where von between ''' || vondatum || ''' and ''' || bisdatum || '''
    and fid_mitarbeiter = any(array [1, 2, 14])
    group by fid_mitarbeiter, von, bis
    order by fid_mitarbeiter, von;' loop
    end loop;

    Ich komme allerdings nicht weiter, da meine bisherigen Versuche "any(array [1, 2, 14])" durch die Arrayvariable "mitarbeiter" zu ersetzen, gescheitert sind.

    Kann jemand helfen? Im Voraus schon mal vielen Dank.

    Gruß

    Stefanie

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

    Standard

    Zitat Zitat von S. Kaiser Beitrag anzeigen
    Hallo ihr Lieben,

    in eine Funktion werden 3 Parameter übergeben "mitarbeiter integer[], vondatum date, bisdatum date", die in einem Recordset benutzt werden müssten. Folgendes funktioniert tadellos:

    for r in EXECUTE 'select fid_mitarbeiter, von, bis from tagebuch.eintrag
    where von between ''' || vondatum || ''' and ''' || bisdatum || '''
    and fid_mitarbeiter = any(array [1, 2, 14])
    group by fid_mitarbeiter, von, bis
    order by fid_mitarbeiter, von;' loop
    end loop;

    Ich komme allerdings nicht weiter, da meine bisherigen Versuche "any(array [1, 2, 14])" durch die Arrayvariable "mitarbeiter" zu ersetzen, gescheitert sind.

    Kann jemand helfen? Im Voraus schon mal vielen Dank.

    Gruß

    Stefanie
    Ohne es zu testen, denke ich mal, Du mußt beim Array auch so verfahren wie mit den beiden anderen Variablen. Also, aus "fid_mitarbeiter = any(array [1, 2, 14])" müßte werden:

    fid_mitarbeiter = any( ' || mitarbeiter || ')

    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
    S. Kaiser ist offline Neuer Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    3

    Standard

    Vielen Dank für die schnelle Antwort,

    ich hatte auch gedacht, dass es so funktionieren müsste und hatte in der Richtung (fast) alle Varianten versucht.
    Allerdings hätte ich mir die erscheinenden Fehlermeldungen nicht nur ansehen, sondern auch mal gedanklich auseinander pflücken sollen, was ich nach Deinem Hinweis noch mal intensiv gemacht habe und bingo:

    Die richtige Syntax ist:

    ... fid_mitarbeiter = any(''' || mitarbeiter::text || ''') ...

    also drei Apostrophe und ein typecasting auf text. Dies ist seltsamerweise bei den date-Variablen nicht notwendig. Hier erfolgt offensichtlich ein internes typecasting.

    Nochmals vielen Dank für die Hilfe.

    Stefanie

Stichworte

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