# Passing an array to DBI statement execute

**URL:** <https://www.ruby-forum.com/t/passing-an-array-to-dbi-statement-execute/62033>\
**Category:** Ruby\
**Created:** [May 30, 2006, 10:28pm UTC](https://www.ruby-forum.com/t/passing-an-array-to-dbi-statement-execute/62033 "2006-05-30T22:28:39Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![paulbutcher](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/a5b964/32.png) [@paulbutcher](https://www.ruby-forum.com/u/paulbutcher)\
**Post date:** [May 30, 2006, 10:28pm UTC](https://www.ruby-forum.com/t/passing-an-array-to-dbi-statement-execute/62033/1 "2006-05-30T22:28:39Z")

</div>

I am trying to write a ruby script that will parse a tab-delimited text  
file  
and load the data into a database table. Here is my script:

require “dbi”

DBI.connect(“DBI:OCI8:mydb”, “myusername”, “mypassowrd”) do |dbh|  
sth = dbh.prepare(“INSERT INTO my\_table VALUES(?, ?, ?, ?, ?, ?, ?, ?,  
?,  
?, ?, ?, ?, ?, ?, ?, ?, ?, ?)”)

f = File.open(“data.txt”, “r”)  
id = 0  
f.each\_line do |line|  
values = [id]  
values.concat line.chomp.split("\t")  
(10…12).each {|x| values[x] = Time.parse(values[x]) unless  
values[x].nil? || values[x].strip == “”}  
sth.execute(values)  
id += 1  
end

end

Unfortunately, when it executes, I get this:

c:/ruby/ruby-1.8.4\_16/lib/ruby/site\_ruby/1.8/oci8.rb:664:in `bindByPos': Not supported type (Array) (ArgumentError) from c:/ruby/ruby-1.8.4_16/lib/ruby/site_ruby/1.8/oci8.rb:664:in`bind\_or\_define’  
from  
c:/ruby/ruby-1.8.4\_16/lib/ruby/site\_ruby/1.8/oci8.rb:530:in`bind_param' from c:/ruby/ruby- 1.8.4_16/lib/ruby/site_ruby/1.8/DBD/OCI8/OCI8.rb:146:in`bind\_param’  
from  
c:/ruby/ruby-1.8.4\_16/lib/ruby/site\_ruby/1.8/dbi/dbi.rb:1110:in`bind_params' from c:/ruby/ruby- 1.8.4_16/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in`each\_with\_index’  
from  
c:/ruby/ruby-1.8.4\_16/lib/ruby/site\_ruby/1.8/dbi/dbi.rb:1110:in`bind_params' from c:/ruby/ruby-1.8.4_16/lib/ruby/site_ruby/1.8/dbi/dbi.rb:776:in`execute’  
from load\_from\_txt.rb:12  
from load\_from\_txt.rb:8  
from  
c:/ruby/ruby-1.8.4\_16/lib/ruby/site\_ruby/1.8/dbi/dbi.rb:590:in`connect' from c:/ruby/ruby-1.8.4_16/lib/ruby/site_ruby/1.8/dbi/dbi.rb:384:in`connect’  
from load\_from\_txt.rb:3

I think the problem is that the execute method expects a varargs, but it  
is  
getting an Array. How do I convert the Array into varargs?
