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: Michael Peppler <mpeppler at MBAY dot NET>
Subject: Re: SybPerl Question
Date: Jan 21 1998 6:54PM

Connie Zhang wrote:
> Hi, everyone,
> I was using SybPerl/DBlib for my Perl scripts.
> Things work fine so far until I got stuck with
> one problem...Wonder if someone can give some
> hints...

Several problems.

First you mix Sybase::Sybperl and Syabse::DBlib calls. That
works, but it's very bad form.

Remove the 
use Sybase::Sybperl
statement, and change all the &dbxxx($dbh) to $dbh->dbxxx.

> Msg 207, Level 16, State 2
> Server 'CMOQA', Line 12
>         Invalid column name 'czhang'.

This is:

                SELECT \@own_id = owner_id 
                  FROM gml_user
                 WHERE unix_id = $user_id

You are missing quotes around $user_id (which is almost certainly set
to czhang).

> DB-Library error:
>         General SQL Server error: Check messages from the SQL Server.
> Msg 156, Level 15, State 1
> Server 'CMOQA', Line 1
>         Incorrect syntax near the keyword 'AND'.

You've submitted the batch to the server, and then *after* that you
try to add additional conditionals.

You must build your entire SQL statment first, and then submit it:

                     WHERE A.comp_country_cd = C.country_cd
                       AND A.ret_fax_dt      = 'Jan 1 1900 12:00AM'
                       AND A.comp_country_cd = B.country_cd");
&dbsqlexec ($dbh1);
&dbresults ($dbh1);

# This has now been sent to the server (as if you type 'go'
# in isql)

while (&dbnextrow ($dbh1))
    # do nothing.

# Now the server becomes very confused when you send it this
# conditional!

if ($D2 eq "")
    $dbh1->dbcmd (" AND A.list_cd = '$D1' ");
    $dbh1->dbcmd (" AND A.list_cd IN \('$D1', '$D2'\) ");

> Msg 137, Level 15, State 1
> Server 'CMOQA', Line 1
>         Must declare variable '@list_id'.

Same problem. T-SQL variables live within one command batch.
When you sent the batch to the server (with dbsqlexec) a
new batch is started, and you need to redeclare the variables.

The rest of the errors are all linked to the same problem.

I think that if you move the call the dbsqlexec() to the end of
your script, and submit everything at once (except maybe the 
COMMIT TRAN) then things should work a lot better...

Michael Peppler       -||-  Data Migrations Inc.  -||-