sql >> Databasteknik >  >> RDS >> PostgreSQL

Tabell som ett argument för en PostgreSQL-funktion

Du kan inte skicka en tabell som en parameter, bara namnet på tabellen:

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;

När du skickar ett tabellnamn måste du utföra ett dynamiskt kommando. Du kan bara göra detta i en plpgsql-funktion. Användningen av format() funktion med %I modifierare skyddar mot SQL-injektion. Raderna returneras med RETURN NEXT QUERY fras, återigen med ett dynamiskt kommando.

Observera att denna logik båda infogar en uppsättning poster i tabellen test.out_table och returnerar sedan samma uppsättning poster. Inte säker på om det är det du verkligen vill.




  1. Hur man får de senaste funktionerna i Office 365

  2. Hur släpper man en kolumn i SQL?

  3. SQL Server - Hur man låser en tabell tills en lagrad procedur avslutas

  4. Spara användarmodell i viloläge till Postgres