1. ホーム
  2. sql

[解決済み] Ruby On Rails で NuoDB を使用して SQL コマンドを手動で実行する方法

2022-02-05 23:11:03

質問

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

Ruby on Railsを使っていて、以下のコマンドを使っています。

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

SQLクエリには、任意のSQLコマンドを指定することができます。

例えば、私は "Feedback" という名前のテーブルを持っていて、コマンドを実行すると。

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

この場合、要求されたすべてのデータを送信するのではなく、"true"のレスポンスを返すだけです。

これは、Railsコンソール上の出力です。

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

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

SQLコマンドを実行して、"true"のレスポンスを得る代わりに、要求されたデータを取得する方法はありますか?

どのように解決するのですか?

カスタムSQL文の実行に使っている作業用コマンドは。

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

はSQL文(例: "SELECT * FROM table")で、"foo"はSQL文です。

このコマンドは、一連の値をハッシュとして返し、results変数に格納します。

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