加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle OCI – 如何在不获取的情况下获取选择集中的行数

发布时间:2021-03-14 20:44:39 所属栏目:百科 来源:网络整理
导读:Noob在这里(关于Oracle和OCI). 我正在编写一个程序来为我的公司做一些任务.在这些任务中,我必须更新oracle数据库以使其与其他操作保持同步. 我想有效地预分配内存以保存在选择集上获取的结果.为了做到这一点,我需要知道选择集中有多少行. 我可以用2个单独

Noob在这里(关于Oracle和OCI).

我正在编写一个程序来为我的公司做一些任务.在这些任务中,我必须更新oracle数据库以使其与其他操作保持同步.

我想有效地预分配内存以保存在选择集上获取的结果.为了做到这一点,我需要知道选择集中有多少行.

我可以用2个单独的陈述来做;首先是SELECT COUNT语句,后跟SELECT语句,但从服务器的角度来看效率很低.我也可以执行我的SELECT语句并在从选择集中获取行时动态分配内存,但从客户端的角度来看这是低效的.

我想简单地执行SELECT语句,并在获取任何行之前,检索选择集中匹配行的数量.

但我找不到具有此信息的属性.
有OCI_ATTR_ROW_COUNT但这是FETCHED的行数,而不是选择集中的总行数.
然后有OCI_ATTR_PARAM_COUNT,告诉你COLUMNS的数量(似乎没用,因为你已经知道你在SQL中要求的列数).

有人知道如何在获取之前获取选择集行数吗?

谢谢
玩笑

解决方法

你不能. Oracle数据库通常不知道查询在获取最后一行之前将返回多少行.

通常,客户端将被设计为从客户端获取特别大小的批量数据,处理这些结果,然后获取下一批数据.例如,大多数PL / SQL GUI应用程序(TOAD,SQL Developer等)将执行查询,获取第一批50或100行,然后等待用户.当用户浏览数据时,客户端将获取下一批,处理该批处理并迭代直到最后一批被使用.您是否可以从内存中丢弃先前的批次,或者是否需要保留它们(以支持用户向后滚动的能力,例如,无需重新执行查询)是您的应用程序需要确定的内容.

当你担心在客户端上动态分配内存时,你担心什么效率低下?这通常是最有效的做事方式.假设您选择合理的批量大小,您将在客户端上请求合理大小的内存块(每个批处理一次或一次,具体取决于您是否需要在本地缓存数据),这非常有效.

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!