sql >> Database teknologi >  >> RDS >> PostgreSQL

Tabel som argument for en PostgreSQL-funktion

Du kan ikke sende en tabel som en parameter, kun navnet 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 sender et tabelnavn, skal du udføre en dynamisk kommando. Du kan kun gøre dette i en plpgsql-funktion. Brugen af ​​format() funktion med %I modifikator beskytter mod SQL-injektion. Rækkerne returneres ved hjælp af RETURN NEXT QUERY sætning, igen med en dynamisk kommando.

Bemærk, at denne logik begge indsætter et sæt poster i tabel test.out_table og returnerer derefter det samme sæt poster. Ikke sikker på, om det er det, du virkelig ønsker.




  1. SQL - Find sætning, der indsætter specifikke værdier

  2. Brug FILEGROUP_NAME() til at returnere navnet på en filgruppe i SQL Server

  3. Sådan oprettes forbindelse til flere SQL-servere med ét klik (registrerede servere-gruppe) - SQL Server / TSQL-vejledning del 5

  4. Multitenancy-muligheder for PostgreSQL