PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Tabelle als Argument einer PostgreSQL-Funktion

Sie können keine Tabelle als solche als Parameter übergeben, sondern nur den Namen der Tabelle:

CREATE FUNCTION test.fcttest(tbl text) RETURNS SETOF test.out_table AS $$
BEGIN
  EXECUTE format('INSERT INTO test.out_table '
                   'SELECT id, another_field FROM %I', tbl);
  RETURN QUERY EXECUTE format('SELECT id, another_field FROM %I', tbl);
END;
$$ LANGUAGE plpgsql;

Beim Übergeben eines Tabellennamens müssen Sie einen dynamischen Befehl ausführen. Sie können dies nur in einer plpgsql-Funktion tun. Die Verwendung des format() Funktion mit dem %I Modifikator schützt vor SQL-Injection. Die Zeilen werden mit RETURN NEXT QUERY zurückgegeben Phrase, wieder mit einem dynamischen Befehl.

Beachten Sie, dass diese Logik beides ist fügt eine Reihe von Datensätzen in die Tabelle test.out_table ein und gibt dann denselben Satz von Datensätzen zurück. Ich bin mir nicht sicher, ob du das wirklich willst.