续集中的存储过程返回码(Ruby ORM)

时间:2012-10-01 14:06:35

标签: ruby sequel

在MS SQL Server中,存储过程可以返回一个名为return code的整数值,以指示过程的执行状态。

Sequel是否支持这个?

my_stored_proc.call()返回的值与我在SQL中返回的整数不匹配。还有其他方法可以访问它吗?

2 个答案:

答案 0 :(得分:3)

现在使用call_mssql_proc方法从Sequel版本4.6支持此功能:

DB.call_mssql_sproc(:SequelTest, {:args => ['Input String', :output]})

> {:result => 0, :numrows => 1, :var1 => "1"}

结果将在:result元素中。

阅读" Stored Procedures in MSSQL"更多。

答案 1 :(得分:2)

Jeremy Evans对Sequel Talk Google Group的回应是:

  

不幸的是,Sequel对存储过程的支持相当有限。我不相信它支持返回代码或输入/输出变量。它的设计与准备好的语句支持类似,其中delete / update返回受影响的行数,并选择yield rows。

     

如果Sequel的支持不能满足您的需求,请使用Database#synchronize来获取底层数据库连接,并使用连接的API直接操作(这取决于所使用的驱动程序)。

Getting the Return Value from JDBC MSSQL”描述了如何从Java角度进行操作。

而且,这是一个(工作)第一次尝试Ruby实现:

return_code = @db.synchronize do |conn|
  stmnt = conn.prepareCall('{ ? = call dbo.sp_sequel_test() }')
  stmnt.registerOutParameter(1, java::sql::Types::INTEGER)
  stmnt.execute
  # output parameters have not yet been processed, must call getMoreResults() first.
  stmnt.getMoreResults  
  stmnt.getInt(1)
end