Jason,
Have you tried it? I've never been able to catch print statements from stored procs with an error handler (
DBD::Sybase Version 1.61 and Sybase 12.5.x).
I tried using your error handler on a tempdb table I created
!/usr/local/bin/perl
use strict;
use DBI;
my $dbh = DBI->connect("dbi:Sybase:server=xxx", "u", "p",
{ PrintError => 0, syb_err_handler => \&syb_error_handler } );
$dbh->do( "use tempdb" );
my $sql = "exec sp_rename derby, derby1";
$dbh->do( $sql );
sub syb_err_handler {
my ($err, $sev, $state, $line, $server, $proc, $msg, $sql, $err_ty
+pe) = @_;
my $ERROR = 1;
my $WARNING = 0;
my $return_code = $ERROR;
if ( ($err == 131) && ($sev == 5) ) {
## Connection attempt failed
return $ERROR;
} elsif ( ($err == 0) && ($sev == 10) && ($state == 1) ) {
if ( $msg =~ m/Active traceflags:/i ) {
process_dbcc_list($msg);
$return_code = $WARNING;
} else {
unless ( $msg =~ m/^\s+$/ ) {
chomp $msg;
print $msg . "\n";
}
}
$return_code = $WARNING;
} elsif ( ($err == 3) && ($sev == 5) ) {
print "err: $msg\n";
$return_code = $ERROR;
}
return ($return_code);
}
Just didn't work. The print statement was not caught by the error handler and was outputted to STDERR.