【发布时间】:2021-02-23 13:56:58
【问题描述】:
我使用WITH HOLD 选项创建了一个游标,该选项允许游标用于后续事务。
我想检索游标可以获取的行数。由于由持有的游标表示的行被复制到临时文件或内存区域中,我想知道是否有可能以直接的方式检索该数字,或者唯一的解决方案是获取所有记录以计算它们。
在这种情况下,MOVE FORWARD ALL FROM <cursor> 语句将返回 MOVE x。其中 x 是
号码移动了。结果是写入标准输出的命令标记,我不知道如何在 pgsql 函数中检索该值。 GET DIAGNOSTICS <var> := ROW_COUNT 仅适用于 FETCH,但不适用于 MOVE。
这是一个解决方案,您认为我可以如何改进它? (是否可以使用MOVE 而不是FETCH 来检索x 值?)
-- Function returning the number of rows available in the cursor
CREATE FUNCTION get_cursor_size(_cursor_name TEXT)
RETURNS TEXT AS
$func$
DECLARE
_n_rows int;
BEGIN
-- Set cursor at the end of records
EXECUTE format('FETCH FORWARD ALL FROM %I', _cursor_name);
-- Retrieve number of rows
GET DIAGNOSTICS _n_rows := ROW_COUNT;
-- Set cursor at the beginning
EXECUTE format('MOVE ABSOLUTE 0 FROM %I', _cursor_name);
RETURN _n_rows;
END
$func$ LANGUAGE plpgsql;
非常感谢您的帮助
【问题讨论】:
标签: postgresql plpgsql database-cursor