Michael Peppler
Sybase Consulting
Sybase on Linux
Install Guide for Sybase on Linux
General Sybase Resources
General Perl Resources
BCP Tool
Bug Tracker
Mailing List Archive
Downloads Directory
Sybase on Linux FAQ
Sybperl FAQ
Michael Peppler's resume

sybperl-l Archive

Up    Prev    Next    

From: "Sabherwal, Balvinder (MBS)" <Balvinder dot Sabherwal at mortgagefamily dot com>
Subject: RE: Question on proc execution with sybperl
Date: Sep 24 2004 5:36PM

Here are the callback routines that I'm using. I'm ignoring all the msgs.
Where severity is <= 10 in it. The proc's are not printing any messages that
are being set in the $errmsg. I think it's the server that is echoing back
the proc execution. If I comment out the callback line for the server
messages, it works fine. The problem with that is if there are any errors,
I'll not be able to check that.

Any pointers will be great!!


sub msg_cb
    my($layer, $origin, $severity, $number, $msg, $osmsg, $dbh) = @_;
#    my $errmsg;

    $errmsg .= "\nOpen Client Message: (In msg_cb)\n";
    $errmsg .= "Message number: LAYER = $layer ORIGIN = $origin ";
    $errmsg .= "SEVERITY = $severity NUMBER = $number \n";
    $errmsg .= "CT-Library error:\n\t $msg \n";
    if (defined($osmsg))
        $errmsg .= "Operating System Error:  $osmsg \n";

sub srv_cb
    my($dbh, $number, $severity, $state, $line, $server, $proc, $msg) = @_;
#    my $errmsg;
    # If $dbh is defined, then you can set or check attributes
    # in the callback, which can be tested in the main body
    # of the code.

#    $errmsg .= "\nServer message: (In srv_cb)\n";
    $errmsg .= "Message_number $number, Severity $severity, " if ( $severity
gt "10" );
    $errmsg .= "State $state, Line $line \n" if ( $severity gt "10" );
    if (defined($server))
        $errmsg .= "Server : $server \n" if ( $severity gt "10" );
    if (defined($proc))
        $errmsg .= " Procedure $proc \n";
    $errmsg .= "Message String: $msg \n" if ( $severity gt "10" ) ;

-----Original Message-----
From: [] On
Behalf Of Michael Peppler
Sent: Friday, September 24, 2004 1:39 AM
To: ''
Subject: Re: Question on proc execution with sybperl

On Thu, 2004-09-23 at 21:57, Sabherwal, Balvinder (MBS) wrote:

> I have a script that is executing a proc on Sybase ASE with
> the below code. 

> $dbhS->ct_sql("exec $opt_D..proc_arch_mt $glun");  ## Archive this
>    if ( defined($errmsg) )         ## Make sure there were no errors
> in the last sql execution.
>    {
>       msg_send("$opt_N"," Failed for $opt_D on $opt_S " ,
> "Script failed due the errors below.\n$errmsg\n","$mailto","$pto");
>       exit(1);
>    }

> Upon execution, It fails with the error message as below. Can some one
> point me to the solution so I do not get this message back?

>          Script failed due the errors below.
>  Procedure proc_arch_mt 

There's not enough in the code snippet above to determine why $errmsg
gets set.

My guess is that you need to define a server callback or change the one
you already have to ignore certain types of messages from the proc.

Michael Peppler                              Data Migrations, Inc.             
Sybase T-SQL/OpenClient/OpenServer/C/Perl developer available for short
or long term contract positions -