在处理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 ...
}
我希望这个循环运行一次,但是在处理之后会有额外的运行,再次调用print
:
Rows fetched: 500
...
Rows fetched: 0
显然,当获取确切的可用行数时,dbHasCompleted(resultset)
为false(对于n = 1000,2000,3000,观察到相同的行为)。当在这个脚本中n = 501时,没有第二个循环。
这是预期的吗?我做错了吗?