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

ISIM

       CREATE FUNCTION - yeni bir islev tanimlar

KULLANIM

       CREATE [OR REPLACE] FUNCTION isim ( [ [ arg_ismi ] arg_t"ur"u [, ...] ] )
           RETURNS d"on"u,s_t"ur"u
         { LANGUAGE dil_ismi
           | IMMUTABLE | STABLE | VOLATILE
           | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
           | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
           | AS 'tanim'
           | AS 'nesne_dosyasi', 'ilintileme_sembol"u'
         } ...
           [ WITH ( "oznitelik [, ...] ) ]

A,CIKLAMA

       CREATE FUNCTION yeni bir islev tanimlar. CREATE OR REPLACE FUNCTION ise
       ya yeni bir islev olusturur ya da bir mevcut islev tanimini degistirir.

       Eger bir sema ismi belirtilmisse, islev belirtilen semada  olusturulur.
       Aksi takdirde, gecerli olan semada olusturulur. Yeni islevin ismi, ayni
       sema icindeki ayni arguman turlerine sahip  bir  islev  ismi  ile  ayni
       olmamalidir.  Farkli  arguman  turlerine  sahip ayni isimdeki islevlere
       izin verilir.

       Mevcut bir islevin tanimini guncellemek icin CREATE OR REPLACE FUNCTION
       kullanilir.  Ancak,  bir  islevin  ismini  ya  da  arguman turlerini bu
       yontemle degistirmek mumkun degildir (eger denerseniz, aslinda ayri  ve
       yeni  bir  islev  olusturmus  olursunuz).  Ayrica,  CREATE  OR  REPLACE
       FUNCTION ile mevcut bir islevin donus turunu  degistirmeye  calismayin,
       bunu yapmak icin islevi once silmeli, sonra yeniden olusturmalisiniz.

       Eger bir islevi silip yeniden olusturursaniz, yeni islev eskisiyle ayni
       olmaz; mevcut kurallari, sanal  tablolari,  tetikleri,  vs.  de  silmis
       olursunuz.  Bunlari koruyarak islev tanimini degistirmek icin CREATE OR
       REPLACE FUNCTION kullanin.

       Islevi tanimlayan kullanici ayni zamanda sahibi olur.

PARAMETRELER

       isim   Tanimlanacak islevin ismi (sema nitelemeli olabilir).

       arg_ismi
              Bir argumanin  ismi.  Bazi  diller  (simdilik  sadece  PL/pgSQL)
              arguman ismini islev govdesinde kullanmanizi ister. Diger diller
              icin arguman ismi sadece ek bir bilgidir.

       arg_t"ur"u
              Islevin (varsa) argumanlarinin  veri  turleri  (sema  nitelemeli
              olabilir).  Arguman turleri temel, birlesik veya veri alani turu
              olabilecegi gibi  bir  tablo  sutununun  veri  turune  basvurulu
              olabilir.

              Gerceklenim  diline  bagimlilik  sebebiyle, cstring gibi tanimli
              turler de belirtilebilir. Arguman  turu  olarak  tanimli  turler
              kismen  olabilecegi  gibi  SQL  veri  turlerinin tamamen disinda
              turler olabilirler.

              Bir sutun turune  basvuruyu  tablo_ismi.s"utun_ismi%TYPE  yazarak
              belirtebilirsiniz.  Bu ozelligin kullanimi bazan bir islevin bir
              tablo    tanimindaki    degisikliklerden    bagimsiz    olmasini
              saglayabilir.

       d"on"u,s_t"ur"u
              Islevin  donus  degerinin  veri turu (sema nitelemeli olabilir).
              Donus turu temel, birlesik veya veri alani turu olabilecegi gibi
              bir tablo sutununun veri turune basvurulu olabilir.

              SETOF  degistiricisi  islevin  tek  bir  oge  ile degil, bir oge
              kumesi ile donecegini belirtir.

              Bir sutun turune  basvuruyu  tablo_ismi.s"utun_ismi%TYPE  yazarak
              belirtebilirsiniz.

       dil_ismi
              Islevin   gerceklendigi   dilin  ismi.  SQL,  C,  internal  veya
              kullanici  tarafindan  belirtilecek  yordamsal  dillerden   biri
              olabilir.   Geriye   uyumluluk   icin   isim  tek  tirnak  icine
              alinabilir.

       IMMUTABLE, STABLE, VOLATILE
              Calisma ani eniyilemesi icin islevin coklu  degerlendirmelerinin
              tek   bir   degerlendirme  ile  degistirilmesinin  guvenli  olup
              olmayacagini belirlerler. En  fazla  bir  secim  belirtilebilir.
              Bunlardan hicbiri belirtilmemisse VOLATILE ontanimlidir.

              IMMUTABLE  islevin  ayni  arguman degerleriyle daima ayni sonucu
              dondurecegini  belirtir;  yani,  argumanlarinin  veritabanindaki
              degerlerden  faydalanmayacagini  ya  da  arguman  olarak  acikca
              belirtilmemis  bilgileri  kullanmayacagini  belirtir.  Eger   bu
              secenek  belirtilmisse,  islevin  tamamen  sabit  argumanli  her
              cagrisi aninda islev degeriyle degistirilebilir.

              STABLE tek  bir  tablo  taramasi  icinde  islevin  ayni  arguman
              degerleri  icin  tutarli  olarak  ayni sonucu dondurecegini, ama
              sonucun  SQL   cumleleriyle   degisebilecegini   belirtir.   Bu,
              sonuclari  veritabani aramalarina, parametrelerine, v.s. bagimli
              islevler icin un uygun secimdir. Ayrica, degerleri  bir  hareket
              icinde degismediginden current_timestamp ailesindeki islevler de
              STABLE olarak nitelenmistir.

              VOLATILE islevin degerinin tek bir tablo  taramasi  icinde  bile
              degisebilecegini,  dolayisiyla hicbir eniyileme yapilamayacagini
              belirtir. Gorece birkac veritabani islevi bu  anlamda  oynaktir;
              bazi  ornekler:  random(),  currval(),  timeofday().  Yan etkiye
              sahip her islevin, islev sonucu  tahmin  edilebilir  olsa  bile,
              eniyilenmesini   onlemek   icin   VOLATILE  olarak  siniflanmasi
              gerektigini unutmayin; setval() buna bir ornektir.

              Ek ayrintilar icin
              http://www.postgresql.org/docs/8.0/static/xfunc-volatility.html
              adresine bakiniz.

       CALLED ON NULL INPUT, RETURNS NULL ON NULL INPUT, STRICT
              CALLED  ON  NULL  INPUT (ontanimlidir)  islevin bazi argumanlari
              NULL oldugunda  normal  olarak  cagrilacagini  belirtir.  Bundan
              sonra   islev  yazarinin  yapacagi  NULL  degerleri  sinamak  ve
              geregini yapmaktir.

              RETURNS  NULL  ON  NULL   INPUT   veya   STRICT   ise   islevin,
              argumanlarindan  herhangi  birinin  NULL  olmasi durumunda daima
              NULL   deger   dondurecegini   belirtir.   Eger    bu    secenek
              belirtilmisse,     NULL     argumanlarin     varliginda    islev
              calistirilmayacak,   onun   yerine   hemen   bir   NULL    deger
              dondurulecektir.

       SECURITY INVOKER islevin kendisini cagiran kullanicinin izinleriyle calistirilacagini belirtir. SECURITY DEFINER ise islevin kendisini olusturan kullanicinin izinleriyle calistirilacagini belirtir.

              EXTERNAL sozcugu SQL uyumlulugu icin varsa da istege bagli olmasindan dolayi, SQL'in tersine bu ozellik harici islevlere uygulanmaz.

       tanim  Islevi tanimlayan bir dizge sabiti; anlamlandirilmasi dile bagimlidir. Bir dahili islev ismi olabilecegi gibi bir nesne dosyasinin yolu, bir SQL komutu veya bir yordamsal dilde yazilmis bir metin olabilir.

       nesne_dosyasi, ilintileme_sembol"u
              AS sozcugunun bu bicimi ozdevimli yuklenebilen C dili islevleri icin, islevin C dili kaynak kodundaki ismi, bir SQL islevinin ismiyle ayni degilse, kullanilir. nesne_dosyasi dizgesi ile ozdevimli yuklenebilen nesneyi iceren dosyanin ismi belirtilir. ilintileme_sembol"u ise islevin C dili kaynak kodundaki ismi olarak islevin ilintileme semboludur. Eger ilintileme sembolu belirtilmezse, tanimlandigi SQL islevinin ismiyle ayni oldugu kabul edilir.

       "oznitelik
              Islev hakkinda bilgi iceren istege bagli parcalari belirtmenin tarihi bir yolu. Burada belirtilebilecek oznitelikler sunlardir:

              isStrict
                     STRICT veya RETURNS NULL ON NULL INPUT'a esdegerdir.

              isCachable
                     IMMUTABLE'in atil olmus esdegeridir; hala geriye uyumluluk adina kabul edilmektedir.

              Oznitelik isimleri harf buyuklugune duyarlidir.

EK BILGI

       Islevlerin yazilmasi hakkinda bilgi edinmek icin
       http://www.postgresql.org/docs/8.0/static/xfunc.html adresine bakiniz.

       Girdi  argumanlari  ve  donus  degeri icin tamamen SQL turu sozdizimine
       izin verilmektedir. Ancak, temel islev gercekleniminin sorumlusu oldugu
       tur  belirtiminin bazi ayrintilari (sayisal turlerdeki hassasiyet alani
       gibi) CREATE FUNCTION tarafindan  sessizce  sineye  cekilir  (yani,  ne
       taninir ne de uygulanir).

       PostgreSQL,  argumanlari  farkli  olmak  sartiyla  islevler  icin  ayni
       isimlerin  kullanimina  izin  verir.  Ancak,  C   dilinde   tum   islev
       isimlerinin  farkli  olmasi  gerekir,  bu  nedenle bu tur C islevlerine
       farkli C isimleri vermelisiniz. (ornegin, C isimlerinin parcasi  olarak
       arguman turleri kullanilabilir).

       CREATE  FUNCTION  ayni nesne dosyasi icin defalarca cagrildiginda dosya
       sadece bir kere yuklenir. Dosyayi tekrar tekrar yuklemeniz  gerekiyorsa
       (gelistirme amacli) LOAD [load(7)] komutunu kullanin.

       Kullanici    tanimli    islevleri    kaldirmak   icin   DROP   FUNCTION
       [drop_function(7)] kullanilir.

       Islev  tanimlarini  yazarken  tek  tirnak  icine  almak  yerine   dolar
       isaretleri  arasinda  yazmak  cogunlukla  daha  cok  tercih  edilen bir
       yontemdir
       (http://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-DOLLAR-QUOTING
       adresine    bakiniz).   Dolar   isaretleri   arasinda   yazma   yontemi
       kullanilmadigi  zaman,  islev  tanimi  icindeki  tek   tirnaklar   veya
       tersbolulerin oncelenmesi gerekir.

       Bir  islevin  tanimlanabilmesi  icin  kullanicinin  dil  uzerinde USAGE
       iznine sahip olmasi gerekir.

"ORNEKLER

       Burada,  baslangic  olarak  yardimci  olacak  onemsiz  bir  ornege  yer
       verilmistir. Daha fazla bilgi edinmek ve baska ornekler icin
       http://www.postgresql.org/docs/8.0/static/xfunc.html adresine bakiniz.

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

       PL/pgSQL dilinde bir arguman ismi kullanarak bir tamsayi arttirimi:

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

UYUMLULUK

       SQL:1999  ve  sonrasinda  bir  CREATE  FUNCTION  tanimlidir. PostgreSQL
       surumu  de  benzer  olmakla  birlikte  tamamen  uyumlu   degildir.   Ne
       oznitelikler tasinabilirdir ne de farkli diller kullanilabilmektedir.

ILGILI BELGELER

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

,CEVIREN

       Nilgun Belma Buguner <nilgun (at) belgeler.gen.tr>, Nisan 2005