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

İSİM

       CREATE FUNCTION - yeni bir işlev tanımlar

KULLANIM

       CREATE [OR REPLACE] FUNCTION isim ( [ [ arg_ismi ] arg_türü [, ...] ] )
           RETURNS dönüş_türü
         { LANGUAGE dil_ismi
           | IMMUTABLE | STABLE | VOLATILE
           | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
           | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
           | AS 'tanım'
           | AS 'nesne_dosyası', 'ilintileme_sembolü'
         } ...
           [ WITH ( öznitelik [, ...] ) ]

AÇIKLAMA

       CREATE  FUNCTION yeni bir işlev tanımlar. CREATE OR REPLACE FUNCTION ise ya yeni bir işlev
       oluşturur ya da bir mevcut işlev tanımını değiştirir.

       Eğer bir şema ismi belirtilmişse, işlev  belirtilen  şemada  oluşturulur.  Aksi  takdirde,
       geçerli  olan  şemada  oluşturulur.  Yeni  işlevin  ismi,  aynı şema içindeki aynı argüman
       türlerine sahip bir işlev ismi ile aynı olmamalıdır. Farklı argüman türlerine  sahip  aynı
       isimdeki işlevlere izin verilir.

       Mevcut bir işlevin tanımını güncellemek için CREATE OR REPLACE FUNCTION kullanılır. Ancak,
       bir işlevin ismini ya da argüman türlerini bu yöntemle değiştirmek mümkün  değildir  (eğer
       denerseniz,  aslında  ayrı  ve  yeni  bir  işlev  oluşturmuş olursunuz). Ayrıca, CREATE OR
       REPLACE FUNCTION ile mevcut bir işlevin dönüş türünü değiştirmeye çalışmayın, bunu  yapmak
       için işlevi önce silmeli, sonra yeniden oluşturmalısınız.

       Eğer  bir  işlevi  silip  yeniden  oluşturursanız, yeni işlev eskisiyle aynı olmaz; mevcut
       kuralları, sanal tabloları, tetikleri, vs. de silmiş olursunuz.  Bunları  koruyarak  işlev
       tanımını değiştirmek için CREATE OR REPLACE FUNCTION kullanın.

       İşlevi tanımlayan kullanıcı aynı zamanda sahibi olur.

PARAMETRELER

       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.

              Ek ayrıntılar için
              http://www.postgresql.org/docs/8.0/static/xfunc-volatility.html adresine bakınız.

       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.

       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.

EK BİLGİ

       İşlevlerin yazılması hakkında bilgi edinmek için
       http://www.postgresql.org/docs/8.0/static/xfunc.html adresine bakınız.

       Girdi  argümanları  ve  dönüş değeri için tamamen SQL türü sözdizimine izin verilmektedir.
       Ancak, temel işlev gerçekleniminin sorumlusu  olduğu  tür  belirtiminin  bazı  ayrıntıları
       (sayısal  türlerdeki  hassasiyet  alanı  gibi)  CREATE FUNCTION tarafından sessizce sineye
       çekilir (yani, ne tanınır ne de uygulanır).

       PostgreSQL, argümanları farklı olmak şartıyla işlevler  için  aynı  isimlerin  kullanımına
       izin  verir.  Ancak,  C dilinde tüm işlev isimlerinin farklı olması gerekir, bu nedenle bu
       tür C işlevlerine farklı C isimleri vermelisiniz. (örneğin, C isimlerinin  parçası  olarak
       argüman türleri kullanılabilir).

       CREATE  FUNCTION  aynı  nesne  dosyası  için defalarca çağrıldığında dosya sadece bir kere
       yüklenir. Dosyayı tekrar tekrar yüklemeniz gerekiyorsa (geliştirme amaçlı) LOAD  [load(7)]
       komutunu kullanın.

       Kullanıcı tanımlı işlevleri kaldırmak için DROP FUNCTION [drop_function(7)] kullanılır.

       İşlev  tanımlarını yazarken tek tırnak içine almak yerine dolar işaretleri arasında yazmak
       çoğunlukla daha çok tercih edilen bir yöntemdir
       (http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-DOLLAR-QUOTING
       adresine  bakınız).  Dolar  işaretleri  arasında yazma yöntemi kullanılmadığı zaman, işlev
       tanımı içindeki tek tırnaklar veya tersbölülerin öncelenmesi gerekir.

       Bir işlevin tanımlanabilmesi için kullanıcının dil  üzerinde  USAGE  iznine  sahip  olması
       gerekir.

ÖRNEKLER

       Burada,  başlangıç  olarak  yardımcı olacak önemsiz bir örneğe yer verilmiştir. Daha fazla
       bilgi edinmek ve başka örnekler için
       http://www.postgresql.org/docs/8.0/static/xfunc.html adresine bakınız.

           CREATE FUNCTION add(integer, integer) RETURNS integer
               AS 'select $1 + $2;'
               LANGUAGE SQL
               IMMUTABLE
               RETURNS NULL ON NULL INPUT;

       PL/pgSQL dilinde bir argüman ismi kullanarak bir tamsayı arttırımı:

         CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
             BEGIN
                 RETURN i + 1;
             END;
         $$ LANGUAGE plpgsql;

UYUMLULUK

       SQL:1999 ve sonrasında bir CREATE FUNCTION tanımlıdır. PostgreSQL sürümü de benzer olmakla
       birlikte  tamamen  uyumlu  değildir.  Ne  öznitelikler  taşınabilirdir ne de farklı diller
       kullanılabilmektedir.

İLGİLİ BELGELER

       ALTER FUNCTION [alter_function(7)], DROP FUNCTION  [drop_function(7)],  GRANT  [grant(7)],
       LOAD [load(7)], REVOKE [revoke(7)], createlang(1).

ÇEVİREN

       Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005