使用Sequel在JRuby中存储过程OUT参数

问题描述 投票:0回答:1

我正在尝试在具有输出参数并且还返回游标的DB2数据库中调用存储过程。我可以通过JRuby使用JDBC来完成此操作,但是由于界面更好,我想扩展Sequel来做到这一点。我已经走了这么远:

Sequel::JDBC::Database.class_eval do

  def call_test
    sql = "{call ddd.mystoredproc(?)}"
    result = {}
    synchronize do |conn|
      cps = conn.prepare_call(sql)
      cps.register_out_parameter(1, Types::INTEGER)
      result[:success] = cps.execute
      result[:outparam_val] = cps.get_int(1)
      if result[:success]
        dataset.send(:process_result_set, cps.get_data_set) do |row|
          yield row
        end
      end
      # rescue block
    end
  end

end  

但是,这给我带来了我必须以非常类似于Java的方式使用的ResultSet,但这并不是一个不错的Sequel :: Dataset对象。我知道这段代码没有意义-我只是用它来试验值,所以有一次我返回了结果哈希并查看其中包含的内容。如果我能得到一些有用的东西,我将对其进行清理并使其更加灵活。看起来log_yield方法只是记录sql并将yield记录到块中,所以我不知道其他任何东西如何转换为Sequel :: Dataset。进行类似DB [:ddd__sometable]的操作将返回我可以循环访问的数据集,但是我无法弄清楚底层Java ResultSet的转换方式和转换点,以及如何自行更改。

edit:由于Sequel :: Database可以创建一个虚拟数据集,并且Sequel :: JDBC :: Dataset具有将结果集转换为块的私有方法,因此上述就是我所拥有的现在。这可行,但是我绝对肯定必须有更好的方法。

[Sequel似乎是Ruby最好的数据库库,这就是我尝试使用它的原因,但是如果有比使用直接JDBC更好的替代方法,我也想了解它们。

ruby db2 jruby sequel
1个回答
0
投票

Sequel当前在JDBC上的存储过程中不支持OUT参数,所以您目前正在做的可能是最好的。

© www.soinside.com 2019 - 2024. All rights reserved.