Stored Procedure uygulamaları

Stored Procedureler Sql ‘de işlemler bütününü çalıştırmak için derlenen özel sonuçlar üreten bileşenlerdir. Stored Procedure kullanım avantajları çoktur bunlardan birkaçı; tekrar tekrar kullanım olanağı sağlaması, birkaç sorguyu biranda sorgulama olanağı gibi kolaylık sağlamaktadır.

Stored Procedure oluşturmanın genel kullanımı şu şekildedir;

1
2
3
4
5
6
7
8
9
CREATE PROC procedureadi
AS
BEGIN
    sorgular
END

GO

EXEC procedureadi  -- oluşturulan procedure çalıştırmak için

Alttaki örnek Stored Procedure uygulamaları ile daha iyi anlaşılacağını umuyorum.

Ör.1 Aynı anda üç sorgu sonucu ekrana veren bir sp(Stored Procedure) yazalım; (Örneklerimiz Northwind üzerinden çalışmaktadır)

1
2
3
4
5
6
7
8
9
10
11
CREATE proc sp_ucsorgu
AS
BEGIN
SELECT * FROM Customers
SELECT * FROM Products
SELECT * FROM [ORDER Details]
END

GO

EXEC sp_ucsorgu

Ör.2 Products tablosundaki kategorisi sadece 5 olanları gösterme

1
2
3
4
5
6
7
8
9
CREATE proc sp_kategoriye (@katid INT)
AS
BEGIN
SELECT * FROM  Products WHERE CategoryID=@katid
END

GO

EXEC sp_kategoriye 5

Ör.3 Products tablosuna ürün eklemek

1
2
3
4
5
6
7
8
9
CREATE proc sp_urunukaydet (@urunadi nvarchar(20), @katid INT, @fiyat money, @stok INT)
AS
BEGIN
INSERT INTO Products (ProductName, CategoryID, UnitPrice, UnitsInStock) VALUES (@urunadi, @katid, @fiyat, @stok)
END

GO

EXEC sp_urunukaydet 'armut',23,5,12 -- armut kategoriid fiyatı ve stok miktarını virgüller ile ayırarak ekliyoruz.

Bu procedure ile birlikte exec sp_urunukaydet yazıp istediğimiz kadar ürün ekleyebiliriz.

Kaynak : Cemal Can AKGÜL (Bilge Adam Yazılım Eğitmeni)

Sql transaction

Bir banka örneği ile konuyu duygusal($) yoldan bağlayalım. Örneğimiz, bir bankadaki iki hesap arasındaki para transferi. Öncelikle banka hesabı için bir abank isimli tablo oluşturalım. Sadece müşteriid ve hesap sutunları olması yeterli.

1
2
3
4
5
6
CREATE TABLE abank
(
musteriid INT PRIMARY KEY IDENTITY(1,1),

hesap INT
)

Şimdi de tablomuz daki hesaplara biraz para yatıralım;

1
2
INSERT INTO abank VALUES(1500)
INSERT INTO abank VALUES(1500)

Ve şimdi transaction için bir Stored procedure oluşturalım;

1
2
3
4
5
6
7
8
CREATE proc sp_havaleyaps (@gonderici INT, @alici INT, @miktar INT)
AS
BEGIN
BEGIN tran
UPDATE abank SET hesap +=@miktar WHERE musteriid = @alici
UPDATE abank SET hesap -=@miktar WHERE musteriid = @gonderici
commit tran
END

Kodları açıklayacak olursak; begin tran(tran transaction kısaltılması, genelde böyle kullanılıyor) ile transaction’ını başlattık. Tablodaki hesaplardan rastgele alıcı ve göndericiyi seçerek birinden diğerine update komutu ile para transferi yani birinden azaltıp diğerini aynı miktarda arttırdık. commit tran ile transaction’nı sonlandırdık yani tamamladık.

Şimdi de oluşturduğumuz procedure çalıştıralım(musteriid 3 olandan, 4 olana 60 lira transfer ediliyor). Ve yapılan transferi görelim.

1
2
3
SELECT * FROM abank

EXEC sp_havaleyaps 3,4,60

Kaynak : Cemal Can AKGÜL (Bilge Adam Yazılım Eğitmeni)