2013-03-19 43 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)以利用整數算術。