将变量连接到 PL/pgSQL 中的动态 SELECT 语句
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;
) 中,但是这给了我一个 "column does no exist" 错误:
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 语句。
由于您试图传递 value(这与 literal, 顺便说一句), 你只需要 USING
clause of the plpgsql EXECUTE
command, like .
同时,使用 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 = '
USING _some_condition;
END
$func$ LANGUAGE plpgsql;
此示例中的任何内容都不需要动态 SQL。你可以:
RETURN QUERY
SELECT f.factor_material
FROM factors f
WHERE f.condition = _some_condition;
我想在动态 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;
) 中,但是这给了我一个 "column does no exist" 错误:
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 语句。
由于您试图传递 value(这与 literal, 顺便说一句), 你只需要 USING
clause of the plpgsql EXECUTE
command, like
同时,使用 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 = '
USING _some_condition;
END
$func$ LANGUAGE plpgsql;
此示例中的任何内容都不需要动态 SQL。你可以:
RETURN QUERY
SELECT f.factor_material
FROM factors f
WHERE f.condition = _some_condition;