in reply to Re^2: DBI, sp_rename, and STDERR
in thread DBI, sp_rename, and STDERR

This is a perfectly acceptable method unless we call system stored procedures (i.e. sp_rename) or where the source of the stored procedure is not available (3rd party). In truth, only using an error handler will 'catch' the print statement output from being sent to STDERR.

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^4: DBI, sp_rename, and STDERR
by derby (Abbot) on Jul 20, 2005 at 15:09 UTC

    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.

    -derby

      Works fine for me. I'm printing the "print" statements to STDOUT.

      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

        Ah! I see the problem... I'll fix the code snippet (missed the cut & paste)

        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