web-dev-qa-db-ja.com

NuoDBを使用してRubyのRailsでSQLコマンドを手動で実行するにはどうすればよいですか

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

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

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

「SQLクエリ」には、任意のSQLコマンドを使用できます。

たとえば、「フィードバック」というテーブルがあり、コマンドを実行すると次のようになります。

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

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

これはRails Consoleの出力です:

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

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

とにかく、SQLコマンドを実行し、「true」応答を取得する代わりに、要求されたデータを取得できますか?

99

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

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

「foo」がsqlステートメント(つまり、「SELECT * FROM table」)である。

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

だから私のRails 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プロシージャ、関数、およびデータベースビューも呼び出すことができます。

126

私にとっては、これを取得してハッシュを返すことができませんでした。

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

しかし、exec_queryメソッドの使用は機能しました。

results = ActiveRecord::Base.connection.exec_query(sql)
89
Tim Park

同様の問題を抱えている他の人を支援するために、フォーラムから回答を再投稿します。

@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end
21
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }

上記のコードは、例です

  1. データベース接続で任意のSQLを実行する
  2. その後、接続を接続プールに戻す
17