Il tuo approccio porterà a problemi di memoria. Il modo più veloce sarà questo [Query modificata dopo il commento di David per occuparsi dello scenario nullo] :
insert into dtr_debtors1(SSN)
select a.S1+level
from dual,(select nvl(max(ssn),0) S1 from dtr_debtors1) a
connect by level <= 10000
Un inserimento selezionato è l'approccio più veloce poiché tutto rimane nella RAM. Questa query può diventare lenta se scivola nell'area temporanea globale, ma ciò richiede l'ottimizzazione del DB. Non credo ci possa essere niente di più veloce di questo.
Qualche dettaglio in più sull'utilizzo della memoria da parte di Query:
Ogni query avrà il proprio PGA [Area globale del programma] che è fondamentalmente la RAM disponibile per ciascuna query. Se quest'area non è sufficiente per restituire i risultati della query, il motore SQL inizia a utilizzare lo spazio tabella temporaneo Golabl che è come il disco rigido e la query inizia a diventare lenta. Se i dati necessari per la query sono così grandi che anche l'area temporanea non è sufficiente, si verificherà un errore di tablespace.
Quindi progetta sempre la query in modo che rimanga in PGA, altrimenti è una bandiera rossa.