İSİM¶
CREATE AGGREGATE - yeni bir ortak değer işlevi tanımlar
KULLANIM¶
CREATE AGGREGATE isim (
BASETYPE = girdi_veri_türü,
SFUNC = durum_işlevi,
STYPE = durum_veri_türü
[ , FINALFUNC = son_işlev ]
[ , INITCOND = ilk_değer ]
)
AÇIKLAMA¶
CREATE AGGREGATE yeni bir ortak değer işlevi
tanımlar. Temel ve çok kullanılan ortak değer
işlevleri dağıtıma dahil edilmiş ve bunlar
http://www.postgresql.org/docs/8.0/static/functions-aggregate.html adresinde
açıklanmıştır. Eğer yeni
türlerin tanımlanması ya da
dağıtımla gelmeyen bir ortak değer işlevine
ihtiyaç olursa istenen özellikleri sağlamak için
CREATE AGGREGATE kullanılabilir.
Bir şema ismi verilmişse (
CREATE AGGREGATE myschema.myagg
... gibi), ortak değer işlevi belirtilen şema
içinde oluşturulur.
Bir ortak değer işlevi, ismi ve girdi veri türü ile
tanımlanır. Eğer iki ortak değer işlevi
farklı veri türleri ile
çalışıyorlarsa, aynı şema
içinde aynı isimle tanımlanabilir. Ayrıca, bir
ortak değer işlevi gerek ismi gerekse girdi veri
türü bakımından aynı şema
içindeki sıradan işlevlerden de farklı
olmalıdır.
Bir ortak değer işlevi bir ya da iki sıradan
işlevden oluşur:
durum_işlevi ile belirtilen bir
durum geçiş işlevi ve
son_işlev ile
isteğe bağlı olarak belirtilebilen bir son hesap
işlevi. Bunlar şöyle kullanılır:
durum_işlevi( dahili_durum, sonraki-veri-öğesi )
---> sonraki-dahili-durum
son_işlev( dahili_durum )
---> ortak-değer
PostgreSQL ortak değerin o anki dahili durumunu saklamak üzere
durum_veri_türü ile belirtilen veri türünde
bir geçici değişken oluşturur. Her girdi
öğesinde, yeni bir dahili durum değerini hesaplamak
üzere durum geçiş işlevi
çağrılır. Tüm veri işlendikten
sonra, döndürülecek ortak değeri hesaplamak
için son işlev çağrılır. Eğer
bir son işlev yoksa, son durum değeri olduğu gibi
döndürülür.
Bir ortak değer işlevine dahili durum değeri için
bir ilk değer olarak, bir
ilk_değer sağlanabilir.
Bu veritabanında text türünde bir sütun olarak
belirtilir ve saklanır, fakat bu, durum değerinin veri
türündeki bir sabitin geçerli bir harici gösterimi
olmalıdır. Eğer verilmezse, durum değeri NULL
olarak ayrılır.
Eğer durum geçiş işlevi argümanlarına
bağımlı olarak bildirilmişse, NULL girdilerle
çağrılamaz. Böyle bir geçiş
işleviyle cümle
çalıştırıldığında
davranışı şöyle
açıklayabiliriz. NULL girdi değerleri
yoksayılır (işlev
çağrılmamıştır ve önceki
durum değeri beklemektedir). Eğer ilk durum değeri NULL
ise, ilk NULL olmayan girdi değeri durum değeri
yapılır ve geçiş işlevi ikinci NULL olmayan
girdi değeriyle çağrılır. Bu, max gibi
ortak değer işlevlerini gerçeklerken
kullanışlıdır. Bu davranış sadece
durum_veri_türü ile
girdi_veri_türü
aynı ise kullanılabilir. Bu veri türleri farklı
olduğunda, ya NULL olmayan bir
ilk_değer ya da
argümanlarına bağımlı olmayan bir
geçiş işlevi sağlamalısınız.
Eğer durum geçiş işlevi argümanlarına
bağımlı değilse, koşulsuz olarak her girdi
değeriyle çağrılabilecek, NULL girdi
değerleriyle ve kendinin NULL geçiş değerleriyle
çalışacaktır. Bu, işlev
yazarının, ortak değerin boş değerlerle
elde edilebilmesi bakımından tam denetime sahip olmasıyla
mümkün olur.
Eğer son işlev argümanlarına
bağımlı olarak bildirilmişse, son durum
değeri NULL olduğunda çağrılmayacak; bunun
yerine kendiliğinden bir NULL sonuç
döndürülecektir. (Şüphesiz bu,
argümanlarına bağımlı olarak işlem
yapabilen işlevler için normal bir
davranıştır.) Her durumda, bir son işlev bir NULL
değer döndürecek bir seçeneğe sahip
olabilir. Örneğin, avg işlevinin son işlevi
sıfır girdi satırı varsa, NULL
döndürür.
PARAMETRELER¶
- isim
- Oluşturulacak ortak değer işlevinin ismi (şema
nitelemeli olabilir).
- girdi_veri_türü
- Bu ortak değer işlevinin üzerinde işlem
yapacağı girdinin veri türü. Girdi
değerlerinin türüyle ilgilenmeyen bir ortak
değer işlevi için (count(*) gibi), "ANY"
olarak belirtilebilir.
- durum_işlevi
- Her girdi değeri için çağrılacak durum
geçiş işlevinin ismi. Bu normalde iki
argümanlı bir işlevdir; ilk argümanı
durum_veri_türü türünde, ikincisi ise
girdi_veri_türü türündedir. Eğer
bir ortak değer işlevi girdi veri türü ile
ilgilenmiyorsa işlev durum_veri_türü
türünde tek bir argüman alabilir. Her durumda
işlev durum_veri_türü türünde
bir değer döndürmelidir. Bu işlev o anki durum
değerini ve o anki girdi veri öğesini alıp,
sonraki durum değeri ile döner.
- durum_veri_türü
- Durum geçiş işlevinin durum değerinin veri
türü.
- son_işlev
- Tüm girdi değerleri işleme sokulup, ortak
değer hesaplanacağı zaman
çağrılan son işlevin ismi. İşlev
durum_veri_türü türünde tek bir
argüman almalıdır. Ortak değer
işlevinin dönüş türü bu
işlevin dönüş türü olarak
tanımlanır. Eğer son_işlev
belirtilmemişse, son durum değeri işlevin
dönüş değeri olarak kullanılır
ve dönüş türü
durum_veri_türü olur.
- ilk_değer
- Durum değeri için ilk değer.
durum_veri_türü türünde kabul
edilebilecek bir dizge sabit olmalıdır. Belirtilmezse, durum
değeri NULL olarak ayrılır.
CREATE AGGREGATE deyiminin parametrelerini tam da yukarıdaki
sırasıyla yazmak şart değildir, istenen
sırada yazılabilir.
ÖRNEKLER¶
http://www.postgresql.org/docs/8.0/static/xaggr.html adresine
bakınız.
UYUMLULUK¶
CREATE AGGREGATE bir PostgreSQL oluşumudur. SQL standardı
kullanıcı tanımlı ortak değer
işlevlerini desteklememektedir.
İLGİLİ BELGELER¶
ALTER AGGREGATE [
alter_aggregate(7)],
DROP AGGREGATE [
drop_aggregate(7)].
ÇEVİREN¶
Nilgün Belma Bugüner <nilgun (at)
belgeler·gen·tr>, Nisan 2005