Note that there are some explanatory texts on larger screens.

plurals
  1. POimport csv error using SQL Loader and perl
    primarykey
    data
    text
    <p>Hello all I have a question I hope you guys can help me with. I tried to include all the relevant info. I'm building a perl script that will eventually loop though different sqlloader control files and import their respective csv data into oracle sql database tables. I'm testing multiple control loads before looping them. The problem is that I get an error even though the script connects to the db and uploads all the csv data without any problems that I can see. all the rows are accounted for and the log doesn't really help:</p> <pre><code> ================================================================================ [root@sanasr06 scripts]# perl db_upload.pl connection made! Starting database upload... Error: Can't open import control_general to SQL DB : at db_upload.pl line 44 ================================================================================ </code></pre> <p>line 44 is the system connection:</p> <blockquote> <p>system ("sqlldr $userid\@$sid/$passwd control=@control_pools log=$log silent=all ") or $logger->logdie("Error: Can't open import control data to SQL DB :$!");</p> </blockquote> <p>I'm including the control file output, the perl script and the control file. (the skipped file mentioned is for the csv headers:)</p> <pre><code> SQL*Loader: Release 11.2.0.1.0 - Production on Tue Aug 14 12:32:36 2012 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Control File: /despliegue/san/project/sql_ctrl/general.ctl Character Set UTF8 specified for all input. Data File: /despliegue/san/project/csv/Pools.csv Bad File: /despliegue/san/project/logs/sql_error.bad Discard File: /despliegue/san/project/logs/sql_discard.dsc (Allow all discards) Number to load: ALL Number to skip: 1 Errors allowed: 50 Bind array: 64 rows, maximum of 256000 bytes Continuation: none specified Path used: Conventional Silent options: FEEDBACK, ERRORS and DISCARDS Table I_GENERAL, loaded from every logical record. Insert option in effect for this table: TRUNCATE TRAILING NULLCOLS option in effect Column Name Position Len Term Encl Datatype ------------------------------ ---------- ----- ---- ---- --------------------- OBJECTID (FILLER FIELD) FIRST * , O(") CHARACTER DESCRIPTION (FILLER FIELD) NEXT * , O(") CHARACTER SERIALNUMBER NEXT * , O(") CHARACTER PRODUCT_NAME NEXT * , O(") CHARACTER CONTROLLER_VERSION NEXT * , O(") CHARACTER NUMBER_OF_CONTROLLERS NEXT * , O(") CHARACTER CAPACITY_GB NEXT * , O(") CHARACTER PRODUCT_CODE NEXT * , O(") CHARACTER value used for ROWS parameter changed from 64 to 15 Table I_GENERAL: 2512 Rows successfully loaded. 0 Rows not loaded due to data errors. 0 Rows not loaded because all WHEN clauses were failed. 0 Rows not loaded because all fields were null. Space allocated for bind array: 247680 bytes(15 rows) Read buffer bytes: 1048576 Total logical records skipped: 1 Total logical records read: 2512 Total logical records rejected: 0 Total logical records discarded: 0 Run began on Tue Aug 14 12:32:36 2012 Run ended on Tue Aug 14 12:32:38 2012 </code></pre> <p>==================================================================================</p> <p>the above file is of course shortened but includes all the relevant information. here's the perl script.</p> <pre><code>#!/usr/bin/perl use strict; use warnings; use DBI; use Log::Log4perl; #this script loads multiple saved csv files into the database using the control files ################ Initialization ############################################# my $homepath = "/despliegue/san/project"; my $log_conf = "$homepath/logs/log.conf"; Log::Log4perl-&gt;init($log_conf)or die("Error: Can't open log.config Does it exist? $!"); my $logger = Log::Log4perl-&gt;get_logger(); ################ database connection variables#### my ($serial, $model); my $host="me.notyou33.safety"; my $port="1426"; my $userid="user"; my $passwd="pass"; my $sid="sid"; my $log="$homepath/logs/sql_import.log"; #Control file location my @control_pools= "$homepath/sql_ctrl/pools.ctl"; my @control_general = "$homepath/sql_ctrl/general.ctl"; my @control_ports= "$homepath/sql_ctrl/ports.ctl"; my @control_replication = "$homepath/sql_ctrl/replication.ctl"; #######################Database connection and data upload ################# my $dbh = DBI-&gt;connect( "dbi:Oracle:host=$host;sid=$sid;port=$port", "$userid", "$passwd", { RaiseError =&gt; 1}) or $logger-&gt;logdie ("Database connection not made: $DBI::errstr"); print " connection made! Starting database upload...\n"; system ("sqlldr $userid\@$sid/$passwd control=@control_general log=$log silent=all") or $logger-&gt;logdie("Error: Can't open import control_general to SQL DB :$!"); print "one done moving to next one\n"; system ("sqlldr $userid\@$sid/$passwd control=@control_pools log=$log silent=all ") or $logger-&gt;logdie("Error: Can't open import control data to SQL DB :$!"); system ("sqlldr $userid\@$sid/$passwd control=@control_ports log=$log ") or $logger-&gt;logdie("Error: Can't open import control data to SQL DB :$!"); print "three done moving to last one\n"; system ("sqlldr $userid\@$sid/$passwd control=@control_replication log=$log silent=feedback ") or $logger-&gt;logdie("Error: Can't open import control data to SQL DB :$!"); print "................Done\n"; ############################################################################ $dbh-&gt;disconnect; </code></pre> <p>================================================================================== the control file:</p> <pre><code>OPTIONS (SKIP=1) LOAD DATA CHARACTERSET UTF8 INFILE '/despliegue/san/project/csv/Pools.csv' BADFILE '/despliegue/san/project/logs/sql_error.bad' DISCARDFILE '/despliegue/san/project/logs/sql_discard.dsc' TRUNCATE INTO TABLE I_GENERAL FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "\"" TRAILING NULLCOLS ( OBJECTID FILLER, DESCRIPTION FILLER, SERIALNUMBER, PRODUCT_NAME, CONTROLLER_VERSION, NUMBER_OF_CONTROLLERS, CAPACITY_GB, PRODUCT_CODE, ) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload