my $e = eval( $p ); #### $stmt = qq(INSERT INTO ACCU_USAGE VALUES ($Mobil ... ... $stmt = qq(INSERT INTO ACCU_USAGE VALUES ($MobileNumber, ... ... $rv = $dbh->do($stmt) or die $DBI::errstr; ... #### my $sql = $dbh->prepare( q[ INSERT INTO ACCU_USAGE VALUES( ?, ?, ?, ?, ?, ?, ?, ? ) ] ) or die $DBI::errstr; #### $rv = $sql->execute( $MobileNumber, $value->{'subscriberGroupName'}, $value->{'absoluteAccumulated'}->{'counters'}->[0]->{'bidirVolume'}, $value->{'absoluteAccumulated'}->{'counters'}->[0]->{'name'}, $value->{'selected'}, $value->{'absoluteAccumulated'}->{'expiryDate'}->{'volume'}, $value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'time'}, $value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'volume'} ) or die $DBI::errstr; #### #!/usr/bin/perl use Data::Dumper; use DBI; use File::Basename; #use warnings; @ARGV = qw[ NUL junk.dat CON CON ]; ## crude hack for local testing. open( FH, "<", $ARGV[0] ); open( AH, "<", $ARGV[1] ); open( OUT, ">", $ARGV[2] ); open( LOG, ">", $ARGV[3] ); #Conneting to database my $dbExt = "db"; my $driver = "SQLite"; #my $file = basename($ARGV[1]); #my @fileName = split(/\./, $file); #$file = $fileName[0] . ".$dbExt"; my $dbFileName = 'junk.db'; #dirname( $ARGV[1] ) ."/" . $file; if(-e $dbFileName) { unlink ($dbFileName); } my $database = "$dbFileName"; my $dsn = "DBI:$driver:dbname=$database"; my $userid = ""; my $password = ""; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1, AutoCommit => 0 }) or die $DBI::errstr; my $stmt = <do($stmt); if($rv < 0){ unlink($dbFileName) if(-e $dbFileName); $dbh->disconnect(); print LOG $DBI::errstr; exit(1); } my $sql = $dbh->prepare( q[ INSERT INTO ACCU_USAGE VALUES( ?, ?, ?, ?, ?, ?, ?, ? ) ] ) or die $DBI::errstr; my $SubsSize= -s $ARGV[0]; my $AccuSize= -s $ARGV[1]; my $SubsCount=0; my $AccuCount=0; my $finalCount=0; my $rowCount = 0; while( ) { chomp; my $line = $_; $AccuCount++; my $MobileNumber; if( $line =~ /subscriberId:(\w+)\(\"(\d+)\"\)/ ) { $MobileNumber = $2; } else { $MobileNumber = "''"; } my $plan = $line; $plan =~ s/\\//g; my @AccVolume; if( $plan =~ /usageControlAccum:(\w+)\(\"(.*)\"\)/ ) { my $p = $2; $p =~ s/:\{/ => {/g; $p =~ s/:\[/ => [/g; $p =~s/\"/\'/g; $p =~ s/\':/\'=>/g; $p =~ s/\}n/\}/g; # print $p,"\n"; my $e = eval( $p ); if ( @$ ) { push (@AccVolume,"error"); } else { #print Dumper($e); foreach my $value ( @{$e->{'reportingGroups'}} ) { if ( exists ( $value->{'absoluteAccumulated'}->{'counters'} ) ) { $rv = $sql->execute( $MobileNumber, $value->{'subscriberGroupName'}, $value->{'absoluteAccumulated'}->{'counters'}->[0]->{'bidirVolume'}, $value->{'absoluteAccumulated'}->{'counters'}->[0]->{'name'}, $value->{'selected'}, $value->{'absoluteAccumulated'}->{'expiryDate'}->{'volume'}, $value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'time'}, $value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'volume'} ) or die $DBI::errstr; } elsif ( exists ( $value->{'absoluteAccumulated'}->{'bidirVolume'} ) ) { $rv = $sql->execute( $MobileNumber, $value->{'subscriberGroupName'}, $value->{'absoluteAccumulated'}->{'bidirVolume'}, $value->{'absoluteAccumulated'}->{'name'}, $value->{'selected'}, $value->{'absoluteAccumulated'}->{'expiryDate'}->{'volume'}, $value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'time'}, $value->{'absoluteAccumulated'}->{'previousExpiryDate'}->{'volume'} ) or die $DBI::errstr; } if($rv < 0) { print LOG "Failed to insert $stmt query. Exiting...\n"; unlink($dbFileName) if(-e $dbFileName); print LOG $DBI::errstr; $dbh->disconnect(); exit(1); } else { $rowCount++; if($rowCount == 5000) { $dbh->commit(); $rowCount = 0; } } } } } } close(AH); $dbh->commit();