Das geht so nicht in plpgsql. Must halt plperl oder sowas verwenden. Du kannst Dir aber mal Pavel Stehule's blog: Iteration over record in PL/pgSQL anschauen.
Andreas
Hallo,
ich habe das Problem, dass ich bei einer Funktion einen Tabellennamen und einen Spaltennamen übergeben bekomme. Nun werden in einem LOOP die Daten aus einem SELECT über eine RECORD Variable verarbeitet. Eigentlich kein Problem, wenn die Felder des RECORD's fest definiert wären. Leider muß die Funktion so variabel sein, dass man eben den Tabellennamen und den Spaltennamen übergeben kann. Hier mal ein Stück Code um das zu verdeutlichen.
An der Stelle "bar := foo.gid_name;" versucht PG jetzt natürlich auf die Spalte "gid_name" vom "foo" RECORD zuzugreifen. Das geht schief, weil die nich da ist und ich ja in "bar" den Wert der durch "gid_name" benannten Spalte brauche.Code:CREATE OR REPLACE FUNCTION myfunc(tablename character varying, gid_name character varying) RETURNS character varying LANGUAGE plpgsql STRICT AS $$ DECLARE foo record; bar integer; BEGIN FOR foo IN EXECUTE 'SELECT * FROM ' || quote_ident(tablename) LOOP bar := foo.gid_name; EXECUTE 'SELECT blah.* FROM blah, ' || quote_ident(tablename) || ' WHERE blah.id = ' || bar; END LOOP; RETURN ''; END; $$;
Wenn man also einausführt, soll in eigentlich die Funktion einCode:SELECT myfunc('strassen', 'xyzid');ausführen.Code:bar := foo.xyzid;
Bitte nicht weiter über den Sinn der SELECT's nachdenken, das ist nur ein vereinfachtes Beispiel, da die Funktion etwas komplexer ist und ich eine sollche Ersetzung an mehreren Stellen brauche. Und das nicht nur mit einem Parameter.
Danke für eure Ideen und Vorschläge
stargaizer
Das geht so nicht in plpgsql. Must halt plperl oder sowas verwenden. Du kannst Dir aber mal Pavel Stehule's blog: Iteration over record in PL/pgSQL anschauen.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen