0

SQL クエリを実行した後に返される要素 (rows*cols) の数を取得する方法を知っている人はいますか? それができない場合、返されるデータのサイズを比較的代表するものはありますか?

処理した返されたデータの量を示すステータス バーを作成しようとしているので、比較的近くに表示したいと考えています。何か案は?

SQLRowCount は、UPDATE、INSERT、または DELETE ステートメントの影響を受けた行数のみを返すことに注意してください。SELECT ステートメントから返される行数ではありません (私が知る限り)。したがって、それを SQLColCount に直接掛けることはできません。

私の最後のオプションは、データが処理されていることを示す、前後に移動するステータス バーを持つことです。

4

2 に答える 2

2

これは、結果セット全体を保持するために動的メモリを予約したい場合にしばしば問題になります。

1つの手法は、結果セットの一部としてカウントを返すことです。

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 に答える