将函数参数传递给动态查询字符串
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;
我正在使用 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;