在一个处理 MySQL 服务器中大量行的脚本中,我使用dbSendQuery
andfetch
来限制结果的获取和处理。
当我的fetch
命令准确检索结果集中可用(或剩余)的行数时,留下 0 行要获取,dbHasCompleted
返回FALSE
而我期望它返回TRUE
。
query <- "select record_id, name
from big_table left join another_table using (record_id)
limit 500"
resultset <- dbSendQuery(con, query) # con: DB connection
while(!dbHasCompleted(resultset)) {
input <- fetch(resultset, n = 500)
print(paste("Rows fetched:", nrow(input)))
# process input ...
}
我希望这个循环运行一次,但是在处理之后有一个额外的运行,print
再次被调用:
Rows fetched: 500
...
Rows fetched: 0
显然,dbHasCompleted(resultset)
当获取可用行的确切数量时是错误的(对于 n = 1000、2000、3000 观察到相同的行为)。在此脚本中 n = 501 时,没有第二个循环。
这是可以预料的吗?难道我做错了什么?