Update: I fixed the code to actually use the iterator this time :)
Read the SQL text file and send each batch to the database using Perl. In this case, we aren’t performing any real parsing of the SQL itself, we are simply retrieving the individual SQL batches. I’m using Rintaro Ishizaki’s Iterator::Simple Perl module so we can very easily get the next SQL batch.
Obtaining the individual batches are now very easy. Note, that we are making several assumptions:package dbS::Sybase::Parse::SQL_File; use warnings; use strict; use Iterator::Simple qw(iterator); BEGIN { use Exporter (); our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); $VERSION = 1.0.0; @ISA = qw(Exporter); @EXPORT_OK = qw(&batch); } our $FH; ############################# sub batch { my $file = shift; open ($FH, "<", $file) or die ("unable to open sql file\n"); iterator { my $query = ""; while (my $line = <$FH>) { chomp $line; last if ($line =~ m/^go\s*$/i); $query .= $line . " "; } return $query; } } 1;
use dbS::Sybase::Parse::SQL_File qw(open_file next_batch); .... if ( my $batch = dbS::Sybase::Parse::SQL_File::batch("SQL/SNAP.sql") ) + { print "-"x40 . "\n"; print " Performing IGOR\n"; print "-"x40 . "\n"; while ( my $sql_batch = $batch->next ) { dbh_do($local_dbh, $sql_batch); } }
Granted, we could have performed this without the iterator, but this is just the first revision. I expect to be adding a lot more to it (e.g. T-SQL verifier) so that I can hide the complexity behind the iterator.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: How to read batches of SQL from a file in Perl
by mpeppler (Vicar) on Aug 29, 2007 at 11:25 UTC | |
by KurtSchwind (Chaplain) on Oct 25, 2007 at 02:05 UTC | |
by erix (Prior) on Oct 25, 2007 at 14:32 UTC | |
by mpeppler (Vicar) on Oct 26, 2007 at 14:02 UTC |