2

我有一个以“键”变量为参数的函数。

我想为一系列键值调用此函数。

这个我试过了,不行。。。

BEGIN
for i IN 773..775 LOOP
  test_count(i);
end LOOP;
end;

SQL 错误:错误:“for”第 2 行或附近的语法错误:for i IN 773..775 LOOP

4

3 回答 3

2

@Mihai 已经解释过,您不能在函数或匿名代码块之外使用DO.

您的语法仍然会失败,因为您不能在任何地方调用函数而不注意返回值。如果您想丢弃可能的返回值,请PERFORM在这样的函数中使用(适用于 PostgreSQL 8.3):

创建或替换函数 foo()
  返回无效语言 plpgsql AS
$身体$
开始

对于我在 773 .. 775
环形
   执行test_count (i);
结束循环;

结尾;
$身体$;
于 2012-06-22T23:25:54.547 回答
0

PostgreSQL 8.3 不能运行匿名过程/函数或在过程/函数之外创建变量。

从 version 开始,该DO构造被添加为对匿名过程的支持9.0

您应该在函数中运行代码。因为您收到的错误消息表明这FOR是全局上下文中的意外关键字。

于 2012-06-22T21:38:34.617 回答
0

为您的键使用记录类型

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$;
于 2021-04-29T21:39:49.493 回答