在Ror4中调用MySQL存储过程
有几个例子,但其中没有一个是非常明确的(或旧版本) 我想调用MySQL过程并检查返回状态(在rails在Ror4中调用MySQL存储过程,mysql,ruby-on-rails,ruby-on-rails-4,rails-activerecord,mysql-5.5,Mysql,Ruby On Rails,Ruby On Rails 4,Rails Activerecord,Mysql 5.5,有几个例子,但其中没有一个是非常明确的(或旧版本) 我想调用MySQL过程并检查返回状态(在rails4.2中)。我看到的最常见的方法是调用result=ActiveRecord::Base.connection.execute(“调用示例\u proc()”),但在一些地方,人们编写了一个准备好的方法result=ActiveRecord::Base.connection.execute\u过程(“存储过程名称”,arg1,arg2)(但它没有编译) 那么,调用并获取MySQL过程状态的正确方
4.2中)。我看到的最常见的方法是调用result=ActiveRecord::Base.connection.execute(“调用示例\u proc()”)
,但在一些地方,人们编写了一个准备好的方法result=ActiveRecord::Base.connection.execute\u过程(“存储过程名称”,arg1,arg2)
(但它没有编译)
那么,调用并获取MySQL过程状态的正确方法是什么呢
编辑:
以及如何安全地发送参数,其中第一个参数是整数、第二个字符串和第三个布尔值 Rails 4ActiveRecord::Base
不支持execute\u过程
方法,尽管result=ActiveRecord::Base.connection
仍然有效。即
result = ActiveRecord::Base.connection.execute("call example_proc('#{arg1}','#{arg2}')")
你可以试试下面的毗瑟奴方法
或
你也可以试试
ActiveRecord::Base.connections.exec_query("call example_proc('#{arg1}','#{arg2}')")
通常,您应该能够在常规的方法中调用存储过程,其中
或为给定模型选择
方法:
YourModel.where("YOUR_PROC(?, ?)", var1, var2)
至于您的评论“底线是,我希望在以后的过程验证中使用最正确的方法(针对警告和错误)”,我想这总是取决于您实际想要实现什么以及您希望代码的可读性
例如,如果希望返回模型属性的行,那么最好将上述语句与where
方法一起使用。另一方面,如果您编写一些sql适配器,那么您可能希望转到ActiveRecord::Base.connection.execute级别
顺便说一句,这里应该提到存储过程性能。在一些数据库中,数据库在存储过程的第一次运行时进行存储过程优化。但是,您传递给第一次运行的参数可能不是以后将更频繁地在其上运行的参数。因此,对于您的案例,您的存储过程可能会以“非最优”的方式自动优化。这可能是也可能不是这样发生的,但是在使用动态PARAMS存储的PROC时应该考虑的事情。一般来说,您应该能够调用一个常规的<代码>中的存储过程,在这里,对于一个给定的模型:或<代码>选择方法:您的模型。(“You-Pro(?,)),VAR1,VAR2)不是更容易吗?或者你有一些额外的要求?正如你所看到的,你们都有不同的方法。如果execute\u过程
被弃用,我想是因为某种原因(更好的方法/新方法)。总之,我希望在以后的过程验证中使用最正确的方法(针对警告和错误)。至于验证部分——因为它是一个过程(不返回值),所以唯一的验证是:通过/失败/警告。虽然它工作正常,但我不确定它是否安全。首先,如果其中一个参数包含”
,则过程将中断。第二,如果其中一个参数是text');从标签中删除代码>-如何安全发送此参数(其中第一个是整数,第二个是字符串,第三个是布尔值)?