SQL VE TSQL DERS 24: STORED PROCEDURE

/*
Stored Procedureler

Veritabanına tanımlanmış metotlardır.

Insert,update,delete işlevleri yanı sıra select sorgusunu çalıştırarak
tablo verilerini döndürebilirler.

Parametre alarak dışarıdan verilecek veriye göre hareket edebilirler.

View kavramına göre daha geniş kapsamlıdır ve view'in parametreli
haline benzetebiliriz. (Parametreli View)

İçeriğinde view kullanılabilir.
*/
-- Önce tablolarımızı ekleyelim.

create table bolumler
(
bolumId int IDENTITY(1,1) PRIMARY KEY,
bolum nvarchar(50)
)

create table calisanlar
(
calisanId int IDENTITY(1,1) PRIMARY KEY,
bolumNo int,
ad nvarchar(50),
soyad nvarchar(50)
)
-- Şimdi de procedure yazıp insert işlemi yapalım.

Create proc sp_calisanEkle
(
  @yeniBolumNo int,
  @yeniAd nvarchar(50),
  @yeniSoyad nvarchar(50)
)
AS
insert into calisanlar (bolumNo,ad,soyad)
values (@yeniBolumNo,@yeniAd,@yeniSoyad)

/*
Create proc yada Create procedure ile oluştururuz.
Proc içi değişkenleri tanımladık başına @ koyarak.
As'den sonra ekleme işlemi için tablodaki isimleriyle
Proc'da tanımladığımız değişkenleri eşitledik diyebiliriz.
*/

execute  sp_calisanEkle  1,'Gencay','Karadeniz'

execute sp_calisanEkle 2,'Sibel','Sibemol'

/*
 Exec ifadesi yada execute, procedure çalıştırma ifadesidir.
 Sonra proc adı yazılır. 3 parametreliydi. Parametreleri yazıp
 çalıştırdığımızda ekleme işlemini yapar.
*/


create proc sp_bolumEkle
( 
	@yeniBolum nvarchar(50)
)
 AS
insert into bolumler(bolum)
values (@yeniBolum)


execute sp_bolumEkle 'Bilgisayar'




SELECT bolum, calisanlar.ad, calisanlar.soyad
 FROM bolumler
 INNER JOIN calisanlar ON bolumler.bolumId = calisanlar.bolumNo

-- join kullanarak listeleme işlemi gerçekleştirdik.


drop proc sp_calisanEkle -- Proc silme kodu


-- Güncellemek için alter kullanılır.

alter proc sp_calisanEkle
(
  @yeniBolumNo int,
  @yeniAd nvarchar(50),
  @yeniSoyad nvarchar(50)
)
AS
insert into calisanlar (bolumNo,ad,soyad)
values (@yeniBolumNo,@yeniAd,@yeniSoyad)
-- Bir de procedure ile silme işlemi yapalım.

create proc sp_kisiSil
(
@kisiId int
)
as
delete from calisanlar where calisanId=@kisiId


exec sp_kisiSil '2' -- Id'si 2 olan kişiyi calisanlar tablosundan sildik.