【问题标题】:No parameter $2 when using EXECUTE format( ... ) USING (param1, param2)使用 EXECUTE 格式时没有参数 $2 ( ... ) USING (param1, param2)
【发布时间】:2018-08-29 13:24:42
【问题描述】:

我正在尝试在 postgres 函数中使用 EXECUTE format( ... ) USING (param1, param2, ... ) 功能。代码的相关sn-p如下

  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)

在哪里

columnNames[1], param1, & param2

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

DECLARE
param1 ALIAS FOR $1;
param2 ALIAS FOR $2;

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

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

如果相反,如果我将格式化查询字符串中的 $2 替换为硬编码值,并从 USING 子句中删除 param2,它就可以正常工作。起初我以为是语法相关,但看了The accepted answer here

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

【问题讨论】:

    标签: postgresql execute using-statement


    【解决方案1】:

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

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

    【讨论】:

    • 是的,就是这么简单。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多