Нет параметра $ 2 при использовании формата EXECUTE (...) USING (param1, param2) - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь использовать функцию EXECUTE format (...) USING (param1, param2, ...) в функции postgres. Соответствующий фрагмент кода выглядит следующим образом

  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 в отформатированной строке запроса на жестко закодированное значение и избавлюсь от param2 из условия USING, все будет работать нормально. Сначала я думал, что это связано с синтаксисом, но, посмотрев на Принятый ответ здесь

например, я не вижу проблем с моим синтаксисом. Любое предложение здесь будет с благодарностью, спасибо.

1 Ответ

0 голосов
/ 29 августа 2018

Вы передаете строку (param1, param2) в качестве первого параметра и затем не имеете второго параметра. Если вы замените $2 на жестко закодированное значение и оставите (param1, param2), вы увидите, что он передает строку в $1 вместо param1.

Что вам нужно сделать, это: USING param1, param2 без скобок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...