2014-10-09 25 views
0

我試圖調用一個DB2數據庫中的存儲過程,該存儲過程具有輸出參數並且還返回一個遊標。我可以通過JRuby使用JDBC完成這項工作,但是由於更好的界面,我想擴展Sequel來完成它。這一步我已經得到了:使用Sequel在JRuby中存儲過程OUT params

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的上下的方式一起工作,雖然不是一個很好的續集:: Dataset對象。我知道這段代碼沒有意義 - 我只是用它來實驗值,所以有一次我返回結果散列並查看它包含的內容。如果我能得到一些有用的東西,我會清理它並使其更加靈活。它看起來像log_yield方法只是將sql和yield記錄到塊中,所以我不知道其他任何東西是如何轉換爲Sequel :: Dataset的。做一些類似於DB [:ddd__sometable]的操作將返回一個我可以循環訪問的數據集,但是我無法弄清楚底層Java ResultSet是如何切換的,以及如何自己做。由於Sequel :: Database可以創建一個虛擬數據集,並且Sequel :: JDBC :: Dataset有一個私有方法來轉換結果集並將其生成一個塊,上面是我所擁有的現在。這是有效的,但我絕對肯定有一個更好的方法。

續集似乎是最好的Ruby數據庫庫,這就是爲什麼我要使用它,但如果有更好的選擇比使用直接JDBC,我也想知道它們。

回答

0

續集目前不支持JDBC上的存儲過程中的OUT參數,所以您目前正在做的可能是最好的。

相關問題