2013-03-05 84 views
1

由於某些原因,我在使用紅寶石時遇到了麻煩,我試圖做一個選擇並將結果放入一個數組中,但沒有運氣。Ruby dbi select語句返回BigDecimal?

require 'dbi' 

db = DBI.connect('DBI:OCI8:database', XXXX, XXXX) 

#Gets Consumer Id Number you want to create accounts for 
numberOfAccounts = [] 
puts("Please enter a CID") 
NewCID = gets.chomp() 
numberOfAccounts << db.execute("select T_NBR from T_CBA where C_ID='#{NewCID}'").fetch 

我的陣列結束這樣的:

[[<#BigDecimal:fc115f8,'0.8000169202 2E11',12(16)>]] 

,我想有幾個不同的號碼,如[222,3232,2323]等

我在網上搜索,但無濟於事。

回答

1

基於數據字段,DBI可能確定底層列可能包含的整數太大,無法放入正規的int類型。或者,它可能只是爲所有整數類型使用BigDecimal,以免擔心它。

如果你知道你的值都是小到足以放入一個普通整數,你可以將陣列整數轉換你已經填充後,像這樣:

1.9.3-p194 :014 > numberOfAccounts 
=> [[#<BigDecimal:119cd90,'0.123E3',9(36)>], [#<BigDecimal:119cd18,'0.456E3',9(36)>]] 
1.9.3-p194 :015 > numberOfAccounts.flatten!.collect!(&:to_i) 
=> [123, 456] 
1.9.3-p194 :016 > numberOfAccounts 
=> [123, 456] 
+0

感謝我一堆,這個作品爲了我! – 2013-03-05 19:44:10

+0

在附註中,我期待不止一個結果,我如何獲得所有結果而不是一個結果? – 2013-03-05 19:45:05

+0

我對你是否想要一個數組數組(這是如何構建numberOfAccounts)或單個扁平數組(這是你作爲示例所需的數據)有點困惑。如果你仍然想要一個數組的數組,你可以這樣做:'numberOfAccounts.collect {| row | row.collect(&:to_i)}',這會產生類似'[[123],[456]]'的東西。 – 2013-03-05 19:49:12