PostgreSQL - Schreiben einer dynamischen SQL in eine gespeicherte Prozedur, die eine Ergebnismenge zurückgibt

Wie kann ich eine gespeicherte Prozedur schreiben, die eine dynamisch erstellte SQL-Anweisung enthält, die eine Ergebnismenge zurückgibt? Hier ist mein Beispielcode:

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;

Dieser Code gibt einen Fehler zurück:

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

Ich habe stattdessen andere Wege ausprobiert:

RETURN QUERY EXECUTE sql;

Weg 1:

RETURN EXECUTE sql;

Weg 2:

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

In allen Fällen ohne Erfolg.

Letztendlich möchte ich eine gespeicherte Prozedur schreiben, die eine dynamische SQL-Anweisung enthält und die Ergebnismenge aus der dynamischen SQL-Anweisung zurückgibt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage