我正在尝试运行一些Oracle性能测试。我有以下文件:
orcheck.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次。但是,theClause
的以下.gsub并用增加的int替换'OOO'
不会。有人可以帮我弄清楚我哪里出错了吗?
答案 0 :(得分: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的描述中做些什么。
答案 1 :(得分:1)
这一行
contents.gsub(theClause, (theClause * 100))
不会修改contents
。它返回一个修改过的String。
contents.gsub!(theClause, (theClause * 100))
然后会修改contents
。按照惯例,以结尾的ruby方法!是以某种方式修改对象的方法,而其他方法则不是。这不是绝对的,但它确实是一个相当大的时间。