2016-09-22 59 views
0
EXECUTE format(
'SELECT MAX(sum) 
FROM table 1 
WHERE %s = %s') INTO max_value USING id_column, id_value; 

Getting error: ERROR: operator does not exist: character varying = integer.如何动态地选择进入查询

此外,当我试图运行下面的代码:

update table1 set column2 = max_value + sum; 

我得到另一个错误:

"ERROR: column "max_value" does not exist"

+0

请给我们看你**完成**功能。对于问题的第一部分:您应该使用'%I'作为列名的占位符和值的'%L'。 –

+0

一眼望去 - 您需要在格式()本身之外添加格式()参数值(请参阅https://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-FORMAT) 。其次,使用变量'max_value'进行更新可能会解决第一个问题 - 该变量永远不会从动态SELECT中分配一个值。 –

回答

0

您可以使用此:

CREATE OR REPLACE FUNCTION maxvaloftable() 
RETURNS integer AS 
$BODY$ 

    DECLARE 

resultat integer = 2; 

BEGIN 

resultat= (SELECT MAX(sum) FROM table) ; 

RETURN resultat; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE STRICT 
    COST 100; 
ALTER FUNCTION maxvaloftable() 
OWNER TO postgres; 

update table1 set column2 = (select maxvaloftable()) + sum;