11

ファイルを解析して個々の SQL ステートメントを取得し、Rails コントローラーから実行する必要があります。

次のコードがあります。

@sql_file = "#{RAILS_ROOT}/lib/evidence_interface_import.sql"   
@sql_stmts_array = File.read(@sql_file).split(";")  

@sql_stmts_array.each_with_index do |sql_stmt,s_index|
   ActiveRecord::Base.connection.execute(sql_stmt)
end

分割により「;」が削除されます SQLの終わりから。「;」を削除しない方法はありますか それでも「;」を使用して分割します。

4

5 に答える 5

16

うん、scanそれ:

'a; b; c;'.scan(/[^;]*;/)
#=> ["a;", " b;", " c;"]

afterを追加することで余分な空白を取り除くことができますが、map(&:strip)おそらくここでは必要ありません。

これは非常に初歩的であり、セミコロンを含む SQL の文字列リテラルのようなものは、これを破ることに注意してください。(例select * from stuff where name = ";";)

于 2012-09-22T01:03:00.157 に答える
6

後読みで正規表現を使用する

split(/(?<=;)/)
于 2012-09-22T02:53:50.310 に答える
4

これは機能します:

@sql_stmts_array = File.read(@sql_file).lines(separator=';')
于 2012-10-11T20:04:36.457 に答える
1

scan適切な正規表現を使用してみてください。これによりsplit、 と同様の結果が得られますが、正規表現を使用しない方法に固執する場合は、配列内の各セルにセミコロンを追加するだけです。

@sql_stmts_array = File.read(@sql_file).split(";").each do |s|
  s << ";"
end
于 2012-09-22T00:46:20.250 に答える