PostgreSQL - Écrire du sql dynamique dans une procédure stockée qui renvoie un jeu de résultats

Comment puis-je écrire une procédure stockée qui contient un construit dynamiquement instruction SQL qui retourne un jeu de résultats? Voici mon exemple de code:

CREATE OR REPLACE FUNCTION reporting.report_get_countries_new (
  starts_with varchar,
  ends_with varchar
)
RETURNS TABLE (
  country_id integer,
  country_name varchar
) AS
$body$
DECLARE
  starts_with ALIAS FOR $1;
  ends_with ALIAS FOR $2;
  sql VARCHAR;
BEGIN

    sql = 'SELECT * FROM lookups.countries WHERE lookups.countries.country_name >= ' || starts_with ;

    IF ends_with IS NOT NULL THEN
        sql = sql || ' AND lookups.countries.country_name <= ' || ends_with ;
    END IF;

    RETURN QUERY EXECUTE sql;

END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100 ROWS 1000;

Ce code renvoie une erreur:

ERROR:  syntax error at or near "RETURN"
LINE 1: RETURN QUERY SELECT * FROM omnipay_lookups.countries WHERE o...
        ^
QUERY:  RETURN QUERY SELECT * FROM omnipay_lookups.countries WHERE omnipay_lookups.countries.country_name >= r
CONTEXT:  PL/pgSQL function "report_get_countries_new" line 14 at EXECUTE statement

J'ai essayé d'autres façons au lieu de cela:

RETURN QUERY EXECUTE sql;

Voie 1:

RETURN EXECUTE sql;

Chemin 2:

sql = 'RETURN QUERY SELECT * FROM....
/*later*/
EXECUTE sql;

Dans tous les cas, sans succès.

En fin de compte, je veux écrire une procédure stockée qui contient une instruction sql dynamique et qui retourne le résultat de l'instruction sql dynamique.

Postgres' version?

OriginalL'auteur prince | 2012-08-14