首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择并计数相同的记录

选择并计数相同的记录
EN

Stack Overflow用户
提问于 2015-03-12 17:45:58
回答 2查看 58关注 0票数 1

在我的存储过程中,我有两个查询:

这里,rec_count是out参数,cursor_name是out参数。

代码语言:javascript
运行
复制
open cursor_name for
select <col list> from <table1 join table2 inner join...> on <join conditions> where <conditions>;

select count(*) into rec_count from <table1 join table2 inner join...> on <join conditions> where <conditions>;
  • 是否有一种方法,我可以做选择和计数在一起,因为我提供相同的连接条件,并在哪里子句再次?
  • 这会影响性能还是SQL优化器将优化这两个查询?
EN

回答 2

Stack Overflow用户

发布于 2015-03-12 17:53:53

你可以像这样对整个数据进行分析计数-

代码语言:javascript
运行
复制
OPEN cursor_name for
   SELECT <col_list> , 
          count(*) over () as cnt 
   from <tables> <join conditions> <where clauses>;

这样,游标将有一个列,其中包含每一行中所有行的计数。

票数 1
EN

Stack Overflow用户

发布于 2015-03-12 18:07:45

有比你想象的更大的问题在这里。

如果另一个会话提交了一个事务,同时打开游标并选择count,该怎么办?显然,游标的行的count将与选择的count(*)查询不匹配。

直到获取最后一行时,Oracle才知道行数。

如果您想要精确的行数,那么我将坚持在您现有的游标查询中使用analytic count(*) over()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29016759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档