【问题标题】:Stored Procedure return codes in Sequel (Ruby ORM)Sequel 中的存储过程返回码(Ruby ORM)
【发布时间】:2012-09-22 09:31:05
【问题描述】:

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

Sequel 支持这个吗?

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

【问题讨论】:

    标签: ruby sequel


    【解决方案1】:

    现在使用 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”了解更多信息。

    【讨论】:

      【解决方案2】:

      Jeremy Evans 在 Sequel Talk Google Group 上的回应是:

      不幸的是,Sequel 对存储过程的支持相当有限。我不相信它支持返回码或输入/输出变量。它的设计类似于prepared statement 支持,其中delete/update 返回受影响的行数,而select 产生行。

      如果 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-23
        • 2016-01-25
        • 2014-08-04
        相关资源
        最近更新 更多