in reply to Select a random record

select key from (select key, count(1) 'seq' from table) where seq = $RAND or the equivalent using temporary tables. It's what databases do, so it will suck to build the temp table for large databases. If you can get the DBA to add a sequence number, then use that instead of the temp table. If your sequence number can have holes, then get the first record where seq >= $RAND. That's assuming your holes have even distribution also. barring that, I see no alternative to reading a cursor until your number is up (from a 'select key, count(1) from table' query. Do a 'select count(1) from table' to determine the number of records in the table. BTW, reading from the cursor until you get to the record you want (i.e. a sequential search) happens all the time in SQL. Its just called a 'table scan' instead, and happens when there's not an available index to locate matching records for a where clause.