While possible, that's not what I was recommending. Using a binary loader is the fastest way to get all features into a staging table. Then it's a simple join to identify features not present:
INSERT INTO table1 (
{long_list_of_columns})
SELECT {long_list_of_columns_prefixed_with_"t."}
FROM temptable t
LEFT OUTER JOIN table1 p ON p.keyfield = t.keyfield
WHERE p.keyfield IS NULL
You would, of course, need an index on the keyfield (or keyfields) in table1, and have a mechanism for generating a reliable objectid value (this was dirt easy with a serial column in PostgreSQL, but there should be a function you can use with Oracle).
Detecting the changed rows is a similar UPDATE statement. Identifying the rows to mark for deletion would flip the table order, and require an index on temptable(keyfield).
I've found that it's an order or magnitude or two faster to load the parallel table, then manifest deltas in a single commit, than to deal with variable duration downtime on the data during a TRUNCATE/INSERT/REINDEX outage.
- V