将函数参数传递给动态查询字符串

passing function parameters to dynamic query string

我正在使用 PostGreSQL 11.4,刚开始使用动态查询,但我遗漏了一些东西。我想在查询中使用函数参数,但我做错了。

这是我的:

create or replace function media_query.my_test(p_from_timestamp timestamptz) RETURNS TABLE (moshe timestamptz) as
$aa$
BEGIN
    RETURN QUERY EXECUTE 'select p_from_timestamp as moshe';
END $aa$ LANGUAGE plpgsql;

当我执行 select * from media_query.my_test(now()); 时出现错误 column "p_from_timestamp" does not exist

所以它不是一个列,而是一个变量...我如何将其视为一个变量?

是否需要将变量转换为字符串变量并将其联系到 select?查询字符串本身无法以某种方式解析变量?

谢谢

最好把它作为参数使用,这样你就不用为转义值而烦恼,也不用担心SQL注入:

CREATE FUNCTION media_query.my_test(p_from_timestamp timestamptz)
   RETURNS TABLE (moshe timestamptz)
   IMMUTABLE AS
$aa$
BEGIN
    RETURN QUERY EXECUTE 'select ' USING p_from_timestamp;
END;$aa$
LANGUAGE plpgsql;

如果您的目标是尝试从文字构造查询字符串,请执行以下操作:

CREATE FUNCTION media_query.my_test(p_from_timestamp timestamptz)
   RETURNS TABLE (moshe timestamptz)
   IMMUTABLE AS
$aa$
BEGIN
    RETURN QUERY EXECUTE format('select %L', p_from_timestamp);
END;$aa$
LANGUAGE plpgsql;