Postgresql 使用(param1,param2)执行格式(…)时没有参数$2
我试图在postgres函数中使用(param1,param2,…)功能来使用执行格式(…)。相关的代码片段如下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
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)