2013-03-05 89 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