PL/PgSQL在循环内调用函数给出错误

Nee*_*asu 1 postgresql plpgsql

下面的代码正在给出错误,w_add_ax_extra(1, 'k', 'v')之前w_add_ax_extra(some_id, kv.k, kv.v)我将其更改k, v为重现相同的错误

declare
  kv record;
begin
  -- Lines skipped
  for kv in select * from (select (each(extras)).*) as f(k,v) loop
    raise notice 'key=%,value=%',kv.k,kv.v;
    w_add_ax_extra(1, 'k', 'v');
  end loop;
  -- Lines Skipped
end
Run Code Online (Sandbox Code Playgroud)

我收到语法错误但无法理解我错过了什么

ERROR:  syntax error at or near "w_add_ax_extra"
LINE 1: w_add_ax_extra(1, 'k', 'v')
Run Code Online (Sandbox Code Playgroud)

但是如果我这样做的dummy = w_add_ax_extra(1, 'k', 'v')话.是的,这个函数返回一个整数.但我不需要在这里存储它.是否必须保留返回值?

mu *_*ort 6

精细手册:

39.5.2.执行没有结果的命令

[...]

有时,评估表达式或SELECT查询但丢弃结果很有用,例如在调用具有副作用但没有有用结果值的函数时.要在PL/pgSQL中执行此操作,请使用PERFORM语句:

PERFORM query;
Run Code Online (Sandbox Code Playgroud)

强调我的.你不是通过说出f();你需要的东西来调用这个函数,perform f();或者select f() into ...;:

for kv in select * from (select (each(extras)).*) as f(k,v) loop
    raise notice 'key=%,value=%',kv.k,kv.v;
    perform w_add_ax_extra(1, 'k', 'v');
end loop;
Run Code Online (Sandbox Code Playgroud)