setdatabuffer()によって配列フェッチを使用すると、すべての行をフェッチする方法が最後の左側の行になります。 exampleという名前のテーブルに80405行あります。OcciResultSet resultSet = occi.executeQuery( "select x、y from example");setdatabuffer()によって配列フェッチを使用すると、すべての行をフェッチする方法
const int size = 10000;
double xs[size], ys[size];
ub4 *length = NULL;
resultSet->setDataBuffer(1, &xs[0], oracle::occi::OCCIBDOUBLE, sizeof(xs[0]), length);
resultSet->setDataBuffer(2, &ys[0], oracle::occi::OCCIBDOUBLE, sizeof(ys[0]), length);
int count = 0;
while (resultSet->next(size) == oracle::occi::ResultSet::DATA_AVAILABLE)
{
for (int i = 0; i < size; i++)
{
printf("row: %d\n", ++count);
double x = xs[i];
double y = ys[i];
}
}
は、最初の80000行しかフェッチできません。最後の405行を残し、最後の405行をフェッチする方法。ありがとうございます。
[this](https://docs.oracle.com/cd/B19306_01) /appdev.102/b14294/performance.htm#CHDIDIDE)help?あなたのforループに見られる問題は、 'size'ではなく、i == resultSet-> getNumArrayRows()までiterateする必要があるということです。 'size'はフェッチできる行の最大数です。実際にフェッチされた行の数は少ないので、実際にフェッチされた行数を示す方法があります。 – jeff6times7
@ jeff6times7、はい、resultSet-> getNumArrayRows()は安全です。 'size'は大丈夫です。 oracle pageでのsetdatabuffer()の説明 'これにより、numRows分のデータが各列にフェッチされます。 setDataBuffer()インタフェースで指定されたバッファは、少なくともデータのnumRowを保持するのに十分な大きさでなければなりません。今は唯一の方法です:最初の405行をフェッチし、配列フェッチで最後の800000行をフェッチします。 – ruuut