LOAD DATA
INFILE
.txt
INTO TABLE
(
person_id POSITION(1:9) CHAR(9)
surname POSITION(10:34) CHAR(25)
given_names POSITION(35-59) CHAR(25)
)
####
#!/usr/bin/perl
#configuration variables
$lpath="/u04/tmp/log";
$cpath="/u04/tmp/ctl/";
$cfile="control.ctl";
$dirname="/u04/tmp/txt/";
# load the control file data
open(SOURCE, "< $cpath$cfile")
or die "Couldn't open $cpath for reading: $!\n";
@control = ;
foreach $line (@control) {
$ctl .= $line;
}
#process all files in the directory
opendir(DIR, $dirname) or die "can't opendir $dirname: $!";
while (defined($file = readdir(DIR))) {
if ($file =~ /.txt/) {
($table = $file) =~ s/.txt//;
#print "$file -> $table \n";
#write the control file
open(COUT, "> $cpath$table.ctl")
or die "Couldn't open $cpath$file.ctl for writing: $!";
($tmp = $ctl) =~ s//$table/g;
print COUT $tmp;
close COUT;
#call SQL*Loader
$cmd = "sqlldr USERID=user/id\@service ".
"control=$cpath$table.ctl " .
"log=$lpath$table.log " .
"bad=$lpath$table.bad direct=true";
$status = system($cmd);
}
}
closedir(DIR);