如何制作一个函数,根据 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;

这不起作用,我不断收到 synthax 错误。但是思路是计算offset,返回offset值。

解决方法

不考虑函数的真正用途,只关注语法错误:

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;