5

在一个处理 MySQL 服务器中大量行的脚本中,我使用dbSendQueryandfetch来限制结果的获取和处理。

当我的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 时,没有第二个循环。

这是可以预料的吗?难道我做错了什么?

4

0 回答 0