我有一些代码每10,000次迭代执行一次。
我正在使用模数if i % 10000 == 0
然后做一些事情。你在代码中看到了下面的“东西”(pg_conn.exec function
),但无论如何我的问题是,pg_conn.exec需要在最后剩余的迭代中完成,实际上可能无法由10,000平均设计。我怎样才能做到这一点?我的程序执行pg_conn.exec
函数5次,因此变量i
等于50000.该程序总共需要56,000次迭代。我如何处理剩余的6,000次迭代?
conn.query("select * from my_tbl") do |r|
sql += "('#{r[:main_id]}', '#{r[:rep_dt]}', '#{r[:create_dt]}')"
if i % 10000 == 0
pg_conn.exec(sql + ';') # important statement that executes only every 10000
end
end
答案 0 :(得分:1)
只需在块外再次调用代码即可。记得在if块中重置你的sql字符串:)
更新:添加了一个检查,以便只有在sql中发生更改时才会执行对pg_conn.exec
的最后一次调用。
base_sql_statement = ... # base sql statement here
sql = base_sql_statement
conn.query("select * from my_tbl") do |r|
sql += "('#{r[:main_id]}', '#{r[:rep_dt]}', '#{r[:create_dt]}')"
if i % 10000 == 0
pg_conn.exec(sql + ';') # important statement that executes only every 10000
sql = base_sql_statement
end
end
if sql != base_sql_statement
pg_conn.exec(sql + ';')
end
答案 1 :(得分:0)
您的代码块中不清楚i
来自何处,但您需要知道i
的最大值是什么才能识别您是否是在其余组中与否。假设您可以使用max_i,请将当前if
替换为if i % 10000 == 0 || i > ((max_i / 10000) * 10000)
以利用整数运算。