2017-03-02 2 views
0

データベースにテーブルを作成する複数のSQLクエリを含むSQLファイルを実行しているときに問題が発生しています。 dbはDB2です。移行ファイルを作成しました。このファイルでは、sqlファイルを読み込んでそのファイルでSQLクエリを実行します。問題は1つのクエリのみを実行し、そのSQLファイルには1つのテーブルクエリ。railsの移行ファイルを使用してSQLファイルを実行する

コードsnipletは以下の通りですどのようにこの問題を克服するために

任意のアイデア:

enter code here 
class CreateTablesForPoject < ActiveRecord::Migration 
    def change 
    begin 
     user = RailsUser.first 
    rescue => e 
    fixed_patches = %w(CREATETABLES.sql) 

    sql = File.read("db/ddl/#{fixed_patches.first}") 

    statements = sql.split(/;$/) 

    statements.each do |statement| 
     execute(statement) 
    end 
    end 
    end 
end 

注:ファイルの読み取りとクエリの分割は、すべての罰金..ですそれがすべての問題を持っていません移行が実行されてすべての問合せが実行されますが、alter table問合せまたは透過的な表の作成に基づく問合せが失敗すると失敗します。私が感じる問題は、1つのクエリを実行した後にdb接続が切断されるため、テーブルが作成されず、透過テーブル作成のクエリベースが失敗するということです。

+0

あなたはどのようなデバッグ機能を試してみましたか?例えばステートメントへの割り当ての結果は何ですか?その分割文は、あなたが期待しているものを返すのでしょうか? File.readステートメントの場合と同じです。 – margo

+0

@margo:ファイルの読み込みとクエリの分割は問題ありません。問題はありません。 移行はすべてのクエリを実行して実行しますが、alter tableクエリまたは透過テーブルを基にしたクエリ作成に失敗します。 私が感じる問題は、1つのクエリを実行した後にdb接続が切断され、テーブルが作成されず、透過テーブル作成のクエリベースが失敗するということです。 – SRDP

答えて

0

これを試してみてください:

class CreateTablesForPoject < ActiveRecord::Migration 
    def change 
    begin 
     user = RailsUser.first 
    rescue => e 
    fixed_patches = %w(CREATETABLES.sql) 

    sql = File.read("db/ddl/#{fixed_patches.first}") 
    statements = sql.split(/;/) 
    statements.pop # remote empty line 
    ActiveRecord::Base.transaction do 
     statements.each do |statement| 
     connection.execute(statement) 
     end 
    end 
    end 
end 
+0

最初はこのアプローチを試しました – SRDP

関連する問題