2011-11-28 17 views
19

Temel olarak, bir sıradan bin NEXTVAL hakkında sorgulamam gerekiyor. Onları bir döngüde sorgulayabilirim ya da reeeeeally büyük bir tabloyla birleştirme yoluyla sorgulayabilirim.Bir ifadede sırayla birkaç NEXTVAL sorgulama

Daha az hacky yolu var mı?

Upd. Temel olarak, nesneler üzerinde bir işlem zamanlaması var. Her nesnenin oluşturulmuş bir UUID'si veya veritabanından bir kimliği vardır. En uygun zamanlamayı hesapladıktan sonra, bunu DB'ye yazmam gerekiyor, ancak tablodaki her ID bir sıradan olmalı. Bu yüzden bu diziden bazı kimlikleri sorgulamam gerekiyor. Sorun şu ki, DB gerçekten çok uzak olduğundan ve döngüde düzinelerce soruyu yürütürken birkaç saniye kaybedemediğim için, döngü sorgusu yavaştır. Bu yüzden tüm yeni kimlikleri bir sorguda sorgulamam gerekiyor.

+0

NB/hala bir RTT'ye sahip olmaktan kaçınmak için büyük bir fetchsize kullanmak istiyorum satır döndü: http://stackoverflow.com/a/17331855/32453 – rogerdpack

cevap

31

Bunu kullanabilirsiniz: Eğer gerekebilir Ayrıca

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

Teşekkürler! Mükemmel çalışıyor. – F0RR

+0

ayrıca Florin Ghita'nın cevabında bunun biraz değiştirilmiş bir versiyonuna da bakınız. – rogerdpack

14

Onlarla ne yapmak istediğinize bağlı olarak değişir.

Bunları bir tabloya eklerseniz, ekleme sorgusunda seq.nexval dosyasını kaldırabilirsiniz. (Burada açıklandığı gibi: How can I insert multiple rows into oracle with a sequence value?)

Bir döngü içinde kullanırsanız, bunları bu döngüde getirebilirsiniz.

Onlarla ne yapmak istersiniz?

Bildiğim kadarıyla, sırayla birden çok değer alamıyorsunuz.

GÜNCELLEME: a_horse_with_no_name en aswer böyle geliştirilebilir:

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

Bu, diğer cevaplarla aynıdır. –

+0

Bu, "yazdırmak istediğiniz değerlerin sayısından ** daha az" ** verecektir. –