CREATE SEQUENCE(7) | SQL - Dil Deyimleri | CREATE SEQUENCE(7) |
CREATE SEQUENCE - yeni bir kayıt listesi üreteci tanımlar
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 ]
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:
SELECT * FROM isim;
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.)
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.
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.
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;
CREATE SEQUENCE, SQL:2003'de belirtilmiştir. PostgreSQL aşağıdaki durumlar dışında standartla uyumludur:
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Mart 2005
PostgreSQL |