http://www.perlmonks.org?node_id=750561

cocl04 has asked for the wisdom of the Perl Monks concerning the following question:

All, I am trying to load data from a '*.csv' file to Oracle via the Oracle::SQLLoader module in a Windows enviorment. The code will not execute Below is the code. When I run it, I get the following error: Use of uninitialized value in concatenation (.) or string at C:/Perl/site/lib/Oracle/SQLLoader.pm line 576.

Does anyone out there have any suggestions?

Code:

#!/usr/local/bin/perl use strict; use warnings; use diagnostics; use Oracle::SQLLoader qw/$CHAR $INT $DECIMAL $DATE/; ### load a simple comma-delimited file to a single table my $ldr = new Oracle::SQLLoader( infile => 'C:\Sales Report Thru 12 March 2009.csv', terminated_by => ',', username => 'xxxxx', password => 'xxxxx', sid => 'xxxxx' ); $ldr->addTable(table_name => 'testTableName'); $ldr->addColumn(column_name => 'Location_ID'); $ldr->addColumn(column_name => 'Type_Description'); $ldr->addColumn(column_name => 'Type_ID'); $ldr->addColumn(column_name => 'DetailType'); $ldr->addColumn(column_name => 'Amount'); $ldr->executeLoader() || warn "Problem executing sqlldr: \n";

Replies are listed 'Best First'.
Re: Oracle::SQLLoader Error
by ramrod (Curate) on Mar 14, 2009 at 05:02 UTC
    That line in the source code references the environment variable "Oracle_Home" - perhaps that has not been set.
    From the Oracle-SQLLoader README:
    You should have the following environment variables set: ORACLE_HOME - the location of the Oracle installation ORACLE_SID - the database instance name ORACLE_USERID - the username and password to connect to the database + as the format is username/password (e.g. scott/tiger)

      Thank you so much for your input! That worked. I was missing the environment variables. Below is the code that worked.

      #!/usr/local/bin/perl use strict; use warnings; use diagnostics; use Oracle::SQLLoader qw/$CHAR $INT $DECIMAL $DATE/; # Oracle Path $ENV{'ORACLE_HOME'} = "C:/oracle/ora92"; $ENV{'ORACLE_USER'} = "xxxx"; $ENV{'ORACLE_PASS'} = "xxxx"; $ENV{'ORACLE_SID'} = "xxxxx"; my $user = $ENV{'ORACLE_USER'}; my $pass = $ENV{'ORACLE_PASS'}; my $sid = $ENV{'ORACLE_SID'}; ### load a simple comma-delimited file to a single table my $ldr = new Oracle::SQLLoader( infile => 'C:\Sales_Report_Thru_12_March_2009.csv', terminated_by => ',', username => $user, password => $pass, sid => $sid ); $ldr->addTable(table_name => 'fs_bbbs_collections', when_clauses => "WHEN (01) <> 'Location_ID' and (01) <> 'Type_Description' and (01) <> 'Type_ID' and (01) <> 'DetailType' and (01) <> 'ItemCount' and (01) <> 'Amount'"); $ldr->addColumn(column_name => 'Location_ID'); $ldr->addColumn(column_name => 'Type_Description'); $ldr->addColumn(column_name => 'Type_ID'); $ldr->addColumn(column_name => 'DetailType'); $ldr->addColumn(column_name => 'ItemCount'); $ldr->addColumn(column_name => 'Amount'); $ldr->executeLoader(); # stats my $skipped = $ldr->getNumberSkipped(); my $read = $ldr->getNumberRead(); my $rejects = $ldr->getNumberRejected(); my $discards = $ldr->getNumberDiscarded(); my $loads = $ldr->getNumberLoaded(); my $beginTS = $ldr->getLoadBegin(); my $endTS = $ldr->getLoadEnd(); my $runtimeSecs = $ldr->getElapsedSeconds(); my $secsOnCpu = $ldr->getCpuSeconds();
Re: Oracle::SQLLoader Error
by bichonfrise74 (Vicar) on Mar 14, 2009 at 05:04 UTC
    I wonder if there are some 'blank' rows in the csv file? Also, do you see all the data loaded into Oracle?