İSİM¶
CREATE SEQUENCE - yeni bir kayıt listesi üreteci tanımlar
KULLANIM¶
CREATE [ TEMPORARY | TEMP ] SEQUENCE isim [ INCREMENT [ BY ] artış ]
[ MINVALUE asgarideğer | NO MINVALUE ]
[ MAXVALUE azami_değer | NO MAXVALUE ]
[ START [ WITH ] başlangıç ]
[ CACHE kayıt_sayısı ] [ [ NO ] CYCLE ]
AÇIKLAMA¶
CREATE SEQUENCE yeni bir kayıt listesi üreteci
oluşturur. Bunu
isim isimli yeni bir özel tek
satırlık tabloyu oluşturarak ve ilklendirirerek yapar.
Komutu kullanan üretecin sahibi olur.
Bir şema ismi verilmişse, kayıt listesi belirtilen
şemada oluşturulur. Aksi takdirde, o anki şemada
oluşturulur. Geçici kayıt listeleri özel bir
şema içinde mevcuttur, dolayısıyla bir
geçici kayıt listesi oluştururken bir şema ismi
belirtilmemelidir. Satır listesinin ismi aynı şemadaki
başka bir kayıt listesi, tablo, indeks ya da sanal tablo ile
çakışmayacak şekilde seçilmelidir.
Bir kayıt listesi oluşturulduktan sonra, üzerinde
nextval,
currval ve
setval işlevleri ile
işlem yapabilirsiniz. Bu işlevlerin
açıklamalarını
http://belgeler.org/uygulamalar/pgsql/pgsql-functions-sequence.html adresinde
bulabilirsiniz.
Bir kayıt listesini doğrudan göncelleyemezsiniz, bir
kayıt listesinin o anki durumunu ve parametrelerini incelemek
için şöyle bir sorgu kullanabilirsiniz:
Kısmen, kayıt listesinin last_value alanı herhangi bir
oturum tarafından ayrılmış son değeri
gösterir. (Şüphesiz, başka oturumlar o an
nextval çağrıları yapıyorsa,
aldığınız değer atıl olmuş
olabilir.)
PARAMETRELER¶
- TEMPORARY veya TEMP
- Belirtilmişse, kayıt listesi nesnesi sadece bu oturum
için oluşturulur ve oturum sonunda silinir. Aynı
isimdeki kalıcı kayıt listelerinin
varlığı durumunda, bunlara şema nitelemeli
isimlerle erişilmedikçe, geçici şemanın
varlığı durumunda görünür
olmazlar.
- isim
- Oluşturulacak kayıt listesinin ismi (şema nitelemeli
olabilir).
- artış
- İsteğe bağlı INCREMENT BY
artış deyimi, yeni değeri oluşturmak
üzere o anki sıra değerine eklenecek değeri
belirtmek için kullanılır. Bir pozitif değer
bir artan değerli liste, negatif bir değer ise azalan
değerli bir liste oluşturacaktır.
Öntanımlı değer 1'dir.
- asgarideğer, NO MINVALUE
- İsteğe bağlı MINVALUE
asgarideğer deyimi üretilen bir kayıt
listesinin asgari sıra değerini belirlemekte
kullanılır. Belirtilmezse ya da NO MINVALUE
belirtilirse, öntanımlı sıra değeri
kullanılır. Öntanımlı değer
artan değerli bir liste için 1, azalan değerli bir
liste için 2-1'dir.
- azami_değer, NO MAXVALUE
- İsteğe bağlı MAXVALUE
azami_değer deyimi üretilen bir kayıt
listesinin azami sıra değerini belirlemekte
kullanılır. Belirtilmezse ya da NO MAXVALUE
belirtilirse, öntanımlı sıra değeri
kullanılır. Öntanımlı değer
artan değerli bir liste için 2-1, azalan değerli bir
liste için -1'dir.
- başlangıç
- İsteğe bağlı START WITH
başlangıç deyimi kayıt listesinin
başlangıcını belirtmek için
kullanılır. Öntanımlı
başlangıç değeri, artan değerli bir
liste için asgarideğer, azalan değerli bir
liste için azami_değer'dir.
- satır_sayısı
- İsteğe bağlı CACHE
satır_sayısı deyimi daha
hızlı erişim için sıralı listeyi
saklamak üzere bellekte yer ayrılmasını ve
ilklendirilmesini sağlar. En az değer 1'dir ve bu
ayrıca öntanımlıdır.
- CYCLE, NO CYCLE
- CYCLE seçeneği, artan bir değerli bir listede
azami_değer, azalan değerli bir listede
asgarideğer aşıldığında
tekrar başlangıca dönülmesini sağlar.
NO CYCLE belirtilmişse, bir nextval
çağrısı bir listenin sonunda
yapıldığında bir hata
döndürecektir. Ne CYCLE ne de NO CYCLE
belirtilmişse, NO CYCLE
öntanımlıdır.
EK BİLGݶ
Bir kayıt listesini silmek için
DROP SEQUENCE
kullanın.
Satır listeleri bigint aritmetiğine tabidirler,
dolayısıyla listedeki satır sayısı sekiz
baytlık tamsayı genişliğini (-9223372036854775808
.. 9223372036854775807) aşamaz. Bazı eski platformlarda sekiz
baytlık tamsayılara derleyici desteği
olmadığından mecburen integer aritmetiği
(-2147483648 .. +2147483647 aralığı)
kullanılır.
Çok sayıda oturum tarafından ortaklaşa
kullanılacak bir kayıt listesi için
kayıt_sayısı 1'den büyük
seçilirse, umulmadık sonuçlar ortaya
çıkabilir. Herhangi bir oturum bu sıralama
değişkenine eriştiği her bir defa için bir
dizi değere yer ayırıp, orada saklar ve sıralama
nesnesine ait last_value değerini bir artırır. Bundan
sonraki
kayıt_sayısı-1 defalık
erişimde mevcut kayıt listesine dokunmadan değerler
için önceden ayrılmış yerler
kullanılır. Ayrılmış ama
kullanılmamış yerler var ise bunlar boşa gider ve
oturum bittiğinde kayıt listesinde boşluklar
kalmış olur.
Bunun yanında farklı oturumlar için farklı
sıralama değerleri belirlenmesi garanti edilmiş
olmasına rağmen bütün oturumlar dikkate
alındığında bunlar bir sıra takip
etmeyebilir. Örneğin,
kayıt_sayısı
için 10 belirtilmiş olsun, A oturumu 1 den 10 a kadar
sıra değeri ayırmış ve nextval=1
döndürmüş olsun. Daha sonra B oturumu da 11 den 20
ye kadar sıra değeri ayırmış olsun ve A
oturumunun değer döndürmesini beklemeden nextval=11
döndürmüş olsun. Burada,
kayıt_sayısı=1 değeri için
döndürülen nextval değerleri bir sıra takip
ederken 1'den büyük
kayıt_sayısı
değerleri için bu garanti edilemez, sadece üretilen
değerlerin birbirinden farklı değerler olacakları
garanti edilebilir. Ayrıca last_value değeri de henüz
nextval tarafından döndürülmüş
olmasa da herhangi bir oturum tarafından ayrılmış
son değeri içerir.
Diğer bir önemli husus, ayrılarak belleğe
alınmış değerler kullanılana kadar
üzerinde setval uygulanan bir oturumun diğer oturumlar
tarafından uyarılmayacağıdır.
ÖRNEKLER¶
101'den başlayacak ve artan sıralı olacak serial isimli
kayıt listesininin oluşturulması:
CREATE SEQUENCE serial START 101;
Bir kayıt listesinden sonraki kaydın seçilmesi:
SELECT nextval('serial');
nextval
---------
114
Bu kayıt listesinin bir
INSERT cümlesinde
kullanılması:
INSERT INTO distributors VALUES (nextval('serial'), 'nothing');
Kayıt listesi değerinin bir
COPY FROM sonrasında
güncellenmesi:
BEGIN;
COPY distributors FROM 'input_file';
SELECT setval('serial', max(id)) FROM distributors;
END;
UYUMLULUK¶
CREATE SEQUENCE, SQL:2003'de belirtilmiştir. PostgreSQL
aşağıdaki durumlar dışında
standartla uyumludur:
- ·
- Standardın AS <veri türü> ifadesi
desteklenmemektedir.
- ·
- Sonraki değerin sağlanması, standardın NEXT
VALUE FOR ifadesi yerine nextval() işlevi kullanılarak
yapılır.
ÇEVİREN¶
Nilgün Belma Bugüner <nilgun (at)
belgeler·gen·tr>, Mart 2005