Re: inet , min/max

From: Volkan YAZICI <yazicivo(at)ttnet(dot)net(dot)tr>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: inet , min/max
Date: 2006-08-10 09:06:29
Message-ID: 20060810090629.GF1407@alamut.tdm.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

On Aug 10 11:42, Timu EREN wrote:
> İlk olarak ikinci e-postanızda verdiğiniz yanıtı denedim ve açıkcası
> tam olarak istediğim sonucu elde ettim, size yardımlarınızdan dolayı
> çok teşektür ederim,

Timu'cum bu "siz" ayaklarını geçelim istersen. ;-) Ben sana Mecidiyeköy
deyim, Kadıköy otobüs durakları deyim, gece saat 12 sularıydı deyim, sen
anla.

> Şimdi problemin çözümü için kullandığınız yolu anlamak gerekiyor ki
> bir dahaki sefere daha kolay çözülebilinsin. ilk önce bir fonsiyon
> oluşturuyoruz ve inet veri tipi döndürüyor

Doğru.

> iki parametre aldığı
> halde kullanılırken tek parametre ile kullanıyoruz

Hayır. PostgreSQL herhangi bir fonksiyonu çağırdığınızda, onun pg_proc
içinde yer alan fonksiyonlardan hangisi olduğunu şu şekilde karar
veriyor: fonksiyon adı + fonksiyon parametreleri.

Bu durumda max(inet) çağrısında bulunduğumuz zaman, PostgreSQL bizim
oluşturduğumuz max(inet, inet) fonksiyonunu değil, max(inet)
aggregator'ını çağırıyor.

> içerisinde "CASE
> WHEN" ile büyüklük kontrolü yapılıyor ve hangisi büyük ise o geri
> döndürülüyor.

Aynen öyle.

> ancak anlamadığım şey ikinci parametrenin nereden
> geldiği ve "CREATE AGGREGATE" tanımlamasının ne olduğu.

CREATE AGGREGATE, PostgreSQL tarafından sağlanan aggregate oluşturmak
için kullanılan bir (standart olmayan) SQL komutudur. Kendisi hakkında
ayrıntılı bilgi için PostgreSQL dökümantasyonn

Yukarıda CREATE
AGGREGATE max (...); ile ne yaptığımızı kabaca açıklayacak olursam:

CREATE AGGREGATE max (
basetype = inet, -- Diyoruz ki, oluşturulacak aggregator veri tipi
-- olarak inet kabul edecek.[1]
sfunc = max, -- Okunan her bir değerde birinci parametresi
-- <okunan-değer>, ikinci parametresi
-- <bir-önceki-max-çağrısından-dönen-sonuç>
-- olacak şekilde çağrılacak olan fonksiyon.
stype = inet -- Okunan her bir değerde çağrılan fonksiyonun
-- alacağı ikinci parametrenin tipi.
);

Böylece ilgili satırların hepsi max() fonksiyonuna tabi tutulup
üretilen kümülatif sonuçlar ekrana basılıyor.

Umarım anlatabilmişimdir. Ayrıntılı bilgi için PostgreSQL'in kendi
dökümantasyonundan faydalanabilirsin.

İyi çalışmalar.

In response to

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Koray Bostancı 2006-08-10 09:16:41 Re: postgresql kitap önerisi
Previous Message Volkan YAZICI 2006-08-10 07:09:30 Re: inet , min/max