Andrew Powell writes:
> It appears that selecting @@IDENTITY returns only the first IDENTITY
> result for the database connection. This is with SyBase 11.0.3.3, DBI
> 1.13 and DBD:Sybase 0.91.
>
> For example, I created a test table as such:
> create table test (id numeric(10,0) identity, blah char(10) null)
>
> And then ran a Perl script:
>
> ...
> # connect to the database
> $db = DBI->connect("dbi:Sybase:", $dbuser, $dbpass);
>
> # test the first insertion
> $qd = $db->prepare("insert into test (blah) values ('one')");
> $qd->execute;
Because you don't call fetch() the statement handle is left as
"active". When you call prepare below DBD::Sybase opens a new
connection for you (it can't tell that there are no rows to be fetched
[well, maybe it could, but right now it doesn't]).
> $qd = $db->prepare('select @@identity');
> $qd->execute;
> $row = $qd->fetchrow_arrayref;
> print "Identity: $row->[0]\n";
So what happens is that you are querying @@identity on different
connections, which will always be 1.
Try this:
$qd = $db->prepare("insert into test (blah) values ('one')\nselect
\@\@identity");
$qd->execute;
do {
while($d = $qd->fetch) {
print "Identity: $d->[0]\n";
}
} while($qd->{syb_more_results});
Michael
--
Michael Peppler - Data Migrations Inc. - [EMAIL PROTECTED]
http://www.mbay.net/~mpeppler - [EMAIL PROTECTED]
International Sybase User Group - http://www.isug.com
Sybase on Linux mailing list: [EMAIL PROTECTED]