Hi,
This is really troubling me. I've included a trace at the bottom of the
original mail. What I'm finding is that even though I set AutoCommit to 0
prior to my "do('declare @foo int'), the transaction appreas to occur
after it.
Can someone please help? I'd be really greatful.
Cheers,
Raf
-------- Original Message --------
Subject: DBD::Sybase - Transactions with Declare @foo and select @foo
From: "Raf" <[EMAIL PROTECTED]>
Date: Tue, July 1, 2003 5:52 pm
To: <[EMAIL PROTECTED]>
Hi,
I'm having some trouble and was hoping that someone might be able to
enlighten me a tad.
I'm using DBD::Sybase and trying to perform a transaction, which is
behaving rather weirdly.
My transaction is of the form:
* $dbh->{AutoCommit}=0
* $dbh->do('declare @foo int')
* $dbh->do(".. insert a tupple some place.. ")
* $dbh->do('select @foo=(select @@identity)')
* $dbh->do('insert into bar(f1,..,fi) values (v1,..,(select @foo),
..,vi)') * more inserts like this with the same reference to @foo
* $dbh->commit if all_eval_ok
Now what winds me up is that it'll happily declare @foo, however from
that point on all else seems to fall into trouble.
It will declare fine, however when I hit the first reference to @foo
(ie. in the 'select @foo=(select @@identity)') it starts to spew errors
telling me that I need to declare @foo before I can procede. This error
is reproduced for each of the subsequent inserts.
I'd be hugely greatful for any help?
Cheers,
Raf
=head2 Trace
-> STORE for DBD::Sybase::db (DBI::db=HASH(0x505918)~INNER
'AutoCommit' 0)
<- STORE= 1 at DBSemi.pm line 673 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> STORE for DBD::Sybase::db (DBI::db=HASH(0x505918)~INNER
'RaiseError' 1)
STORE DBI::db=HASH(0x505918) 'RaiseError' => 1
<- STORE= 1 at DBSemi.pm line 674 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
Doing:declare @last_insert int -> do for DBD::Sybase::db
(DBI::db=HASH(0x48a4d4)~0x505918 'declare @last_insert int')
1 -> prepare for DBD::Sybase::db (DBI::db=HASH(0x505918)~INNER 'declare
@last_insert int' undef)
dbih_setup_handle(DBI::st=HASH(0x5226c0)=>DBI::st=HASH(0xd43e9c),
DBD::Sybase::st, 51d394, Null!)
dbih_make_com(DBI::db=HASH(0x505918), DBD::Sybase::st, 396) thr#0
1 <- prepare= DBI::st=HASH(0x5226c0) at Sybase.pm line 150 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> execute for DBD::Sybase::st (DBI::st=HASH(0x5226c0)~0xd43e9c)
syb_db_opentran() -> ct_command(
BEGIN TRAN DBI506008
) = 1
syb_db_opentran() -> ct_send() = 1
syb_db_opentran() -> ct_results(4047) == 1
syb_db_opentran() -> ct_results(4046) == 1
syb_st_execute() -> ct_command() OK
syb_st_execute() -> ct_send() OK
st_next_result() -> ct_results(4047) == 1
st_next_result() -> ct_results(4046) == 1
ct_results() final retcode = -205
st_next_result() -> lasterr = 0, lastsev = 0
syb_st_execute() -> got CS_CMD_DONE: resetting ACTIVE, moreResults,
dyn_execed
<- execute= -1 at Sybase.pm line 151 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> err in DBD::_::common for DBD::Sybase::st
(DBI::st=HASH(0x5226c0)~0xd43e9c)
<- err= undef at Sybase.pm line 152 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> rows for DBD::Sybase::st (DBI::st=HASH(0x5226c0)~0xd43e9c)
<- rows= -1 at Sybase.pm line 153 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> FETCH for DBD::Sybase::st (DBI::st=HASH(0xd43e9c)~INNER
'syb_more_results')
.. FETCH DBI::st=HASH(0xd43e9c) 'syb_more_results' = undef
<- FETCH= undef at Sybase.pm line 154 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
<> DESTROY ignored for outer handle DBI::st=HASH(0x5226c0) (inner
DBI::st=HASH(0xd43e9c))
-> DESTROY for DBD::Sybase::st (DBI::st=HASH(0xd43e9c)~INNER)
syb_st_destroy: called on d45410...
syb_st_destroy(): freeing imp_sth->statement
syb_st_destroy(): cmd dropped: 1
<- DESTROY= undef at perl5db.pl line 1487
<- do= -1 at DBSemi.pm line 685
Doing:
insert into object_inserts(object_id,
status,
creation_time,
modification_time,
modified_by,
created_by)
values (?, ?, ?, ?, ?, ?)
, , 11, 0, 2003/06/10, 2003/06/10, 2, 2 -> do for
DBD::Sybase::db (DBI::db=HASH(0x48a4d4)~0x505918 '
insert into object_inserts(object_id,
status,
creation_time,
modification_time,
modified_by,
created_by)
values (?, ?, ?, ?, ?, ?)
' undef 11 0 '2003/06/10' '2003/06/10' 2 2)
1 -> prepare for DBD::Sybase::db (DBI::db=HASH(0x505918)~INNER '
insert into object_inserts(object_id,
status,
creation_time,
modification_time,
modified_by,
created_by)
values (?, ?, ?, ?, ?, ?)
' undef)
dbih_setup_handle(DBI::st=HASH(0xd43efc)=>DBI::st=HASH(0xd43ecc),
DBD::Sybase::st, d43f08, Null!)
dbih_make_com(DBI::db=HASH(0x505918), DBD::Sybase::st, 396) thr#0
dbd_preparse parameter :p1 ()
dbd_preparse parameter :p2 ()
dbd_preparse parameter :p3 ()
dbd_preparse parameter :p4 ()
dbd_preparse parameter :p5 ()
dbd_preparse parameter :p6 ()
dbd_preparse scanned 6 distinct placeholders
syb_st_prepare: ct_dynamic(CS_PREPARE) for DBDf
syb_st_prepare: ct_dynamic(CS_DESCRIBE_INPUT) for DBDf
syb_st_prepare: ct_results(CS_DESCRIBE_INPUT) for DBDf - restype 4051
syb_st_prepare: ct_res_info(CS_DESCRIBE_INPUT) statement has 6 parameters
syb_st_prepare: ct_describe(CS_DESCRIBE_INPUT) col 1, type 16, status
256, length 35
syb_st_prepare: ct_describe(CS_DESCRIBE_INPUT) col 2, type 16, status
256, length 35
syb_st_prepare: ct_describe(CS_DESCRIBE_INPUT) col 3, type 12, status
256, length 8
syb_st_prepare: ct_describe(CS_DESCRIBE_INPUT) col 4, type 12, status
256, length 8
syb_st_prepare: ct_describe(CS_DESCRIBE_INPUT) col 5, type 16, status
256, length 35
syb_st_prepare: ct_describe(CS_DESCRIBE_INPUT) col 6, type 16, status
256, length 35
syb_st_prepare: ct_results(CS_DESCRIBE_INPUT) for DBDf - restype 4046
1 <- prepare= DBI::st=HASH(0xd43efc) at Sybase.pm line 150 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> execute for DBD::Sybase::st (DBI::st=HASH(0xd43efc)~0xd43ecc 11 0
'2003/06/10' '2003/06/10' 2 2)
bind :p1 <== '11' (attribs: )
bind :p1 () <== 11 (size 2/3/0, ptype 5, otype 0)
bind :p1 <== '11' (size 2, ok 1)
datafmt: type=16, status=256, len=35
saved type: 16
bind :p2 <== '0' (attribs: )
bind :p2 () <== 0 (size 1/2/0, ptype 5, otype 0)
bind :p2 <== '0' (size 1, ok 1)
datafmt: type=16, status=256, len=35
saved type: 16
bind :p3 <== '2003/06/10' (attribs: )
bind :p3 () <== '2003/06/10' (size 10/11/0, ptype 4, otype 0)
bind :p3 <== '2003/06/10' (size 10, ok 1)
datafmt: type=0, status=256, len=-9
saved type: 12
bind :p4 <== '2003/06/10' (attribs: )
bind :p4 () <== '2003/06/10' (size 10/11/0, ptype 4, otype 0)
bind :p4 <== '2003/06/10' (size 10, ok 1)
datafmt: type=0, status=256, len=-9
saved type: 12
bind :p5 <== '2' (attribs: )
bind :p5 () <== 2 (size 1/2/0, ptype 5, otype 0)
bind :p5 <== '2' (size 1, ok 1)
datafmt: type=16, status=256, len=35
saved type: 16
bind :p6 <== '2' (attribs: )
bind :p6 () <== 2 (size 1/2/0, ptype 5, otype 0)
bind :p6 <== '2' (size 1, ok 1)
datafmt: type=16, status=256, len=35
saved type: 16
syb_st_execute() -> ct_send() OK
st_next_result() -> ct_results(4047) == 1
st_next_result() -> ct_results(4046) == 1
ct_results() final retcode = -205
st_next_result() -> lasterr = 0, lastsev = 0
syb_st_execute() -> got CS_CMD_DONE: resetting ACTIVE, moreResults,
dyn_execed
<- execute= 1 at Sybase.pm line 151 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> err for DBD::Sybase::st (DBI::st=HASH(0xd43efc)~0xd43ecc)
<- err= undef at Sybase.pm line 152 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> rows for DBD::Sybase::st (DBI::st=HASH(0xd43efc)~0xd43ecc)
<- rows= 1 at Sybase.pm line 153 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> FETCH for DBD::Sybase::st (DBI::st=HASH(0xd43ecc)~INNER
'syb_more_results')
.. FETCH DBI::st=HASH(0xd43ecc) 'syb_more_results' = undef
<- FETCH= undef at Sybase.pm line 154 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
<> DESTROY ignored for outer handle DBI::st=HASH(0xd43efc) (inner
DBI::st=HASH(0xd43ecc))
-> DESTROY for DBD::Sybase::st (DBI::st=HASH(0xd43ecc)~INNER)
syb_st_destroy: called on d45410...
syb_st_destroy: ct_dynamic(CS_DEALLOC) for DBDf
syb_st_destroy(): freeing imp_sth->statement
syb_st_destroy(): cmd dropped: 1
<- DESTROY= undef at perl5db.pl line 1487
<- do= 1 at DBSemi.pm line 685
Doing:select @last_insert = (select @@identity) -> do for
DBD::Sybase::db (DBI::db=HASH(0x48a4d4)~0x505918 'select @last_insert =
(select @@identity)')
1 -> prepare for DBD::Sybase::db (DBI::db=HASH(0x505918)~INNER 'select
@last_insert = (select @@identity)' undef)
dbih_setup_handle(DBI::st=HASH(0xd43fe0)=>DBI::st=HASH(0xd43eb4),
DBD::Sybase::st, d43fec, Null!)
dbih_make_com(DBI::db=HASH(0x505918), DBD::Sybase::st, 396) thr#0
1 <- prepare= DBI::st=HASH(0xd43fe0) at Sybase.pm line 150 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
-> execute for DBD::Sybase::st (DBI::st=HASH(0xd43fe0)~0xd43eb4)
syb_st_execute() -> ct_command() OK
syb_st_execute() -> ct_send() OK
st_next_result() -> ct_results(4048) == 1
st_next_result() -> ct_results(4046) == 1
ct_results() final retcode = -205
st_next_result() -> lasterr = 137, lastsev = 15
st_next_result() -> restype is not data result or
syb_cancel_request_on_error is TRUE, force failFlag
st_next_result() -> failFlag set - clear request
syb_st_finish() -> ct_cancel(CS_CANCEL_ALL)
syb_st_finish() -> resetting ACTIVE, moreResults, dyn_execed
syb_st_execute() -> got CS_CMD_FAIL: resetting ACTIVE, moreResults,
dyn_execed
!! ERROR: 137 'Server message number=137 severity=15 state=1 line=1
server=pelicantext=Must declare variable '@last_insert'.
'
<- execute= undef at Sybase.pm line 151 via
/usr/local/lib/perl5/5.6.1/perl5db.pl line 1483
<> DESTROY ignored for outer handle DBI::st=HASH(0xd43fe0) (inner
DBI::st=HASH(0xd43eb4))
-> DESTROY for DBD::Sybase::st (DBI::st=HASH(0xd43eb4)~INNER)
syb_st_destroy: called on d45410...
syb_st_destroy(): freeing imp_sth->statement
syb_st_destroy(): cmd dropped: 1
error: 137 'Server message number=137 severity=15 state=1 line=1
server=pelicantext=Must declare variable '@last_insert'.
'
<- DESTROY= undef at perl5db.pl line 1487
!! ERROR: 137 'Server message number=137 severity=15 state=1 line=1
server=pelicantext=Must declare variable '@last_insert'.
'
<- do= undef at DBSemi.pm line 685
DBD::Sybase::db do failed: Server message number=137 severity=15 state=1
line=1 server=pelicantext=Must declare variable '@last_insert'.
... umm.. its broken...
DBD::Sybase::db do failed: Server message number=137 severity=15 state=1
line=1 server=pelicantext=Must declare variable '@last_insert'.
...propagated at gmdb/CaXinova/Model/DBSemi.pm line 688.
DB<9>
DB<9>
DB<9>
=cut