Saklı yordam nedir?
Saklı yordamlar veya Stored Procedure VTYS içerisine kayıt edilen derlenmiş SQL komutlarıdır.Saklı yordamlar içerisine yazılan kodlar derlendiğinden dolayı SQL komutlarına göre daha hızlı çalışır.
Saklı yordam özelliğini SQL Server, Oracle, Sybase gibi gelişmiş VTY sistemleri destekler.
MySQL saklı yordamlar MySQL 5.0 sürümünden sonra dahil edilmiştir.
Saklı yordamlar genellikle tekrar eden sorguları kayıt altına almak için kullanılır.
Saklı yordam oluşturma
Saklı yordamlar CREATE PROCEDURE anahtar kelimesi ile oluşturulur.Saklı yordam kullanarak urunler tablosundaki tüm ürünleri listeleyelim.CREATE PROCEDURE SakliYordam(parametre1, parametre2, parametreN)
BEGIN
-- MySQL ve SQL komutları
END;
Saklı yordam öncesindeki DELIMITER anahtar kelimesi ile varsayılan MySQL noktalı virgül ayracını ( çift eğik çizgi (//) yapmış olduk.DELIMITER //
CREATE PROCEDURE SakliYordam()
BEGIN
SELECT * FROM urunler;
END//
DELIMITER ;
Ayracı çift eğik çizgi yapmak yazılacak SQL ve MySQL komutlarını tek bir komut olarak saklanmasını sağlar.
Saklı yordam çalıştırma
Saklı yordamın en önemli güzel özelliği bir kere yazılıp tekrar kullanılmasıdır.Saklı yordam çalıştırmak için CALL anahtar kelimesi kullanılır.
Saklı yordam çalıştırıldığında kayıt edilen saklı yordam içerisindeki SQL komutları icra edilecektir.CALL SakliYordam(parametre1, parametre2, parametreN);
Yazmış olduğumuz SakliYordam() isimli saklı yordamı çalıştıralım.
CALL SakliYordam();
Saklı yordam değişken tanımlama
Saklı yordam içerisindeki değişken kullanımı
Konuya eklenmiş linkleri görmek için kayıt olmalısınız.
yazısındaki gibidir.Ancak saklı yordam içerisinde değişken oluşturmak için DECLARE anahtar kelimesi kullanılır.
Saklı yordam içerisinde değişken oluşturmak;
Değişkene değer atamak için SET anahtar kelimesi kullanılır.DECLARE degisken_adi veritipi(boyut) DEFAULT varsayilan_deger;
Örnek; benim_adim isimli değişken oluşturmak ve değer atamak
Saklı yordam içerisinde kullanalım.DECLARE benim_adim VARCHAR(50) DEFAULT '';
SET benim_adim = 'Yusuf Sefa SEZER';
Saklı yordamı çalıştırdığımızda değişken kullanılmadığından herhangi bir sonuç vermeyecektir.DELIMITER //
CREATE PROCEDURE SakliYordam()
BEGIN
DECLARE benim_adim VARCHAR(50) DEFAULT '';
SET benim_adim = 'Yusuf Sefa SEZER';
END//
DELIMITER ;
Değişkeni SQL komutları içerisinde kullanmak için değişken ismini yazmak yeterli olacaktır.
DELIMITER //
CREATE PROCEDURE SakliYordam()
BEGIN
DECLARE benim_adim VARCHAR(50) DEFAULT '';
SET benim_adim = 'Mehmet Ceylan';
SELECT CHAR_LENGTH(benim_adim) AS Uzunluk;
END//
DELIMITER ;
Saklı yordam çalıştırıldığında benim_adim değişkenine yazılan değerin uzunluğunu verecektir.
Değişkenlerin faaliyet alanı tanımlandığı BEGIN ve END arasındadır.
Tanımlandığı BEGIN ve END dışarısından değişkenlere erişilmez.
Saklı yordam parametreleri
Saklı yordamlara parametre geçirilerek parametreye göre çeşitli işlemler yapılabilir.Saklı yordama parametreleri saklı yordam parantezi içerisine yazılır.
Saklı yordam parametreleri IN, OUT ve INOUT olmak üzere üçe ayrılır.
Basit bir parametre kullanım örneği;
Parametre türü yazılmadığında IN parametresi kullanılır.DELIMITER //
CREATE PROCEDURE AdUzunluk(gelendeger VARCHAR(50))
BEGIN
SELECT CHAR_LENGTH(gelendeger) AS Uzunluk;
END//
DELIMITER ;
Yazılan parametreli saklı yordam kullanımı
Saklı yordamda IN ve OUT parametre türünün beraber kullanılması;CALL AdUzunluk('Yusuf SEZER');
Saklı yordamın kullanımı;DELIMITER //
CREATE PROCEDURE AdUzunluk(IN gelendeger VARCHAR(50), OUT uzunluk INT)
BEGIN
SET uzunluk = CHAR_LENGTH(gelendeger);
END//
DELIMITER ;
Saklı yordamları kullanarak kayıt eklemek;SET @uzunluk = 0;
CALL AdUzunluk('Yusuf SEZER', @uzunluk);
SELECT @uzunluk;
Yazılan saklı yordamı kullanarak kayıt eklemekDELIMITER //
CREATE PROCEDURE UrunEkle(IN gelen_urun_adi VARCHAR(50), IN gelen_urun_fiyat DECIMAL, IN gelen_kat_id INT)
BEGIN
INSERT INTO urunler(urun_adi, urun_fiyat, kat_id) VALUES(gelen_urun_adi, gelen_urun_fiyat, gelen_kat_id);
END//
DELIMITER ;
Saklı yordamlar PHP, Java, C# gibi programlama dillerinde benzer şekilde çalıştırılır.CALL UrunEkle('MySQL Kitabı', 49, 59);
Hayırlı günler dilerim.