結果セットを返す動的に構築されたSQLステートメントを含むストアドプロシージャを作成するにはどうすればよいですか?これが私のサンプルコードです:
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;
このコードはエラーを返します:
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
私はこれの代わりに他の方法を試しました:
RETURN QUERY EXECUTE sql;
方法1:
RETURN EXECUTE sql;
方法2:
sql = 'RETURN QUERY SELECT * FROM....
/*later*/
EXECUTE sql;
すべての場合で成功しませんでした。
最終的には、動的SQLステートメントを含み、動的SQLステートメントから結果セットを返すストアドプロシージャを作成したいと思います。