我试图手动执行SQL命令,这样我就可以访问NuoDB中的过程。

我正在使用Ruby on Rails,我正在使用以下命令:

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

“SQL查询”可以是任何SQL命令。

例如,我有一个名为“反馈”的表,当我执行命令时:

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

这只会返回一个“true”响应,而不是发送我所请求的所有数据。

这是在Rails控制台上的输出:

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

我想用它来调用NuoDB中的存储过程,但在调用过程时,这也将返回一个“true”响应。

是否有任何方法我可以执行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;" ) }

上面的代码是一个示例

在数据库连接上执行任意SQL 然后将连接返回到连接池


我用来执行自定义SQL语句的工作命令是:

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

“foo”是SQL语句(即。"SELECT * FROM table")。

该命令将返回一组值作为散列,并将它们放入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过程、函数和数据库视图。


对我来说,我不能让它返回一个哈希值。

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

但是使用exec_query方法是有效的。

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

一旦你得到MySql::Result对象

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

你可以把它转换成行数组

results.to_a

将使数组的这种格式

[[row1][row2]...]