İ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