在处理MySQL服务器中的大量行的脚本中,我使用dbSendQuery并fetch限制取得和处理结果.
当我的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 ...
}
Run Code Online (Sandbox Code Playgroud)
我希望这个循环运行一次,但是在处理之后有一个额外的运行,print再次调用:
Rows fetched: 500
...
Rows fetched: 0
Run Code Online (Sandbox Code Playgroud)
显然,dbHasCompleted(resultset)在获取可用行的确切数量时为false(对于n = 1000,2000,3000,观察到相同的行为).在此脚本中n = 501时,没有第二个循环.
这是预期的吗?难道我做错了什么?