0

いくつかの Oracle パフォーマンス テストを実行しようとしています。次のファイルがあります。

orcheck.txt

select * from mf_aj where uid_lo in ('OOO',) or uid_lo in

'OOO'100回複製してから、それぞれをさらに100回複製したいと思いor uid_lo in (...)ます。

File.open('orcheck.txt' , 'r') do |f|
  i = 0
  contents = f.read.gsub("'OOO',") { |m|
    m.sub("'OOO',", (m * 1000))
  }

  theClause = contents[/\((.*)in/]
  contents.gsub(theClause, (theClause * 100))

  contents.gsub("'OOO',") { |m|
    m.sub('OOO', (i += 1).to_s)
  }

  File.write('orcheck.txt', contents.to_s)
end

最初は問題なく動作し、 1000回.gsub複製されます。'OOO'ただし、次の .gsub fortheClauseを int の増加に置き換えると、そう'OOO'ではありません。誰かが私が間違っている場所を理解するのを手伝ってくれますか?

4

2 に答える 2

2

ここで正規表現を使用しても意味がありません。

 > 100.times.collect { |n| "'%03d'" % n }.join(',')
=> "'000','001','002','003','004', etc

したがって:

s = 100.times.collect { |n| "'%03d'" % n }.join(',')
q = "select * from mf_aj where uid_lo in (#{s})"

実際のクエリに合わせて変更し、同様の手法を使用して余分な末尾のin.

残りの部分については、私は困惑しています。Oracle とは何の関係もないテキスト ファイルの作成時間を計っています。IMO、説明から何をしようとしているのかは本当に明確ではありません。

于 2013-11-05T16:09:11.443 に答える
1

この行

  contents.gsub(theClause, (theClause * 100))

変更しませんcontents。変更された文字列を返します。

  contents.gsub!(theClause, (theClause * 100))

contentsただし、それ自体は変更されます。慣例により、! で終わる ruby​​ メソッド。オブジェクトを何らかの方法で変更するメソッドとそうでないメソッドがあります。絶対的なものではありませんが、かなりの確率で当てはまります。

于 2013-11-05T18:06:06.073 に答える