Provided by: manpages-tr_1.0.5.1-2_all bug

İ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

PostgreSQL                                                                                   CREATE AGGREGATE(7)