【发布时间】:2015-07-31 18:05:16
【问题描述】:
这里是新手(关于 Oracle 和 OCI)。
我正在编写一个程序来为我的公司完成一些任务。在这些任务中,我必须更新一个 oracle 数据库以使其与其他操作保持同步。
我想有效地预先分配内存以保存在选择集上获取的结果。为此,我需要知道选择集中有多少行。
我可以用 2 个单独的语句来做到这一点;首先是 SELECT COUNT 语句,然后是 SELECT 语句,但从服务器的角度来看,这是低效的。我也可以只执行我的 SELECT 语句并在从选择集中获取行时动态分配内存,但从客户端的角度来看这是低效的。
我想简单地执行 SELECT 语句,并在获取任何行之前检索选择集中匹配的行数。
但我找不到包含此信息的属性。
有 OCI_ATTR_ROW_COUNT 但这是 FETCHED 的行数,而不是选择集中的总行数。
然后是 OCI_ATTR_PARAM_COUNT,它告诉你 COLUMNS 的数量(似乎没用,因为你已经知道你在 SQL 中请求了多少列)。
有人知道如何在获取之前获取选择集的行数吗?
谢谢 乔什
【问题讨论】:
-
我们在谈论多少数据/行?宿主语言是什么?
-
几个答案说没有办法查询选择集中的行数。谢谢您的回复。我可以使用可滚动光标解决此问题吗?换句话说,我知道选择集中的最大可能行数(表中的行数)。我可以从最大值开始乱序获取行并以二进制搜索方式向下工作,直到确定有多少行?使用二分搜索算法,这不会超过 25 或 30 次获取...
-
我们最小的表有 1 行(实际上有一些是 0,但它们不是很有趣),而我们最大的表有 180 万行。我们的选择集预计通常会在一个典型的表上生成 20 到 50,000 个结果。
标签: oracle select count row oracle-call-interface