I thought this nntp gateway worked in both directions, but apparently it is
read only.  I guess that
explains I no one ever responds to my posts (or maybe I just never say
anything worth responding to...)

So I'm copying and pasting below what I tried to post on perl.dbi.dev.


Martin J. Evans wrote:
On Wed, 2006-09-06 at 13:16 -0400, John Scoles wrote:
> Hi Martin.

> I have been following it closely but I have no cycles this week to work
on
> it.

> >This rendered execute_array with DBD::Oracle useless to me. However,
> >looking at
> > DBD::Oracle and OCI I've discovered OCI can return the total rows
affected
> > (which I want) and in fact due to a bug in DBD::Oracle
execute_for_fetch
> > currently returns the total rows affected instead of the number of
rows
> > affected.

Sorry, I meant, returns the total rows affected instead of the total
number of tuples executed.

Hi Martin,

I'm a little skeptical about what you are using this number for (if a bulk
update can go wrong
without throwing a database error, surely it can go wrong while accidentally
returning the right
number of rows too, no?).  But anyway, I think it will be fairly easy to
implement, but I am a little
unclear on what should happen in case of an error.   This replacement for
Oracle.pm's execute_for_fetch
is my best guess:

   sub execute_for_fetch {
      my ($sth, $fetch_tuple_sub, $tuple_status) = @_;
      my $row_count = 0;
      my $tuple_count=0;  ###NEW
      my $batch_size = ($sth->{ora_array_chunk_size} ||= 1000);
      my $tuple_batch_status;

      if(defined($tuple_status)) {
          @$tuple_status = ();
      $tuple_batch_status = [ ];
   }
      while (1) {
          my @tuple_batch;
          for (my $i = 0; $i < $batch_size; $i++) {
               push @tuple_batch, [ @{$fetch_tuple_sub->() || last} ];
           }
           last unless @tuple_batch;
           my $res = ora_execute_array($sth,
                                           [EMAIL PROTECTED],
                                           scalar(@tuple_batch),
                                           $tuple_batch_status);
            if(defined($res) && defined($row_count)) {
               $row_count += $res;
            } else {
               $row_count = undef;
            }
            [EMAIL PROTECTED];  ###NEW
            push @$tuple_status, @$tuple_batch_status
                if defined($tuple_status);
           }
           return () unless defined $row_count;   ##NEW
           return $tuple_count unless wantarray; ##NEW
           return $tuple_count, $row_count;        ##NEW
  }
Xho

Reply via email to