【发布时间】:2018-07-26 08:24:49
【问题描述】:
我正在我们的一个使用 OFFSET x ROWS FETCH NEXT y ROWS ONLY 功能的 oracle sql 调用中编写分页功能,但我无法思考如何在不使用重复数字的情况下调用它。
目前我在 C# 端做这样的事情,_currOffset 是 x 和 _nextOffset 是 y。
private int _currOffset = 0;
private int _maxFetchCount = 499;
private int _maxOffset = 2020;
private int _nextOffset = 0;
while(_currOffset < _maxOffset) {
// If we are going to go over _maxOffset, just take the difference
_nextOffset = (_currOffset + _maxFetchCount > _maxOffset) ? _maxOffset - _currOffset : _maxFetchCount;
// Call Database using _currOffset and _nextOffset
// .... OFFSET _currOffset ROWS FETCH NEXT _nextOffset ROWS ONLY
_currOffset += _nextOffset + 1;
}
这对于两次迭代都可以正常工作,因为_currOffset 将是0,_nextOffset 将是499,_currOffset 是500,_nextOffset 仍然是499第二次迭代。
对于第三次迭代,_currOffset 现在是501,这是错误。它应该保留为1 + <the last offset I ended with>。
我基本上想在不重复偏移的情况下分块查询。
从
0查询到499从
500查询到999从
1000查询到1499从
1500查询到1999从
1999查询到2020(在这种情况下,if条件将_nextOffset设置为21)
如何更改我的变量分配来处理这个问题?我不能只删除_currOffset += _nextOffset + 1,因为我会在我的sql 查询中两次查询相同的偏移量。 (第一次迭代我会以499 结尾,第二次迭代我会以499 开头,而第二次迭代我想以500 开头)
【问题讨论】:
-
创建一个你期望代码做什么的心智模型。然后,开始调试。一步一步,逐行。在每一行执行之前,问问自己“我希望这行代码做什么?”。然后运行它。它这样做了吗?如果没有,那就是你的错误。
-
您的 maxFetchCount 是 500,但您的第一个块 (0-500) 是 501 项。
-
@hatchet 你说得对,我想进入
500的大块,而不是0。
标签: c# loops pagination