175

NuoDB のプロシージャにアクセスできるように、SQL コマンドを手動で実行しようとしています。

Ruby on Rails を使用しており、次のコマンドを使用しています。

ActiveRecord::Base.connection.execute("SQL query")

「SQL クエリ」は、任意の SQL コマンドである可能性があります。

たとえば、「フィードバック」というテーブルがあり、コマンドを実行すると:

ActiveRecord::Base.connection.execute("SELECT `feedbacks`.* FROM `feedbacks`")

これは、要求されたすべてのデータを送信する代わりに、「真」の応答のみを返します。

Rails コンソールの出力は次のとおりです。

SQL (0.4ms)  SELECT `feedbacks`.* FROM `feedbacks`
 => true

これを使用して NuoDB のストアド プロシージャを呼び出したいのですが、プロシージャを呼び出すと、これも「true」応答を返します。

「真の」応答を得る代わりに、SQL コマンドを実行して要求されたデータを取得できる方法はありますか?

4

5 に答える 5

197

カスタム SQL ステートメントを実行するために使用している作業コマンドは次のとおりです。

results = ActiveRecord::Base.connection.execute("foo")

「foo」はSQLステートメントです(つまり、「SELECT * FROM table」)。

このコマンドは一連の値をハッシュとして返し、結果変数に入れます。

したがって、レールのapplication_controller.rbにこれを追加しました:

def execute_statement(sql)
  results = ActiveRecord::Base.connection.execute(sql)

  if results.present?
    return results
  else
    return nil
  end
end

execute_statement を使用すると、見つかったレコードが返され、何もない場合は nil が返されます。

このようにして、次のように Rails アプリケーションのどこでも呼び出すことができます。

records = execute_statement("select * from table")

「execute_statement」は、NuoDB のプロシージャ、関数、およびデータベース ビューも呼び出すことができます。

于 2015-05-27T05:40:25.037 に答える
28
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }

上記のコードは、

  1. データベース接続で任意の SQL を実行する
  2. その後、接続を接続プールに戻す
于 2015-04-22T22:17:41.323 に答える