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」応答を取得する代わりに、要求されたデータを取得できますか?
カスタム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プロシージャ、関数、およびデータベースビューも呼び出すことができます。
私にとっては、これを取得してハッシュを返すことができませんでした。
results = ActiveRecord::Base.connection.execute(sql)
しかし、exec_queryメソッドの使用は機能しました。
results = ActiveRecord::Base.connection.exec_query(sql)
同様の問題を抱えている他の人を支援するために、フォーラムから回答を再投稿します。
@connection = ActiveRecord::Base.connection
result = @connection.exec_query('select tablename from system.tables')
result.each do |row|
puts row
end
res = ActiveRecord::Base.connection_pool.with_connection { |con| con.exec_query( "SELECT 1;" ) }
上記のコードは、例です