ref. the AskTom article http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:4343304784432 , I still wouldn't go entirely to a row-by-row approach, and I'm not sure that is the way that TK's advice is meant to be read. Maybe a hybrid solution of splitting up a load of 10,000 rows into multiple mini-batches of 100 or 500 or 1,000 rows would be appropriate. Having that number configurable would be a nice touch (you can then at least try setting it to 1 or some other very low number -- you could even run the same code at night using "10,000" or "100,000" as an input parameter)
Now my idea of record by record solution seems to be endorsed by Tom Kyte in 8i (see http://asktom.oracle.com/pls/ask/f?p=4950:8:18066575999822505476::NO::F4950_P8_DISPLAYID,F4950_P8CRITERIA:4343304784432)
For him if you're in OLTP mode, you do things the OLTP way.
-- //www.freelists.org/webpage/oracle-l