0

有人知道我在执行 SQL 查询后如何获取返回的元素数(行*列)吗?如果无法做到这一点,那么是否有一些东西可以相对代表我返回的数据大小?

我正在尝试制作一个状态栏,指示我处理了多少返回的数据,所以我想在某个相对接近的地方。有任何想法吗?

请注意,SQLRowCount 仅返回受 UPDATE、INSERT 或 DELETE 语句影响的行数;不是从 SELECT 语句返回的行数(据我所知)。所以我不能将它直接乘以 SQLColCount。

我的最后一个选择是有一个来回显示的状态栏,表示正在处理数据。

4

2 回答 2

2

当您想要保留动态内存来保存整个结果集时,这通常是一个问题。

一种技术是将计数作为结果集的一部分返回。

WITH
data AS
(
    SELECT interesting-data
    FROM   interesting-table
    WHERE  some-condition
)
SELECT COUNT(*), data.*
from data

如果您事先不知道要选择哪些列或使用 *,如上面的示例,则可以从 USER_TAB_COLS 表中选择列数

SELECT COUNT(*)
FROM USER_TAB_COLS
WHERE TABLE_NAME = 'interesting-table'
于 2008-12-08T22:46:58.540 回答
0

如果驱动程序支持,SQLRowCount 可以返回 SELECT 查询的行数。然而,许多驱动程序不这样做,因为服务器计算它可能很昂贵。如果要保证始终有一个计数,则必须使用 COUNT(*),从而强制服务器进行可能耗时的计算(或导致它延迟返回任何结果,直到知道整个结果为止)。

我的建议是尝试 SQLRowCount,以便服务器或驱动程序可以决定行数是否易于计算。如果它返回一个值,则乘以 SQLNumResultCols 的结果。否则,如果返回-1,则使用来回状态栏。有时这会更好,因为您可以看起来对用户更敏感。

于 2009-01-15T00:10:47.537 回答