title: How can I translate date values from Oracle to Excel using Perl's DBI?
body: <p>I am having trouble with a very simple Perl process.  I am basically querying an Oracle database and I want to load it into Excel.  I have been able to use DBIx::Dump and it works.  However, I need to be able to use a variety of Excel formatting tools.  And I think <a href="http://search.cpan.org/dist/Spreadsheet::WriteExcel" rel="nofollow noreferrer">Spreadsheet::WriteExcel</a> is the best module that outputs to Excel that allows me do more formatting. </p>
  
  <p>Below is the code and the error I am getting.  I basically query Oracle, fetch the data, load into an array and try to write to Excel.  For some reason it is doing some kind of comparison and it does not like the data types.  For example, the date is '25-OCT-08'.  The SVP is 'S01'.  It seems to be saying that they are not numeric.  </p>
  
  <p>Error:</p>
  
  <pre><code>Argument "01-NOV-08" isn't numeric in numeric ge &lt;&gt;=&gt; at C:/Perl/site/lib/Spreadsheet/WriteExcel/Worksheet.pm line 3414.
  Argument "01-NOV-08" isn't numeric in pack ge &lt;&gt;=&gt; ge &lt;&gt;=&gt; at C:/Perl/site/lib/Spreadsheet/WriteExcel/Worksheet.pm line 2157.
  </code></pre>
  
  <p>Code:</p>
  
  <pre><code>#!/usr/bin/perl -w 
  
  #Set the Perl Modules
  use strict; 
  use DBI;
  use Spreadsheet::WriteExcel;
  
  
  # Connect to the oracle database
  my $dbh = DBI-&gt;connect( 'dbi:Oracle:xxxx',
                          'xxxx',
                          'xxxx',
                        ) || die "Database connection not made: $DBI::errstr";
  
  
  #Set up Query
  my $stmt = "select 
                                     week_end_date, SVP, RD,
                                      DM, store, wtd_smrr_gain,QTD_SMRR_GAIN,
                                     wtd_bor_gain,QTD_BOR_GAIN,
                                     wtd_cust_gain,QTD_CUST_GAIN,
                                     wtd_CARD_CLOSED_OCT25,QTD_AVG_CARD_CL
                      from 
                            bonus_4Q_store
                      order by
                            store"; 
  
  #Prepare Query
  my $sth = $dbh-&gt;prepare($stmt); 
  
  #Execute Query
  $sth-&gt;execute() or die $dbh-&gt;errstr; 
  
  my( $week_end_date,$SVP,$RD,$DM,$store,
      $wtd_smrr_gain,$QTD_SMRR_GAIN,
      $wtd_bor_gain,$QTD_BOR_GAIN,
      $wtd_cust_gain,$QTD_CUST_GAIN,
      $wtd_CARD_CLOSED_OCT25,$QTD_AVG_CARD_CL);
  
  #binds each column to a scalar reference
  $sth-&gt;bind_columns(undef,\$week_end_date,\$SVP,\$RD,\$DM,\$store,
                     \$wtd_smrr_gain,\$QTD_SMRR_GAIN,
                     \$wtd_bor_gain,\$QTD_BOR_GAIN,
                     \$wtd_cust_gain,\$QTD_CUST_GAIN,
                     \$wtd_CARD_CLOSED_OCT25,\$QTD_AVG_CARD_CL,);
  
  #create a new instance
  my $Excelfile = "/Test_Report.xls"; 
  my $excel = Spreadsheet::WriteExcel-&gt;new("$Excelfile"); 
  my $worksheet = $excel-&gt;addworksheet("WOW_SHEET");
  
  #Create array shell
  my @data;
  
  #Call data and Write to Excel  
  while ( @data = $sth-&gt;fetchrow_array()){ 
      my $week_end_date = $data[0]; 
      my $SVP = $data[1]; 
      my $RD = $data[2]; 
      my $DM = $data[3]; 
      my $store = $data[1]; 
      my $wtd_smrr_gain = $data[2]; 
      my $QTD_SMRR_GAIN = $data[3];
      my $wtd_bor_gain = $data[4];
      my $QTD_BOR_GAIN = $data[5];
      my $wtd_cust_gain = $data[6];
      my $QTD_CUST_GAIN = $data[7];
      my $wtd_CARD_CLOSED_OCT25 = $data[8];
      my $QTD_AVG_CARD_CL = $data[9];
      my $row = 0; 
      my $col = 0; 
      foreach my $stmt (@data) 
      { 
          $worksheet-&gt;write($row++, @data); 
          last; 
      } 
  } 
  
  print "DONE \n"; 
  $sth-&gt;finish(); 
  $dbh-&gt;disconnect();
  </code></pre>