【问题标题】:How to dynamically select into query如何动态选择进入查询
【发布时间】:2016-10-06 08:47:00
【问题描述】:
EXECUTE format(
'SELECT MAX(sum) 
FROM  table 1
WHERE %s    =   %s') INTO max_value USING id_column, id_value;

得到错误:错误:运算符不存在:字符变化= 整数。

另外,当我尝试运行以下代码时:

update table1 set column2 = max_value + sum;

我收到另一个错误:

“错误:列“最大值”不存在”

【问题讨论】:

  • 请向我们展示您的完整功能。对于问题的第一部分:您应该使用 %I 作为列名的占位符,并使用 %L 作为值。
  • 一目了然——您需要在 format() 内部而不是外部添加 format() 参数值(请参阅postgresql.org/docs/current/static/…)。其次,您使用变量max_value 的更新可能正在处理第一个问题——这个变量永远不会从动态 SELECT 中分配值。

标签: sql postgresql postgresql-9.4


【解决方案1】:

你可以用这个:

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;

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多