MySql Stored Procedur ve Parametreleri

H-1-N-1-

Uzman üye
25 Tem 2010
1,950
0
İstanbul
Bu yazıda, Mysql saklı yordamları(Stored Procedures - SP) parametreler ile yazmayı öğreneceğiz. Aslında bu programcı arkadaşların zaten aşina oldukları, değer ve referansla geçirmek konularının MySQL’deki yansısıdır. Yazı devamında, konuyu pekiştirecek örneklere de yer verilecektir.
Saklı prosedürleri genellikle, ihtiyaç duyulan bazı parametrelerle yazarız. Parametreler, saklı yordamımızı daha kullanışlı ve dinamik hale getirir. Mysql’de, üç tip parametre seçeneği vardır. Bunlar IN,OUT,INOUT ’dır.

IN : Bu parametre, varsayılan parametre tipidir. IN, saklı yordama geçirilen değişkeni gösterir; ancak bu değişken üzerinde herhangi bir değişiklik yapamaz. Örnek olarak, değeri 10 olan id isimli değişkenimizi, saklı yordamımıza aktardığımızı düşünelim.


GetAll(id)

Saklı yordamımızı çalıştırdıktan sonra dahi, id isimli değişkenimizin değeri halâ 10’dur; Üstelik, GetAll yordamı , id isimli değişkenin içeriğine müdahale edebilecek kudrete sahip olmasına rağmen...

OUT : Bu mod, saklı yordamın içeriği değiştirebileceği değeri gösterir, ve işlem sonunda değiştirilen değeri programa geri gönderir.

INOUT : Adında anlaşılacağı üzere, bu mod, IN ve OUT modlarının birleşik halidir. Bu mod sayesinde, parametreyi saklı yordama geçirebilir;dilerseniz yeni değeri ile tekrar programa geri çağırabilirsiniz.

Aşağıdaki örneği izleyelim:


DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(IN countryName VARCHAR(255))
BEGIN
SELECT city, phone
FROM offices
WHERE country = countryName;
END //
DELIMITER ;


Görüleceği üzere, countryName parametresini IN modunda kullandık. Ve tipini de varchar olarak

belirleyip, 255 karakter olarak boyutlandırdık.

Saklı yordamımızın gövdesinde ise, biz, countryName parametresi ile aktardığımız ülke adına ait bütün ofisleri sorguluyoruz.

Örneğin siz, Amerika Birleşik Devletleri’ndeki tüm ofisleri sorgulamak istiyorsunuz:


CALL GetOfficeByCountry(’USA’)


Sorgumuz, ABD’deki tüm ofisleri yanıt olarak göndürdü.


İkinci örnekte ise, sipariş durumlarına(gönderildi,çözüldü,iptal edildi,kişiye ulaştı,işlem görüyor ve tartışmalı) göre siparişleri sayan ve toplam miktarı çıkarın bir saklı yordam yazacağız. İşte saklı yordamımız:




DELIMITER $$
CREATE PROCEDURE CountOrderByStatus(
IN orderStatus VARCHAR(25),
OUT total INT)
BEGIN
SELECT count(orderNumber)
INTO total
FROM orders
WHERE status = orderStatus;
END$$
DELIMITER ;


CountOrderByStatus yordamı, iki parametreye sahip.

orderStatus, IN modundaki bu parametre sayesinde, sipariş durumunu yordama geçirebiliyoruz
total parametresi ise, OUT modunda birparametredir. Bu parametre, sipariş durumunagöre toplam sipariş miktarını saklamaktadır.


Gönderilen siparişlerin toplam sayısını almak için aşağıdaki SQL cümleciğini kullanıyoruz.


CALL CountOrderByStatus(’Shipped’,@total);
SELECT @total AS total_shipped;


İşlenen siparişleri görüntülemek için aşağıdaki sorguyu kullanıyoruz:


CALL CountOrderByStatus(’in process’,@total);
SELECT @total AS total_in_process;




Üçüncü saklı yordamımızda ise, INOUT parametresini test edeceğiz. Bu saklı yordamı, kendisine geçirilen string(metin) değerin tüm kelimelerin ilk harfini büyük harf yaparak geri döndürmektedir. Saklı yordamın kodu aşağıdaki gibidir:



DELIMITER $$
CREATE PROCEDURE `Capitalize`(INOUT str VARCHAR(1024))
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE myc, pc CHAR(1);
DECLARE outstr VARCHAR(1000) DEFAULT str;
WHILE i <= CHAR_LENGTH(str) DO
SET myc = SUBSTRING(str, i, 1);
SET pc = CASE WHEN i = 1 THEN ’ ’
ELSE SUBSTRING(str, i - 1, 1)
END;
IF pc IN (’ ’, ’&’, ’’’’, ’_’, ’?’, ’;’, ’:’, ’!’, ’,’, ’-’, ’/’, ’(’, ’.’) THEN
SET outstr = INSERT(outstr, i, 1, UPPER(myc));
END IF;
SET i = i + 1;
END WHILE;
SET str = outstr;
END$$
DELIMITER ;


Capitalize isimli saklı yordamımızı kullanmak için ise, aşağıdaki kodu kullanacağız.



SET @str = ’mysql stored procedure tutorial’;
CALL Capitalize(@str);
SELECT @str;



İşlem sonunda @str değeri, "Mysql Stored Procedure Tutorial" olacaktır.

Kolaylıklar dilerim.

Alıntıdır
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.