On 05/02/14 13:36, John Scoles wrote:
Well isn't he is calling with the alias 'fetch'
isn't he: if ($price_sth->fetch) {
and he is calling it in I think scalar context
$row = $s->fetch; so am I.
my ($row) = $s->fetchrow_array;
As far as I can see I did the same.
vs if ($price_sth->fetch) There is the odd chance that he is doing the SQL against a 'view', 'cursor' or alike but I doupt that is it.
Perhaps David can tell us more. Martin
> Date: Wed, 5 Feb 2014 13:25:03 +0000 > From: martin.ev...@easysoft.com > To: davidni...@gmail.com; dbi-users@perl.org > Subject: Re: Surprising DBD::Oracle error raised > > On 04/02/14 19:36, David Nicol wrote: > > $price_sth->execute; > > my ($o_file_price) = $price_sth->fetchrow_array(); > > if ($price_sth->fetch) { > > $this->log_error('ERROR: scalar select returned second row at > > %s line %d', __FILE__, __LINE__); > > } > > > > > > I expected the fetch to return undef, but it throws an Oracle error. > > My best ignorant guess here is that fetchrow_array does some cleanup > > on one-row datasets, but that isn't documented. > > > > Advise? > > > > > > That is in deed interesting. When I run the following with DBD::ODBC to MS SQL Server: > > use strict; > use warnings; > use DBI; > > my $h = DBI->connect(); > eval { > $h->do(q/drop table mje/); > }; > > $h->do(q/create table mje (a int)/); > my $s = $h->prepare(q/insert into mje values(?)/); > $s->execute(1); > $s->execute(2); > > $s = $h->prepare(q/select * from mje where a = 1/); > $s->execute; > my ($row) = $s->fetchrow_array; > print "$row\n"; > $row = $s->fetch; > print "$row\n"; > > > I get: > > 1 > Use of uninitialized value $row in concatenation (.) or string at mje/fetch_off_end.pl line 20. > > However, I get the same with DBD::Oracle so how is you code different from the above. > > Martin