繁体   English   中英

在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; ),但是这给了我“列不存在”的错误:

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM