0

10,000 回の反復ごとに実行するコードがあります。私はif i % 10000 == 0何かをするようなモジュラスを使用しています。コード内に( ) の下の「何か」が表示pg_conn.exec functionされますが、私の質問は、最後の残りの反復に対しても pg_conn.exec を実行する必要があるということです。どうやってやるの?私のプログラムは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
4

2 に答える 2

1

ブロックの外でコードをもう一度呼び出すだけです。ifブロック内でSQL文字列をリセットすることを忘れないでください:)

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
于 2013-03-19T15:57:36.690 に答える
0

がどこから来ているのかコードブロックからは明らかではありませんが、残りのグループにいるかどうかを認識できるようにするにはi、 の最大値がどうなるかを知る必要があります。imax_i を手に入れることができると仮定すると、 currentifをに置き換えて、if i % 10000 == 0 || i > ((max_i / 10000) * 10000)整数演算を活用します。

于 2013-03-19T18:29:08.347 に答える