Postgresql 使用(param1,param2)执行格式(…)时没有参数$2

Postgresql 使用(param1,param2)执行格式(…)时没有参数$2,postgresql,execute,using-statement,Postgresql,Execute,Using Statement,我试图在postgres函数中使用(param1,param2,…)功能来使用执行格式(…)。相关的代码片段如下 EXECUTE format('select json_agg(json_build_object(''Attribute'', x.attr, ''Aggregate'',x.agg)) from ( select %I as attr, round(sum(value),6) as agg

我试图在postgres函数中使用(param1,param2,…)功能来使用执行格式(…)。相关的代码片段如下

  EXECUTE format('select json_agg(json_build_object(''Attribute'', x.attr, ''Aggregate'',x.agg)) 
                    from 
                     ( select %I as attr, round(sum(value),6) as agg 
                         from schema_name.seperate_function($1,$2)
                        group by attr
                        order by agg desc ) x', columnNames[1])
  USING (param1, param2)
在哪里

以前在函数中定义的。事实上,param1和param2是函数的输入,如果相关,则在函数体的开头声明

DECLARE
param1 ALIAS FOR $1;
param2 ALIAS FOR $2;
当然,我没有实际调用参数的param1或2,schema_name.separate_函数也不是这段代码引用的实际函数名。无论如何,当我执行此操作时,会出现以下错误:

ERROR:  there is no parameter $2
LINE 4: ...      from schema_name.seperate_function($1,$2)
相反,如果我用一个硬编码的值替换格式化查询字符串中的$2,并从使用claus中去掉param2,则效果很好。起初,我认为它与语法有关,但在查看

例如,我认为我的语法没有任何问题。如果您有任何建议,我们将不胜感激。

您正在将行
(param1,param2)
作为第一个参数传递,而没有第二个参数。如果将
$2
替换为硬编码值,并保留
(param1,param2)
,您将看到它正在将行传递到
$1
,而不是
param1

您需要做的是:
使用param1,param2
无括号。

将行
(param1,param2)
作为第一个参数传递,然后没有第二个参数。如果将
$2
替换为硬编码值,并保留
(param1,param2)
,您将看到它正在将行传递到
$1
,而不是
param1


您需要做的是:
使用param1,param2
没有括号。

是的,就这么简单。非常感谢你!是的,就这么简单。非常感谢你!
ERROR:  there is no parameter $2
LINE 4: ...      from schema_name.seperate_function($1,$2)