gpt4 book ai didi

postgresql - PL/PgSQL 在循环中调用一个函数给出错误

转载 作者:行者123 更新时间:2023-11-29 12:31:42 30 4
gpt4 key购买 nike

下面的代码在 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

我收到语法错误,但无法理解我遗漏了什么

ERROR:  syntax error at or near "w_add_ax_extra"
LINE 1: w_add_ax_extra(1, 'k', 'v')

但是,如果我执行 dummy = w_add_ax_extra(1, 'k', 'v') 它会起作用。是的,这个函数返回一个整数。但我不需要将它存储在这里。是否必须保留返回值?

最佳答案

来自fine manual :

39.5.2. Executing a Command With No Result

[...]

Sometimes it is useful to evaluate an expression or SELECT query but discard the result, for example when calling a function that has side-effects but no useful result value. To do this in PL/pgSQL, use the PERFORM statement:

PERFORM query;

强调我的。您不是通过像 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;

关于postgresql - PL/PgSQL 在循环中调用一个函数给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068768/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com