From 9e77ad617b9975cbbd57c4d6c9eb02a02b36a875 Mon Sep 17 00:00:00 2001 From: Monika Komorowska <mk8@sanger.ac.uk> Date: Tue, 19 Apr 2011 12:20:57 +0000 Subject: [PATCH] Added procedure file parameter. --- misc-scripts/db/multidb_sql.pl | 36 ++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/misc-scripts/db/multidb_sql.pl b/misc-scripts/db/multidb_sql.pl index ba70e8ac31..2ac36fd86c 100644 --- a/misc-scripts/db/multidb_sql.pl +++ b/misc-scripts/db/multidb_sql.pl @@ -12,7 +12,7 @@ use DBI; use Getopt::Long; -my ( $host, $user, $pass, $port, $expression, $dbpattern, $file, $result_only ); +my ( $host, $user, $pass, $port, $expression, $dbpattern, $file, $procedure_file, $result_only ); GetOptions( "host=s", \$host, "user=s", \$user, @@ -20,6 +20,7 @@ GetOptions( "host=s", \$host, "port=i", \$port, "expr=s", \$expression, "file=s", \$file, + "procedure_file=s", \$procedure_file, "dbpattern|pattern=s", \$dbpattern, "result_only!", \$result_only, ); @@ -34,8 +35,24 @@ if( $port ) { } my @expressions; +my $procedure_name; +my $create_procedure; -if( $file ) { +if( $procedure_file ) { + local *FH; + if( ! -r $procedure_file ) { + die ( "File $procedure_file not readable" ); + } + open( FH, "<$procedure_file" ); + + while( my $line = <FH> ) { + if( $line =~ /create procedure ([^\s|^\(]+)/i ) { + $procedure_name = $1; + } + $create_procedure .= " ".$line; + } + +} elsif( $file ) { local *FH; if( ! -r $file ) { die ( "File $file not readable" ); @@ -77,12 +94,19 @@ for my $dbname ( @dbnames ) { unless ($result_only) { print "$dbname\n"; } - if(( ! $expression ) && ( !$file )) { + if(( ! $expression ) && ( !$file ) && (!$procedure_file)) { next; } $db->do( "use $dbname" ); - if( $file ) { + if( $procedure_file ) { + $db->do("drop procedure if exists $procedure_name") or print $DBI::errstr; + $db->do("$create_procedure") or print $DBI::errstr; + my $sth=$db->prepare("call $procedure_name()") || die $DBI::err.": ".$DBI::errstr; + $sth->execute || die DBI::err.": ".$DBI::errstr; + $db->do("drop procedure if exists $procedure_name") or print $DBI::errstr; + print "stored procedure $procedure_name executed without errors\n"; + }elsif( $file ) { for my $sql ( @expressions ) { print "Do $sql\n"; $db->do( $sql ); @@ -122,8 +146,8 @@ sub usage { -expr sql statement you want to execute. if omitted, just print database names matching if select, show or describe prints results - -file Apply sql in file to all databases. Doesnt print results. - + -file Apply sql in file to all databases. Doesn't print results. + -procedure_file Call a stored procedure in a given file. Doesn't print results. The file should contain a 'create procedure' statement only. The procedure can't take any parameters. EOF ; exit; -- GitLab