search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
4.2k gösterim
pl/sql'de procedure ve function kullanmakta kararsiz kaldim. Hangi durumda hangisi tercih edilmeli?
Veri Tabanı kategorisinde 2.0k puan
düzenledi

1 cevap

0 oy

Procedure ve function programlama dillerinde önemli bir konudur. Hemen hemen pek bir farkı yoktur. Tek ve önemli farkı function bir geri dönüş değeri verir ve direk değişken gibi kullanılabilir. Procedure'de out parameter destekleniyorsa alınır ama bir değişkene atamak gerekir. Bir örnekle göstermek gerekirse;

int i = toplam(5, 3); // function
toplam(5, 3, i); // procedure

Aslında her satırda tek bir işlem yapılacaksa pek farkı yok. Ama procedure'de out(çıkış) parametresi verdiğinden emin olmak lazım. Keza kavram olarak java'da direk olarak out parametresi yoktur. İkinci örnek primitive (ilkel) tipler için java'da desteklenmez. Her hemen her zaman birincisini kullanmak lazım.

Şimdi özellikle plsql'de ne işimize yarar onu anlayalım. Melesa bir sorgu yazacaksınız ve o sorgunun içinde bir işlem yaptırmanız lazım, örneğin büyük karakterleri büyük harfe çevirme olsun. Fonksiyon ve procedure ile farklı şekillerde yazmayı deneyelim

select buyukHarf(adı) from uyeler 

Burada buyukHarf bizim bir fonksiyonumuz her bir üye için tek tek çalışacaktır ve fonksiyon değişken gibi kullanıldığı ve değeri verdiği için direk sonucu göreceğiz.

Aynı durum procedure için nasıl çalışır? Kısaca çalışmaz. Denemek için 

select buyukHarf(adı, sonuç) from uyeler 

Diye bir select yazıp, buyukHarf adında bir procedure oluşturabilirsin. Çalıştır dediğin zaman direk hata verecektir.

Programlama dili içinden örnek yapalım. Mesela sonuc = a*b + ( a^4) işlemini yazmak istiyorsunuz

sonuc = a*b + (power(a, 4)) // şeklinde power fonksiyonu ile kullanabilirsiniz.

Procedure ile yazmak istersek
int ust;
power(a, 4, ust);
sonuc = a*b + ust;

Bu şekilde bir kod yazmamız gerekir.

Herhalde açık olmuştur sanıyorum...

6.2k puan
Procedure vs Function
ProcedureFunction
Output olarak hiç değer döndürmeyeceği gibi, bir veya birden fazla da değer döndürebilir.Output olarak tek bir değer geri döndürür
Prosedür için insert, delete, update gibi DML komutları çalıştırılabilir. DML komutları çalıştırılamaz
Prosedürün içinden fonksiyonlar çağrılabilirFonksiyon içinden prosedür çağrılamaz
Olası hatalar(exception)lar try/catch blokları kullanılarak yönetilebilir(handle edilir)Fonksiyonlarda try/catch kullanılamaz

İlgili sorular

0 oy
1 cevap 564 gösterim
564 gösterim
PL/SQL developer ile bir paket içinde , yeni bir procedure yazdım. Test etmek için sağ tıkladığmıda "Test" seçeneği gelmiyor. Test edemiyorum, sebebi ne olabilir?
18 Ekim 2016 Veri Tabanı kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
3 cevap 1.5K gösterim
1.5K gösterim
Selamlar, Table partition, global index ve local index terimleri ne ifade ediyor. Teşekkürler
15 Şubat 2018 Veri Tabanı kategorisinde erkanerkisi 211 puan sordu
0 oy
1 cevap 296 gösterim
296 gösterim
Oracle veri tabanında result_cashe diye bir yapıya denk geldim. Bunun ne avantajı var? Buna benzer başka avantaj sağlayan yöntemler var mı bilindik
7 Mayıs 2018 Veri Tabanı kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 348 gösterim
348 gösterim
ana tablo sağdaki soldaki gibi bir sorgu istiyor yardımcı olurmusunuz sql komutu lazım çok acil
5 Mayıs 2020 Veri Tabanı kategorisinde SEFA SEVİM 104 puan sordu
0 oy
1 cevap 487 gösterim
487 gösterim
Elimde CUSTOMER tablosu var ve bunun için rastgele 20 veriyi nasıl getiririm ?
28 Ocak 2020 Veri Tabanı kategorisinde tolgacelik.art 2.0k puan sordu