2011-11-28 17 views
19

Fondamentalmente, ho bisogno di interrogare circa un migliaio di NEXTVAL da una sequenza. Posso interrogarli in un ciclo, o posso interrogarli attraverso un join con un tavolo reeeeeally grande.Interroga più NEXTVAL dalla sequenza in una istruzione

C'è un modo meno hacky?

Aggiornamento. Fondamentalmente, ho un programma di operazioni sugli oggetti. Ogni oggetto ha un UUID generato o un ID dal database. Dopo aver calcolato una pianificazione ottimale, ho bisogno di scriverla in DB, ma ogni ID nella tabella deve essere da una sequenza. Quindi ho bisogno di interrogare alcuni ID da quella sequenza. Il problema è che la query di loop è lenta, dal momento che il DB è davvero lontano da me e non posso perdere alcuni secondi mentre eseguo dozzine di query in un ciclo. Quindi ho bisogno di interrogare tutti quei nuovi ID in una query.

+0

Inoltre NB che potrebbe essere necessario/voglio usare un grande recupero per evitare di avere ancora un RTT per riga restituita: http://stackoverflow.com/a/17331855/32453 – rogerdpack

risposta

31

È possibile utilizzare questo:

select your_sequence.nextval 
from (
    select level 
    from dual 
    connect by level < 1000 
); 
+0

Grazie! Funziona perfettamente. – F0RR

+0

anche vedere una versione leggermente modificata di questo nella risposta di Florin Ghita, pure. – rogerdpack

14

Dipende da cosa si vuole fare con loro.

Se li si inserisce in una tabella, è possibile separare seq.nexval nella query di inserimento. (Come spiegato qui: How can I insert multiple rows into oracle with a sequence value?)

Se li si utilizza in un ciclo, è possibile recuperarli in tale ciclo.

Cosa vuoi fare con loro?

Come noto, non è possibile recuperare più valori dalla sequenza.

UPDATE: risponderti di a_horse_with_no_name può essere migliorato in questo modo:

select your_sequence.nextval 
from dual 
connect by level < 1000 

:)

-4
select sequence_name.nextval 
from dual 
connect by level < number of values you want to print; 
+3

Questo è identico ad altre risposte. –

+0

Questo ti darà un ** in meno ** rispetto al "numero di valori che vuoi stampare" –

Problemi correlati