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

PostgreSQL                                                                                    CREATE FUNCTION(7)