我正在使用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
因此它不是列,而是变量...我如何将其视为变量?
我是否需要将变量转换为字符串变量并将其与选择联系?没有办法查询字符串本身以某种方式解析变量?
谢谢
答案 0 :(得分:1)
最好将其用作参数,这样就不必担心转义值,也不必担心SQL注入:
CREATE FUNCTION media_query.my_test(p_from_timestamp timestamptz)
RETURNS TABLE (moshe timestamptz)
IMMUTABLE AS
$aa$
BEGIN
RETURN QUERY EXECUTE 'select $1' 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;