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

İSİM

       CREATE FUNCTION - yeni bir işlev tanımlar

KULLANIM

       CREATE [OR REPLACE] FUNCTION isim ( [ [ arg_ismi ] arg_tr [, ...] ] )
           RETURNS dn_tr
         { LANGUAGE dil_ismi
           | IMMUTABLE | STABLE | VOLATILE
           | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
           | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
           | AS 'tanm'
           | 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_tr
              İş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.stun_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.

       dn_tr
              İş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.stun_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.

       tanm  İş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