sql调用函数在循环中多次。 postgres 8.3

时间:2012-06-22 21:31:27

标签: sql postgresql

我有一个以'key'变量作为参数的函数。

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

我试过这个,没用......

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

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

3 个答案:

答案 0 :(得分:1)

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

您的语法仍然会失败,因为您无法在不处理返回值的情况下在任何地方调用函数。如果要丢弃可能的返回值,请在这样的函数中使用PERFORM(与PostgreSQL 8.3一起使用):

CREATE OR REPLACE FUNCTION foo()
  RETURNS void LANGUAGE plpgsql AS
$BODY$
BEGIN

FOR i IN 773 .. 775
LOOP
   PERFORM test_count(i);
END LOOP;

END;
$BODY$;

答案 1 :(得分:0)

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

DO版本作为版本9.0的匿名程序的支持而添加。

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

答案 2 :(得分: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$;