我有一个以“键”变量为参数的函数。
我想为一系列键值调用此函数。
这个我试过了,不行。。。
BEGIN
for i IN 773..775 LOOP
test_count(i);
end LOOP;
end;
SQL 错误:错误:“for”第 2 行或附近的语法错误:for i IN 773..775 LOOP
我有一个以“键”变量为参数的函数。
我想为一系列键值调用此函数。
这个我试过了,不行。。。
BEGIN
for i IN 773..775 LOOP
test_count(i);
end LOOP;
end;
SQL 错误:错误:“for”第 2 行或附近的语法错误:for i IN 773..775 LOOP
@Mihai 已经解释过,您不能在函数或匿名代码块之外使用DO
.
您的语法仍然会失败,因为您不能在任何地方调用函数而不注意返回值。如果您想丢弃可能的返回值,请PERFORM
在这样的函数中使用(适用于 PostgreSQL 8.3):
创建或替换函数 foo() 返回无效语言 plpgsql AS $身体$ 开始 对于我在 773 .. 775 环形 执行test_count (i); 结束循环; 结尾; $身体$;
PostgreSQL 8.3 不能运行匿名过程/函数或在过程/函数之外创建变量。
从 version 开始,该DO
构造被添加为对匿名过程的支持9.0
。
您应该在函数中运行代码。因为您收到的错误消息表明这FOR
是全局上下文中的意外关键字。
为您的键使用记录类型
DO $BODY$
DECLARE tmp_row record;
BEGIN
FOR tmp_row IN (SELECT key from my_keys_table)
LOOP
PERFORM test_function(tmp_row.key);
END LOOP;
END;
$BODY$;