0

我正在尝试运行一些 Oracle 性能测试。我有以下文件:

或检查.txt

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

我想复制'OOO'100 次,然后再复制or uid_lo in (...)100 次。

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

第一个.gsub工作正常,并复制了'OOO'1000 次。但是,以下 .gsub 用于theClause并用'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 回答