2013-03-05 4 views
1

У меня возникли проблемы с использованием ruby ​​с dbi по какой-то причине, я пытаюсь сделать выбор и поместить результаты в массив, но не повезло.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

Спасибо Я гроздь, это работает для меня! –

+0

На стороне примечания, я ожидал более одного результата, как мне получить все результаты вместо одного? –

+0

Я был немного смущен вопросом о том, нужен ли вам массив массивов (как это было построено NumberOfAccounts) или один сплющенный массив (это то, что у вас было как ваш желаемый пример). Если вы все еще хотите массив массивов, вы можете сделать это: 'numberOfAccounts.collect {| row | row.collect (&: to_i)} ', что даст что-то вроде' [[123], [456]] '. –

Смежные вопросы