I've done that, and it works just fine, provided you have a primary
key that lends itself to this sort of thing...

Michael

Tim Bunce writes:
 > You could start by just selecting and caching the ROWIDs.
 > 
 > A more sophisticated, and portable, approach is to query the primary
 > key columns and then fetch the first page's worth and record the
 > highest pk value.  For the next page start at the previous pk value.
 > All queries have an order by that matches the pk columns. The DB can
 > read the rows efficiently through the index.
 > 
 > I'm obviously being a little simplistic here - there are many design
 > and implementation issues to consider. It isnt easy to do well. And,
 > for the record, I've never had the need so I'm just spouting unproven
 > theory :)
 > 
 > Tim.
 > 
 > On Tue, Aug 07, 2001 at 08:36:02AM -0400, Stan Brown wrote:
 > > I'm writing a generic table editor in perltk for some operations types to
 > > use.
 > > 
 > > It's going pretty well, but I have run inot a problem that I can't figure
 > > out how to solve. I'm runing against Oracle 7 on HP-UX, and what I have
 > > works pretty well for small (< 10,000) row tables. But it does not work
 > > (for reasons that will become obvious in a moment) on table with, say, a
 > > million rows.
 > > 
 > > Here is waht I starte out with:
 > > 
 > > $MW->Busy;
 > > while ( @extracted_data = $sths->fetchrow_array ) {
 > >    my $i = 0;
 > >    foreach $col (keys  %cols)
 > >    {
 > >            # print "Got record for column $col record
 > >            $record_qty\n";
 > >            $records[$record_qty]{$col} =
 > >            $extracted_data[$i];
 > >            ++$i;
 > >    }
 > >    ++$record_qty;
 > >  }
 > >  $MW->Unbusy();
 > > 
 > >  Then the operator can move around and siplay/edit each record by setting
 > >  the fileds displayed to the appropriate row of the @records array.
 > > 
 > >  The problem with this is obvious, on large data sets. I am making a compy
 > >  of the data, and I run out of virtual memory. So I decided to change to 
 > >  fetchall_arrayref, however, I just ran a test with this, and even though
 > >  it did manage to aquire all the rows of data for 750,000 row table, the
 > >  resident set size of the perl task exceded 1GB. It als took several
 > >  minutes to get all the records.
 > > 
 > >  Presently the only way that I have provided, to move around in teh fetch's
 > >  result record set is "next", and previous" buttons. I probably need to add
 > >  the ability to go directly to record n of the result record set also.
 > > 
 > >  So, here is teh question. Givne that there is (as far as I know) now way
 > >  of getting just the desired record from the result set, how can I rework
 > >  this to be:
 > > 
 > >  1. Faster
 > >  2. More robust (IE not liekly to exced system memory resources).
 > > 
 > >  Sugestions?
 > > 
 > > 
 > > 
 > > -- 
 > > Stan Brown     [EMAIL PROTECTED]                                    843-745-3154
 > > Charleston SC.
 > > -- 
 > > Windows 98: n.
 > >    useless extension to a minor patch release for 32-bit extensions and
 > >    a graphical shell for a 16-bit patch to an 8-bit operating system
 > >    originally coded for a 4-bit microprocessor, written by a 2-bit 
 > >    company that can't stand for 1 bit of competition.
 > > -
 > > (c) 2000 Stan Brown.  Redistribution via the Microsoft Network is prohibited.

-- 
Michael Peppler - Data Migrations Inc. - http://www.mbay.net/~mpeppler
[EMAIL PROTECTED] - [EMAIL PROTECTED]
International Sybase User Group - http://www.isug.com

Reply via email to