Cemre Acar
MySQL Stored Procedure Kullanımı

MySQL Stored Procedure Kullanımı

Bu yazımda MySQL veritabanında Stored Procedure nedir, Stored Procedure oluşturma ve temel olarak Stored Procedure kullanımını MySQL Workbench üzerinde örnekler ile anlatacağım. Daha önceki yazılarım olan Veritabanlarında Sorgulama : SQL’e Giriş ve MySQL Trigger Kullanımı yazılarımı okumadıysanız okumanızı tavsiye ederim. Konuyu uzatmadan ilk olarak Stored Procedure nedir bu soruyla başlayalım. 

Stored Procedure Nedir ?

Stored procedure, kısaca kaydedebileceğimiz hazır halde bir SQL kodudur diyebiliriz. Yani aslında bizi tekrar tekrar SQL kodu yazma zahmetinden kurtarıyor desek yanlış olmaz. Sürekli kullandığımız bir SQL kodunu Stored Procedure olarak oluşturursak ve işimiz düştüğünde çağırıp çalıştırırsak bizim için büyük kolaylık olabilir. O halde birlikte Stored Procedure yapısına bir göz atalım.

Stored Procedure Yapısı

DELIMITER $$
CREATE PROCEDURE TabloGetir()
BEGIN
SELECT * FROM OrnekTablo;
END $$
DELIMITER ;

Yukarıdaki yapı Stored Procedure için gösterilebilecek en temel yapıdır. Tabii ki bir tabloyu getirmek için bir Stored Procedure yazmaya gerek yok. Aşağıda daha karmaşık örnekler verirken daha iyi kavrayabileceğiz.
Şimdi yukarıdaki yapıda TabloGetir() adı ile oluşturduğumuz Stored Procedure’ımızı nasıl çalıştıracağız ona bakalım.



Stored Procedure Çalıştırmak

CALL TabloGetir()

Bu komut ile yazdığımız Stored Procedure’ımızı kolayca çağırıp çalıştırabiliyoruz. Şimdi birlikte farklı örnekler ile bazı temel özelliklerin kullanımına bakalım

Birlikte Stored Procedure Oluşturalım

Ben daha önce oluşturmuş olduğum bir veritabanı üzerinden konuyu anlatmaya çalışacağım. Stored Procedure’ımızı oluştururken kafamız karışmaması için ER Diyagram’ını aşağıya koyuyorum.

Örnek ER Diyagram
 

Not : Bu veritabanını sizin de oluşturmak isteyeceğinizi düşündüğüm için buradaki PDF’e gerekli kodları koydum.

Biz bu veritabanında yapılacak olan otobüs seferlerini detaylıca listeleyecek olursak uzun bir SQL kodu yazmamız gerekli. Bunun için aşağıdaki gibi bir Stored Procedure oluşturursak bize oldukça faydalı olur.

DELIMITER $$
CREATE PROCEDURE SeferSorgula()
BEGIN
SELECT bus_license_plate as Plaka,journey_from as Nereden, journey_to as Nereye,journey_time as Saat, bus_brand as Marka, bus_model as Model FROM Buses, Journeys where Journeys.bus_ID = Buses.bus_ID;END $$
DELIMITER ;

Ardından da Stored Procedure’ımızı çağırdığımızda aşağıdaki gibi detaylı bir sonuca ulaşabileceğiz.

Stored Procedure Çalıştırma

Bir de Değişken tanımlama ve Parametreli Stored Procedure oluşturma konularına değinelim. Stored Procedure içinde kullanabileceğimiz çeşitli değişkenler tanımlayabiliriz. Değişken tanımlamak için DECLARE komutu kullanılır. 

DECLARE ilk_degisken INT


Birlikte Parametreli Stored Procedure Oluşturalım

Oluşturacağımız Stored Procedure’larımızda parametreler kullanmak isteyebiliriz. Yani değer alıp değer gönderebiliriz. Bunun için IN, OUT ve INOUT komutlarımız bulunmakta. 
Aşağıdaki örnekte Parametreli Stored Procedure kullanarak bir müşteri sorgulama işlemi gösterelim.

DELIMITER $$
CREATE PROCEDURE MusteriSorgula(IN customer_name VARCHAR(30))
BEGIN
 SELECT customer_name as Isim,customer_surname as Soyisim,journey_from as Nereden,journey_to as Nereye,journey_time as Saat FROM Customers cu ,Journeys jo WHERE cu.customer_name LIKE CONCAT ('%',customer_name,'%') and cu.journey_ID = jo.journey_ID;
END $$
DELIMITER ;

Burada bir müşterinin adına göre sorgulayıp onun hangi otobüs seferinde olduğunu bulabileceğimiz Parametreli bir Stored Procedure oluşturmuş olduk.
Çağırıp kontrol edelim.

Stored Procedure Çalıştırma

Son olarak Stored Procedure oluştururken içinde en sık kullanabileceğimiz koşullu ifadeler ve döngülere değinmek istiyorum. 

Stored Procedure IF ELSE Kullanımı 

Aşağıda İzmir İstanbul Ek Sefer Ekleyen bir Stored Procedure oluşturduk ve bunu IF statement ile kontrol ettik. Eğer İzmir İstanbul sefer sayımız 1’den az ise ek sefer eklemiş olduk.

DELIMITER $$
CREATE PROCEDURE IzmirIstanbulEkSefer(
 IN journey_time VARCHAR(30),
 IN bus_ID INT
)
BEGIN
DECLARE otobusSayisi INT;
SET otobusSayisi = (SELECT COUNT(Journeys.bus_ID) FROM Journeys WHERE Journeys.journey_from LIKE '%Izmir%' and Journeys.journey_to LIKE '%Istanbul%');
IF otobusSayisi < 1 THEN
 INSERT INTO Journeys (journey_from,journey_to,journey_time,bus_ID) VALUES ("Izmir","Istanbul",journey_time,bus_ID);
END IF;
END $$
DELIMITER ;


Stored Procedure While Kullanımı 

IF statement’a değinirken verdiğim aynı örneği burada da kullanabiliriz. WHILE döngüsünü kullanarak İzmir İstanbul sefer sayımız 1’den az ise ek sefer eklemiş olalım. Tabii burada ek sefer sayımızı atadığımız değişkeni 1 arttırmayı unutmuyoruz.

DELIMITER $$
DROP PROCEDURE IF EXISTS IzmirIstanbulEkSefer;
CREATE PROCEDURE IzmirIstanbulEkSefer(
 IN journey_time VARCHAR(30),
 IN bus_ID INT
)
BEGIN
DECLARE otobusSayisi INT;
SET otobusSayisi = (SELECT COUNT(Journeys.bus_ID) FROM Journeys WHERE Journeys.journey_from LIKE '%Izmir%' and Journeys.journey_to LIKE '%Istanbul%');
WHILE otobusSayisi < 1 DO
 INSERT INTO Journeys (journey_from,journey_to,journey_time,bus_ID) VALUES ("Izmir","Istanbul",journey_time,bus_ID);
 SET otobusSayisi = otobusSayisi + 1;
END WHILE;
END $$
DELIMITER ;

Yazımı burada sonlandırıyorum. Bu yazımda Stored Procedure nedir ? Parametreli ya da parametresiz MySQL Stored Procedure oluşturma ve temel Stored Procedure kullanımı kavramlarının tümüne değinmiş olduk. Eksik ya da yetersiz gördüğünüz kısımları yorum olarak belirtebilirsiniz. İyi Çalışmalar.

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.