这个
FETCH
PostgreSQL的PL/pgSQL语言中的语句被设计为一次获取一行,而不是多行。为了实现将多行提取到数组中的目标,您需要遍历光标并逐个提取行,然后将它们添加到循环中的数组中。
以下是如何修改代码以实现此目的:
CREATE OR REPLACE FUNCTION func_fetch_many(num INTEGER)
RETURNS integer AS $$
DECLARE
my_cursor CURSOR FOR SELECT a,b,c FROM t_0038;
my_record t_0038%ROWTYPE;
my_array t_0038[]; -- Declare an array of the same type as the cursor query
BEGIN
OPEN my_cursor;
FOR i IN 1..num LOOP -- Loop to fetch 'num' rows
FETCH NEXT FROM my_cursor INTO my_record;
EXIT WHEN NOT FOUND; -- Exit the loop when no more rows are available
my_array := my_array || my_record; -- Append the fetched row to the array
END LOOP;
CLOSE my_cursor;
FOREACH r IN ARRAY my_array LOOP
RAISE NOTICE 'a: %, b: %, c: %', r.a, r.b, r.c;
END LOOP;
RETURN 0;
END;
$$ LANGUAGE plpgsql;
此版本初始化一个空数组my_array,然后将每个提取的行作为数组附加到其中。其余代码与前一版本类似,实现了从光标中提取和处理多行的相同目标。