19 Aug

MySql de Stored Procedure

Öncelikle stored procedure nedir, ona bakalım. Stored procedure nam-ı diğer saklı yordamlar, derlenmiş olarak veritabanında saklanan sql cümlecikleridir. Kabaca bir sql sorgusunun yaşam döngüsünü şöyle ele alabiliriz:

Öncelikle sql sorgunuz istemci vasıtasıyla ağ üzerinden veya localden veritabanı sunucumuza iletilir

-Sunucumuz sql cümleciğimize syntax kontrolü yapar

-Kontrolden geçen sorgu derlenerek çalıştırılır

-Dönen sonuç istemciye geri iletilir

Stored procedure kullandığımızda ise, syntax kontrolü ve derleme aşamaları sadece bir defaya mahsus olarak stored procedure u oluşturduğumuzda gerçekleşir. Daha sonra çağrıldığında ise derlenmeden direkt çalıştırılırlar. Şimdi Mysql ile stored procedure nasıl oluşturulur ona bakalım. Mysql5 ile birlikte Grafik Kullanıcı Arayüzüne sahip bir yönetimime de kavuştuk. Query Browser denen bu araçla Mysql de tablo,veritabanı,trigger,stored procedure vs oluşturabilmekteyiz.

Şimdi Query Browser açarak stored procedure oluşturalım.

Yukarıdaki resimde de görüldüğü gibi veritabanımıza sağ tıklayarak “Create New Procedure/Function” ile bir fonksiyon veya procedure oluşturabilmekteyiz.

Buraya tıkladıktan sonra karşımıza aşağıdaki gibi bir pencere gelecektir :

Bu penceredeki yere procedure/function ismini yazıyoruz ve ne oluşturacaksak (Procedure/Function) ilgili butona tıklıyoruz ve bize aşağıdakine benzer bir kod şablonu çıkarmaktadır.

Burada bizi ilgilendiren kısım BEGIN ve END arasında kalan kısımdır. Sql cümleciklerimizi buraya yazacağız. Burada hem mysqldeki stored procedure mantığını daha iyi kavrayabilmek için hem de stored procedurlere nasıl parametre aktarılacağını göstermek için çok kolay bir procedure(yordam) oluşturacağım :

Yukarıdaki kod bloğunda iki sayı ile dört işlem gerçekleştiren bir procedure yazmış olduk.

Stored procedur oluştururken dikkat etmemiz gereken iki püf nokta var;

Parametrenin yönü (IN,OUT,INOUT) :

IN olarak tanımlanmış parametre sadece giriş yönündedir bu değişkene procedure tarafından değer atanmaz salt okunurdur.

OUT olarak tanımlanmış parametre çıkış yönündedir, bu değişkene procedure tarafından değer atanır, değer alınmaz.

INOUT olarak tanımlanmış parametre hem giriş hem de çıkış yönündedir. Yani bu tipteki bir parametre ile hem procedure içerisine veri gönderilebilir hem de bu parametreye procedure tarafından değer atanmasına olanak sağlayarak veri döndürmesine olanak verir.

İkinci püf noktaysa verilen parametrelerin değer tipleridir. Procedure parametre aktarırken parametrenin hangi veri tipinde olacağı (int,char,text,date vb) belirtilmelidir.

Ve geriye kalan kısım normal SQL cümlecikleri ve veritabanına ait kontrol vb komutlarından oluşmaktadır. Yukarıdaki procedurumuz ile verilen iki sayıyı belirtilen işleme tabi tutarak sonucu görüntülemekteyiz.

Proceduru Query Browser da call dortislem(10,2,4); şeklinde çalıştırarak denediğinizde 5 sonucunu alacağız.

Görüldüğü gibi zamandan tasarruf etmekle kalmayıp, kod karmaşasından da kurtulmuş oluyoruz. Şimdilik bu kadar, kendinize iyi bakın…