hiyall has asked for the wisdom of the Perl Monks concerning the following question:
#!/usr/bin/perl use Sybase::DBlib; dbmsghandle(\&showplan_handler); # $dbh = DBI->connect(DBI:Sybase:v6_dba_test_nj2x, 'user', 'pw'); $dbh = new Sybase::DBlib 'user','password'; $dbh->dbsetopt(DBSHOWPLAN); $dbh->dbsetopt(DBSTAT, "IO"); $dbh->dbsetopt(DBSTAT, "TIME"); $dbh->dbcmd('use myDB'); $dbh->dbsqlexec; $dbh->dbcmd('set statistics io,time,subquerycache on'); $dbh->dbsqlexec; $dbh->dbcmd('sp_who sa'); $dbh->dbsqlexec; while($dbh->dbresults != NO_MORE_RESULTS) { while(@dat = $dbh->dbnextrow) { print "@dat\n"; } } # Message number 3612-3631 are statistics time / statistics io # message. Showplan messages are numbered 6201-6225. # (I hope I haven't forgotten any...) @sh_msgs = (3612 .. 4043, 6201 .. 6225); @showplan_msg{@sh_msgs} = (1) x scalar(@sh_msgs); sub showplan_handler { my ($db, $message, $state, $severity, $text, $server, $procedure, $line) = @_; # Don't display 'informational' messages: if ($severity > 0) { print STDERR ("Sybase message ", $message, ", Severity ", $severity, ", state ", $state); print STDERR ("\nServer `", $server, "'") if defined ($ser +ver); print STDERR ("\nProcedure `", $procedure, "'") if defined ($procedure); print STDERR ("\nLine ", $line) if defined ($line); print STDERR ("\n ", $text, "\n\n"); } elsif($showplan_msg{$message}) { # This is a SHOWPLAN or STATISTICS message, so print it out: print STDERR ($text, "\n"); } elsif ($message == 0) { print STDERR ($text, "\n"); } 0; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: DBI Issue with Sybase 15.5
by JavaFan (Canon) on Feb 13, 2012 at 21:15 UTC | |
by hiyall (Acolyte) on Feb 13, 2012 at 23:38 UTC | |
by JavaFan (Canon) on Feb 14, 2012 at 09:40 UTC |