2013-03-19 48 views
0

我有一些代码执行每10,000次迭代。 我正在使用像if i % 10000 == 0这样的模量,然后做一些事情。你在代码中看到下面的'东西'(pg_conn.exec function),但无论如何,我的问题是,pg_conn.exec需要在最后剩下的迭代中完成,而且实际上可能并不是万分之一。我怎样才能做到这一点?我的程序执行了5次pg_conn.exec函数,因此变量i等于50000.该程序要求总计56000次迭代。我如何处理剩余的6000次迭代?模数操作数在Ruby

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

只是在块之后再调用它 – 2013-03-19 15:57:27

+0

'sql'只是一个字符串,对不对?然后使用'sql <<“...”'而不是'sql + =“...”' – 2013-03-19 16:04:16

回答

1

只是在块外再次调用代码。记得要重置您的SQL字符串内的if块:)

更新:添加一个检查,以便最后一次调用pg_conn.exec将只会执行,如果有什么更改的SQL。

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 
+0

这将对'i = 50000'执行6次'pg_conn.exec'。 – 2013-03-19 15:59:00

+0

hmm然后在执行之前检查sql的值。我要更新我的代码。 – jvnill 2013-03-19 16:00:05

0

这不是从那里i是来自你的代码块清晰,但你需要知道什么i最大值将是能够认识到无论你是剩余组或不。假设您可以使用max_i,则将当前的if替换为if i % 10000 == 0 || i > ((max_i/10000) * 10000)以利用整数算术。