问题描述
我正在尝试在 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;