Provided by:
manpages-tr_1.0.5.1-2_all 
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