I am trying to update a table in an Oracle database. I am reading an
input file which has 
the column names for the database as the first record in the file. The
data begins in the second row. I read the first record to pull off the
column names. I create the sql using placeholders. I then read the rest
of the file. At the end of the loop I attempt to perform the 'execute'
using the statement handle of the database. I get the following error.

DBD::Oracle::st execute failed: ORA-01722: invalid number (DBD ERROR:
OCIStmtExecute) at ./ins line 61, <$FH> line 1. 

At the time of the execute @ins = "20", "00002", "Hello, Dolly", "000",
"01", "022" 


# assume sth is a valid statement handle 
# assume $FH is a handle to an opened file 
my $columns = <$FH>; 
# 
# read first record of input file 
# split the column headers 
# 
  my $columnitem; 
  chomp($columns); 
  @ins = split /\|/, $columns; 
  foreach $columnitem (@ins) { 
   $columnitem = "\"".$columnitem."\""; 
  } 
my $formatcolumns=join ( ', ', @ins ); 
my $valstring= join ( ', ' , ('?') x scalar @ins ); 
my $sql= "INSERT INTO $table ( $formatcolumns ) VALUES ( $valstring) "; 
while ( my $line = <$FH> ) 
{ 
# 
# split the data fields 
# 
     chomp($line); 
     my $field; 
     @ins = split /\|/, $line; 
     foreach $field (@ins) { 
        $field = "\"".$field."\","; 
     } 
     chop($ins[-1]); # remove comma from last item in array 
     #the actual sequence 
     $sth->execute(@ins) or $err++; 
} 

Reply via email to