sql在循环中多次调用函数。博士后8.3

sql在循环中多次调用函数。博士后8.3,sql,postgresql,Sql,Postgresql,我有一个以“key”变量作为参数的函数 我想为一系列键值调用此函数 我试过了,没用 BEGIN for i IN 773..775 LOOP test_count(i); end LOOP; end; SQL错误: 错误:“for”处或附近出现语法错误 第2行:对于773..775循环中的i,PostgreSQL 8.3无法运行匿名过程/函数或在过程/函数之外创建变量 从版本9.0开始,该构造被添加为对匿名过程的支持 您应该在函数中运行代码。因为您收到的错误消息指出,的在全局上下文中是一个

我有一个以“key”变量作为参数的函数

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

我试过了,没用

BEGIN
for i IN 773..775 LOOP
  test_count(i);
end LOOP;
end;
SQL错误: 错误:“for”处或附近出现语法错误
第2行:对于773..775循环中的i,PostgreSQL 8.3无法运行匿名过程/函数或在过程/函数之外创建变量

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


您应该在函数中运行代码。因为您收到的错误消息指出,的
在全局上下文中是一个意外的关键字。

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

您的语法仍然会失败,因为如果不考虑返回值,就无法在任何地方调用函数。如果要放弃在类似这样的函数中使用的可能返回值(适用于PostgreSQL 8.3):

创建或替换函数foo() 返回无效语言plpgsql作为 $BODY$ 开始 因为我在773年。。775 环 进行测试计数(i); 端环; 结束; $BODY$;
使用记录键入您的密钥

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$;

不起作用
不是有效的Postgres错误消息。SQL错误:错误:语法错误位于或接近“for”行2:for i IN 773..775LOOP@a_horse意味着你应该更新你的问题并提到错误消息。如果是在评论中,任何试图回答你问题的人都必须阅读每一条评论,才能找到一些零碎的信息。正如其他人所指出的,在9.0或9.1版(或9.2版,应该在今年夏天晚些时候发布)中,这会更容易。8.3版将在大约8个月后结束使用。当你升级时,你应该强烈地考虑跳过8.4和9,到9.1或更晚。只是不是他用的那个过时的版本。我正在更新答案,我忘了提到9+中的
DO
构造确实。@a_horse_,没有名字-等等,PG的哪个版本有效?我已经在我的答案和我的评论中说明了这一点。版本>9。@MihaiStancu:PostgreSQL中的主要版本以数字的前两部分命名,即
8.4
9.0
9.1
。。。严格地说,没有“版本9”这样的东西。读一下这里。DO声明已在会议上宣布。
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$;