首页 > 解决方案 > 如何创建一个基于 PostgreSQL 中的页面大小和页码计算正确偏移量的函数?

问题描述

我正在尝试在 PostgreSQL 中创建一个函数,该函数将 pageSize 和页码作为参数,并从中计算偏移量。这使分页对我来说更容易。

这是我到目前为止所拥有的:

CREATE OR REPLACE FUNCTION calculate_paging(page_size INT, page_number INT)
    RETURNS INT AS $calculate_paging$
DECLARE
offset INT;
max_int INT = 2147483647;
BEGIN
    offset = CASE WHEN CAST(page_size AS BIGINT) * (page_number - 1) > max_int 
                THEN max_int 
                ELSE page_size * (page_number - 1)
    RETURN offset
END;
$calculate_paging$ LANGUAGE plpgsql;

这不起作用,我不断收到合成错误。但想法是计算偏移量并返回偏移量值。

标签: sqlpostgresqlfunctionpaginationplpgsql

解决方案


不考虑函数的真正目的而只关注语法错误:

CREATE OR REPLACE FUNCTION calculate_paging(page_size INT, page_number INT)
RETURNS INT AS $$
DECLARE max_int INT = 2147483647;
BEGIN
    IF page_size::bigint * (page_number - 1) > max_int THEN 
      RETURN max_int;
    ELSE 
      RETURN page_size * (page_number - 1);
    END IF;    
END;
$$ LANGUAGE plpgsql;

推荐阅读