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

Passez dynamiquement un nom de schéma et un nom de table dans FROM dans une requête de sélection dans Postgres

Vous n'avez pas besoin de ces variables locales pour le schéma et la table. Utilisez l'option de format pour construire les requêtes et EXECUTE pour l'exécuter dynamiquement

CREATE OR REPLACE FUNCTION xx.fn_build_test_(
 IN p_var_archive_schema character varying,
 IN  p_var_archive_table character varying )
 RETURNS record AS
 $BODY$
 DECLARE
  l_var_test VARCHAR[];

 BEGIN

 SELECT  array
  ( SELECT TO_CHAR(column_name,'YYYYMMDD')
    FROM "test_table"
   WHERE col1 = 1
   ) INTO l_var_test;

   EXECUTE format (
     'select col_name FROM %I.%I',
         p_var_archive_schema,p_var_archive_table) 
      --INTO rec_variable;
END;
$BODY$
LANGUAGE plpgsql
VOLATILE SECURITY INVOKER; 

Si vous souhaitez renvoyer le résultat d'une requête dynamique, vous pouvez utiliser

RETURNS TABLE puis faites RETURN QUERY EXECUTE pour renvoyer les résultats de la requête.