我有一个以'key'变量作为参数的函数。
我想为一系列键值调用此函数。
我试过这个,没用......
BEGIN
for i IN 773..775 LOOP
test_count(i);
end LOOP;
end;
SQL错误: 错误:“for”处或附近的语法错误 第2行:适用于i IN 773..775 LOOP
答案 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$;