- isim
Tanımlanacak işlevin ismi (şema nitelemeli olabilir).
- arg_ismi
Bir argümanın ismi. Bazı diller (şimdilik sadece PL/pgSQL) argüman ismini işlev gövdesinde kullanmanızı ister. Diğer diller için argüman ismi sadece ek bir bilgidir.
- arg_türü
İşlevin (varsa) argümanlarının veri türleri (şema nitelemeli olabilir). Argüman türleri temel, birleşik veya veri alanı türü olabileceği gibi bir tablo sütununun veri türüne başvurulu olabilir.
Gerçeklenim diline bağımlılık sebebiyle, cstring gibi tanımlı türler de belirtilebilir. Argüman türü olarak tanımlı türler kısmen olabileceği gibi SQL veri türlerinin tamamen dışında türler olabilirler.
Bir sütun türüne başvuruyu tablo_ismi.sütun_ismi%TYPE yazarak belirtebilirsiniz. Bu özelliğin kullanımı bazan bir işlevin bir tablo tanımındaki değişikliklerden bağımsız olmasını sağlayabilir.
- dönüş_türü
İşlevin dönüş değerinin veri türü (şema nitelemeli olabilir). Dönüş türü temel, birleşik veya veri alanı türü olabileceği gibi bir tablo sütununun veri türüne başvurulu olabilir.
SETOF değiştiricisi işlevin tek bir öğe ile değil, bir öğe kümesi ile döneceğini belirtir.
Bir sütun türüne başvuruyu tablo_ismi.sütun_ismi%TYPE yazarak belirtebilirsiniz.
- dil_ismi
İşlevin gerçeklendiği dilin ismi. SQL, C, internal veya kullanıcı tarafından belirtilecek yordamsal dillerden biri olabilir. Geriye uyumluluk için isim tek tırnak içine alınabilir.
- IMMUTABLE
- STABLE
- VOLATILE
Çalışma anı eniyilemesi için işlevin çoklu değerlendirmelerinin tek bir değerlendirme ile değiştirilmesinin güvenli olup olmayacağını belirlerler. En fazla bir seçim belirtilebilir. Bunlardan hiçbiri belirtilmemişse VOLATILE öntanımlıdır.
IMMUTABLE işlevin aynı argüman değerleriyle daima aynı sonucu döndüreceğini belirtir; yani, argümanlarının veritabanındaki değerlerden faydalanmayacağını ya da argüman olarak açıkça belirtilmemiş bilgileri kullanmayacağını belirtir. Eğer bu seçenek belirtilmişse, işlevin tamamen sabit argümanlı her çağrısı anında işlev değeriyle değiştirilebilir.
STABLE tek bir tablo taraması içinde işlevin aynı argüman değerleri için tutarlı olarak aynı sonucu döndüreceğini, ama sonucun SQL cümleleriyle değişebileceğini belirtir. Bu, sonuçları veritabanı aramalarına, parametrelerine, v.s. bağımlı işlevler için un uygun seçimdir. Ayrıca, değerleri bir hareket içinde değişmediğinden current_timestamp ailesindeki işlevler de STABLE olarak nitelenmiştir.
VOLATILE işlevin değerinin tek bir tablo taraması içinde bile değişebileceğini, dolayısıyla hiçbir eniyileme yapılamayacağını belirtir. Görece birkaç veritabanı işlevi bu anlamda oynaktır; bazı örnekler: random(), currval(), timeofday(). Yan etkiye sahip her işlevin, işlev sonucu tahmin edilebilir olsa bile, eniyilenmesini önlemek için VOLATILE olarak sınıflanması gerektiğini unutmayın; setval() buna bir örnektir.
- CALLED ON NULL INPUT
- RETURNS NULL ON NULL INPUT
- STRICT
CALLED ON NULL INPUT (öntanımlıdır) işlevin bazı argümanları NULL olduğunda normal olarak çağrılacağını belirtir. Bundan sonra işlev yazarının yapacağı NULL değerleri sınamak ve gereğini yapmaktır.
RETURNS NULL ON NULL INPUT veya STRICT ise işlevin, argümanlarından herhangi birinin NULL olması durumunda daima NULL değer döndüreceğini belirtir. Eğer bu seçenek belirtilmişse, NULL argümanların varlığında işlev çalıştırılmayacak, onun yerine hemen bir NULL değer döndürülecektir.
-
[ EXTERNAL ] SECURITY INVOKER
[ EXTERNAL ] SECURITY DEFINER
SECURITY INVOKER işlevin kendisini çağıran kullanıcının izinleriyle çalıştırılacağını belirtir. SECURITY DEFINER ise işlevin kendisini oluşturan kullanıcının izinleriyle çalıştırılacağını belirtir.
EXTERNAL sözcüğü SQL uyumluluğu için varsa da isteğe bağlı olmasından dolayı, SQL'in tersine bu özellik harici işlevlere uygulanmaz.
- tanım
İşlevi tanımlayan bir dizge sabiti; anlamlandırılması dile bağımlıdır. Bir dahili işlev ismi olabileceği gibi bir nesne dosyasının yolu, bir SQL komutu veya bir yordamsal dilde yazılmış bir metin olabilir.
- nesne_dosyası, ilintileme_sembolü
AS sözcüğünün bu biçimi özdevimli yüklenebilen C dili işlevleri için, işlevin C dili kaynak kodundaki ismi, bir SQL işlevinin ismiyle aynı değilse, kullanılır. nesne_dosyası dizgesi ile özdevimli yüklenebilen nesneyi içeren dosyanın ismi belirtilir. ilintileme_sembolü ise işlevin C dili kaynak kodundaki ismi olarak işlevin ilintileme sembolüdür. Eğer ilintileme sembolü belirtilmezse, tanımlandığı SQL işlevinin ismiyle aynı olduğu kabul edilir.
- öznitelik
İşlev hakkında bilgi içeren isteğe bağlı parçaları belirtmenin tarihi bir yolu. Burada belirtilebilecek öznitelikler şunlardır:
- isStrict
STRICT veya RETURNS NULL ON NULL INPUT'a eşdeğerdir.
- isCachable
IMMUTABLE'ın atıl olmuş eşdeğeridir; hala geriye uyumluluk adına kabul edilmektedir.
Öznitelik isimleri harf büyüklüğüne duyarlıdır.