![](/img/trans.png)
[英]How to work with a iterator variable on a dynamic select query in PL/pgSQL?
[英]Concatenate variable into dynamic SELECT statement in PL/pgSQL
我想在动态SELECT
语句(即EXECUTE
语句)中使用变量,如下所示:
CREATE OR REPLACE FUNCTION get_factor()
RETURNS TABLE(factor numeric) AS
$BODY$
DECLARE
_query character varying;
_some_condition integer := 50;
_result decimal;
BEGIN
_query := 'SELECT factors.factor_material FROM factors
WHERE factors.condition = _some_condition;';
EXECUTE _query INTO _result;
RETURN QUERY SELECT _result;
END;
我有一个变量_some_condition integer := 50;
并且我想将其值连接到SELECT语句中( ...WHERE factors.condition = _some_condition;
),但是这给了我“列不存在”的错误:
ERROR: column "_some_condition" does not exist LINE 1: ...erial WHERE factors.city_id = _some_cond... ^ CONTEXT: PL/pgSQL function get_factor() line 12 at EXECUTE statement
为什么会出现此错误,以及如何解决? 请记住,我必须使用动态SELECT语句。
由于您尝试传递一个值 (与文字 btw不同),因此您所需要的只是plpgsql EXECUTE
命令的USING
子句 ,如@Craig commented 。
在执行此操作时,请使用RETURN QUERY EXECUTE
简化您的功能:
CREATE OR REPLACE FUNCTION get_factor()
RETURNS TABLE(factor numeric) AS
$func$
DECLARE
_some_condition integer := 50;
BEGIN
RETURN QUERY EXECUTE
'SELECT factor_material
FROM factors
WHERE condition = $1'
USING _some_condition;
END
$func$ LANGUAGE plpgsql;
此示例中的任何内容都不需要动态SQL。 您可以:
RETURN QUERY
SELECT f.factor_material
FROM factors f
WHERE f.condition = _some_condition;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.