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

Reply via email to