问题描述
我有这样的要求:
其中一个数据库表可以有数百万条记录。用户获得一个UI来搜索这些记录。将使用java程序根据搜索条件触发查询。如果搜索条件返回大量记录(假设是可配置的数字) ,在我们知道查询返回大量记录并询问用户是继续查询还是取消查询后,是否有方法取消查询?如果用户说继续,查询执行将继续。否则,将取消该操作,并向用户提供到目前为止找到的结果。
在Oracle中这可能吗?
谢谢你。
子项
其中一个数据库表可以有数百万条记录。用户获得一个UI来搜索这些记录。将使用java程序根据搜索条件触发查询。如果搜索条件返回大量记录(假设是可配置的数字) ,在我们知道查询返回大量记录并询问用户是继续查询还是取消查询后,是否有方法取消查询?如果用户说继续,查询执行将继续。否则,将取消该操作,并向用户提供到目前为止找到的结果。
在Oracle中这可能吗?
谢谢你。
子项
专家解答
可以使用JDBC语句.cancel方法取消查询:
https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#cancel( )
这将在Oracle开始向客户端发送结果之前停止查询。因此,到目前为止您还没有任何结果。如果查询已经完成执行,那么您的代码将获取结果。在这种情况下,您可以手动实现一个检查,一旦您已经读取了至少N行,就会停止检查。
不过,您可能需要的是Top-N查询。这将只返回最多N行。这通常比读取所有行更有效,因为Oracle可以适当地优化查询。
有关详细信息,请阅读:
http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o17asktom-093877.html
https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#cancel( )
这将在Oracle开始向客户端发送结果之前停止查询。因此,到目前为止您还没有任何结果。如果查询已经完成执行,那么您的代码将获取结果。在这种情况下,您可以手动实现一个检查,一旦您已经读取了至少N行,就会停止检查。
不过,您可能需要的是Top-N查询。这将只返回最多N行。这通常比读取所有行更有效,因为Oracle可以适当地优化查询。
有关详细信息,请阅读:
http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o17asktom-093877.html
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




