如何在PL/pgSQL中使用cursor实现分页,每次返回5条film表数据
PL/pgSQL函数实现方案
你现有代码存在以下核心问题:
- 操作的表和函数逻辑与需求不符,现有代码查询giuser表,需求是操作film表
- 返回值定义为void但代码尝试返回查询结果,类型不匹配
- 单次拉取条数设置为10,不符合每次返回5条的要求
- 没有实现无参数调用的逻辑
完整可运行代码
-- 无参数版本:返回排序后的前5条数据 CREATE OR REPLACE FUNCTION get_film_batch() RETURNS SETOF film AS $$ BEGIN RETURN QUERY SELECT * FROM film ORDER BY code ASC LIMIT 5; END; $$ LANGUAGE plpgsql; -- 带参数版本:传入上次查询的最后一条code值,返回对应下5条数据 CREATE OR REPLACE FUNCTION get_film_batch(last_code text) RETURNS SETOF film AS $$ BEGIN RETURN QUERY SELECT * FROM film WHERE code > last_code ORDER BY code ASC LIMIT 5; END; $$ LANGUAGE plpgsql;
调用方式
- 首次调用取前5条:
SELECT * FROM get_film_batch(); - 后续分页调用,传入上一次返回结果中最后一条的code值即可,例如:
SELECT * FROM get_film_batch('P_302');
说明
默认按code字段升序排序做分页,如果需要按其他字段(比如上映日期、时长)排序,修改两个函数中ORDER BY后面的字段即可。
内容的提问来源于stack exchange,提问作者R.Vijayakumar
相关产品推荐
相关产品推荐

