PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Table comme argument d'une fonction PostgreSQL

Vous ne pouvez pas passer une table telle quelle en paramètre, uniquement le nom de la table :

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;

Lors du passage d'un nom de table, vous devez exécuter une commande dynamique. Vous ne pouvez le faire que dans une fonction plpgsql. L'utilisation du format() fonction avec le %I modificateur protège contre l'injection SQL. Les lignes sont retournées en utilisant le RETURN NEXT QUERY phrase, toujours avec une commande dynamique.

Notez que cette logique les deux insère un ensemble d'enregistrements dans la table test.out_table puis renvoie le même ensemble d'enregistrements. Je ne sais pas si c'est ce que vous voulez vraiment.