İ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