Rob*_* P. 3 database oracle paging pagination
我在Oracle中发现了许多分页示例.我现在使用的特定内容看起来像这样:
SELECT * FROM (
SELECT a.*, ROWNUM RNUM FROM (
**Select * From SomeTable**) a
WHERE ROWNUM <= 500) b
WHERE b.RNUM >= 1
Run Code Online (Sandbox Code Playgroud)
粗体的行代表"原始"查询.SQL的其余部分是实现分页.我遇到的问题是一个完全有效的查询; 当我把它放在我的分页代码中时会失败.
作为示例 - 此查询将失败:
SELECT TABLE1.*, TABLE1.SomeValue FROM TABLE1
Run Code Online (Sandbox Code Playgroud)
带有不明确的列错误.但是,没有我的额外代码; 它运行得很好.我有大量"已保存"的查询,但我必须确保我的分页解决方案不会使它们失效.
我已经使用SQL Developer作为我的Oracle查询工具,它设法实现分页,即使上面的查询在我将其包装在分页代码中时失败也能正常工作.任何人都可以告诉我他们是如何实现这一目标的吗?
首先,原始查询需要有一个ORDER BY子句才能使寻呼解决方案合理地工作.否则,Oracle为第一页,第二页和第N页返回相同的500行是完全有效的.
SQL Developer不会更改您的查询以实现分页.它只是将完整查询发送到Oracle并使用JDBC对结果进行分页.JDBC客户端应用程序可以指定一个提取大小,该大小控制一次从数据库返回到客户端的行数.然后,客户端应用程序可以等待用户决定转到下一页或执行其他操作,在这种情况下光标将关闭.
SQL Developer方法是否有意义在很大程度上取决于应用程序的体系结构.如果您尝试在无状态Web应用程序中分页数据,它可能不起作用,因为您不会在多个页面请求中保持数据库会话打开.另一方面,如果你有一个胖客户端应用程序与专用的Oracle数据库连接,这是非常合理的.