gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:19:52 26 4
gpt4 key购买 nike

这里的菜鸟(关于 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 行,然后等待用户。当用户翻阅数据时,客户端将获取下一批,处理它并迭代直到最后一批被消耗。您是否可以从内存中丢弃之前的批处理,或者是否需要保留它们(以支持用户向后滚动的能力,例如,无需重新执行查询)是您的应用程序需要确定的事情。

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

关于Oracle OCI - 如何在不获取的情况下获取选择集中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30333629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com