使用 EXECUTE format( ... ) USING (param1, param2) 时没有参数 $2

No parameter $2 when using EXECUTE format( ... ) USING (param1, param2)

我正在尝试在 postgres 函数中使用 EXECUTE format( ... ) USING (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(,)
                        group by attr
                        order by agg desc ) x', columnNames[1])
  USING (param1, param2)

在哪里

columnNames[1], param1, & param2

之前在函数中定义过。事实上,param1 和 param2 是函数的输入,并在函数体的开头声明(如果相关的话)。

DECLARE
param1 ALIAS FOR ;
param2 ALIAS FOR ;

当然,我并没有实际调用参数的 param1 或 2,schema_name.seperate_function 也不是这段代码所引用的实际函数名称。无论如何,当我执行此操作时,出现以下错误:

ERROR:  there is no parameter 
LINE 4: ...      from schema_name.seperate_function(,)

相反,如果我将格式化查询字符串中的 $2 替换为硬编码值,并从 USING 子句中删除 param2,则效果很好。最初,我认为它与语法相关,但在查看 The accepted answer here

之后

例如,我没有发现我的语法有任何问题。如有任何建议,我们将不胜感激,谢谢。

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

你需要做的是:USING param1, param2没有括号。