Prosedürler

Northwind

-------------------PRODESURLER------------------------

/*
	Stored Procedure(Saklı yordam)
	Metot
	insert,update vs.
	sql de saklanır
	güvenlik
	performans
		network'teki veri
		ön belleklenmiş execution plan
*/

---------------procedure örnekleri-----------------------
--ddl (data definition language)
-- sp ile de başlayabilir.
create procedure up_CalisanlariGetir
as
select FirstName,LastName from Employees

exec up_CalisanlariGetir

--yapılan proc yanlış olursa alter ile düzeltilebilir.

--Kategorilerin adını ve açıklamasını getiren bir proc
create procedure up_KategorileriGetir
as
select CategoryName, [Description] from Categories

exec up_kategorilerigetir

--parametre olarak  id'si verilen müşterinin siparişlerinin tarihlerimi listeleyen bir proc yazalim.
create proc up_TarihleriGetir
(
	@CustID char(5)
)
as
select OrderDate from Orders
where CustomerID=@CustID

exec up_TarihleriGetir 'ALFKI'

--parametre olarak CategoryID ve EmployeeID değerlerini alıp o kategorideki o çalışanın sattığı ürünlerin adını ve satılan miktarlarını getiren proc
alter proc up_UrunAdet
(
	@CatID int,
	@EmpID int
)
as
select p.ProductName,od.Quantity
from Products p
join [Order Details] od on p.ProductID=od.ProductID
join Orders o on o.OrderID=od.OrderID
where p.CategoryID=@CatID and o.EmployeeID=@EmpID order by p.ProductName

exec up_UrunAdet 1,1

--yeni kategori ekleyen proc.
--bu proc ekleyen kaydın id değerini geriye dondursun

create proc up_KategoriEkle
(
	@CatName varchar(15)
)
as
insert into Categories(CategoryName)
values (@CatName)
--@@identity son eklenen satırın ID sini verir.
return @@identity

--değişken declare ile oluştururlur
declare @id int
exec @id=up_KategoriEkle 'Yeni kategori'
select @id as 'Eklenen Satırın ID'

--calisanin adını ve soyadını ekleyecek şekilde ve eklenen kaydın id sini döndürecek bir proc.
create proc up_CalisanEkle
(
	@EmpFirst nvarchar(10),
	@EmpLast nvarchar(20)
)
as
insert into Employees(FirstName,LastName) values (@EmpFirst,@EmpLast)
return @@identity

--ekleme işlemi
declare @id int
exec @id=up_CalisanEkle 'Murat','ALTINIŞIK'
select @id

--output parametleri proc bu parametrede satılan ürün order detailse eklendikten sonra prodct taplosunda yeni değerler girer
create proc up_SatisTap
(
	@OrderID int,
	@ProductID int,
	@Quantity smallint,
	@UnitPrice money,
	@Discount real,
	@KalanMiktar smallint out,
	@BasariliMi bit out
)
as
begin try
	insert into [Order Details] values (@OrderID,@ProductID,@UnitPrice,@Quantity,@Discount)
	update Products set UnitsInStock=UnitsInStock-@Quantity where ProductID=@ProductID	select @KalanMiktar=UnitsInStock from Products
	where ProductID=@ProductID
	set @BasariliMi=1
end try
begin catch
	set @BasariliMi=0
end catch

--işleme tabi tutma
declare @b bit, @ks smallint
exec up_SatisTap 10248,1,2,1.2,0,@ks out,@b out

if @b =1
begin
select 'İşlem Başarılı.Kalan stok '+CAST(@ks as varchar(5))
end
else
	select 'İşlem Başarısız'