【发布时间】:2021-04-27 01:12:49
【问题描述】:
这是一个用于示例目的的简化程序。我遇到的问题是,当我转到应用程序的下一页时,它会带回 5 个,然后是 10 个,然后是 15 个,然后是 10 个。我每次只想带回 5 个。它似乎发生在日期递减时。
procedure GET_DATA( p_sort_col IN VARCHAR2, p_sort_order IN VARCHAR2,
p_page_index IN NUMBER DEFAULT null,
p_page_size IN NUMBER DEFAULT null, p_cursor out l_cursor)
AS
begin
OPEN p_cursor FOR
select * from (
select* from (select rownum rn, Name, DateCol, ROW_NUMBER() Over( ORDER BY
CASE
WHEN p_sort_col = 'Name' and p_sort_order = 'asc' THEN
Name
END ASC,
CASE
WHEN p_sort_col = 'DateCol' and p_sort_order = 'asc' THEN
DateCol
END ASC,
CASE
WHEN p_sort_col = 'Name' and p_sort_order = 'desc' THEN
Name
END DESC,
CASE
WHEN p_sort_col = 'DateCol' and p_sort_order = 'desc' THEN
DateCol
END DESC) from gdpr_document_manager_audit
) where rownum < ((p_page_index * p_page_size) + 1 )
)WHERE rn >= (((p_page_index-1) * p_page_size));
END GET_DATA;
实际查询
【问题讨论】:
-
没有排序的分页没有什么意义。
-
@TheImpaler 它有排序看关键词的顺序?
-
我只能在
ROW_NUMBER()函数中看到ORDER BY。但是,它不会影响结果集的排序。 -
@TheImpaler 实际上是。
-
@TheImpaler 当我进入应用程序的下一页时,它首先对结果集进行排序然后对其进行分页,感谢您的输入,关于分页问题有什么真正有用的建议吗?
标签: sql oracle stored-procedures oracle11g