in reply to DBI, sp_rename, and STDERR

Hi,

Easily done but maybe not the most intuitive. You need to use an error handler for Sybase such as:

error handler

UPDATE:
Derby caught an omission in my error handler. Namely, I missed copying the part which handles print statements. When a print statement occurs, the syb_err_handler() is called with $err being null. Thanks Derby for catching that!!

################################ ## Error handler function Called by DBD::Sybase if there is an error +or print statement ################################ 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; } elsif ( !err ) { print "$msg\n"; return $WARNING; } return ($return_code); }
set error handler
my $dbh = DBI->connect("dbi:Sybase:server=$SYB_SERVER;database=$SYB_DB +", $SYB_UID, $SYB_PWD, { PrintError => 0, syb_err_handler => \&syb_err_handler } );

Jason L. Froebe

Team Sybase member

No one has seen what you have seen, and until that happens, we're all going to think that you're nuts. - Jack O'Neil, Stargate SG-1

Replies are listed 'Best First'.
Re^2: DBI, sp_rename, and STDERR
by derby (Abbot) on Jul 20, 2005 at 15:37 UTC

    Jason,
    Thanks for setting me straight. Just one other typo in your example:

    syb_err_handler => \&syb_err_handler

    Thanks!

    -derby
      Thanks! :)

      Jason L. Froebe

      Team Sybase member

      No one has seen what you have seen, and until that happens, we're all going to think that you're nuts. - Jack O'Neil, Stargate SG-1

        Thanks.
        I would think this would happen a lot, but my searches didn't come up with anything.
        By the way, I think you're missing a '$' at:
        } elsif ( !err ) {