-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSQL(Store Procedure).sql
89 lines (53 loc) · 2.47 KB
/
SQL(Store Procedure).sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
--Stored Procedure (Saklı Yordam)
--TSQL komutlarını ile hazırladığımız işlmeleri bütün olarka aynı anda derlemek için kullandığımız yapılardır.
--Kompleks Create, Read, Update ve Delete işlemlerinin iş mantıklarını çözümlediğimiz yapılardır.
--Fonksiyonlar gibi bir kez yazıp, istediğimiz yerde istediğimiz kadar çağırıp kullanabiliriz.
--Özellikle read operasyonlarında query'lerimiz için parametre getirirler. Yani parametre alan ve almayan diye ikiye ayırabiliriz.
--Job olarak tanımlanabilirler ve schedule edilebilinirler. Yani belirli gün ve saatete çalıştırılabilinirler.
--Çalışışanalrımın ne kadar satış yaptığını bulalım bir nevi çalışan performans değerlendirme
CREATE PROCEDURE sp_CalısanPerformans @Name nvarchar(30)
as
select e.EmployeeID ,
(e.FirstName + SPACE(1) + e.LastName) as [Full Name],
cast(SUM(od.Quantity * od.UnitPrice * (1-od.Discount)) as decimal ) as [Gelir]
from
Employees e join Orders o
on o.EmployeeID = e.EmployeeID
join [Order Details] od
on od.OrderID = o.OrderID
where e.FirstName = @Name
group By e.EmployeeID, e.FirstName+SPACE(1)+e.LastName
execute sp_CalısanPerformans 'Andrew'
/*Store Procedure yazmaktaki amacımız yukardeki gibi sutunları tekrar tekrar yazıp(Employee tablosundan ıd,isim Order Details tablosundan discout gibi
yada her bir çalışan için tekrar tekrar join yazmak) veri tekrarı yapmak yerine procedure oluşturup istenilen bilgilere uygun olan veriyi döndürmektir.*/
--Emekliliğe yakın olan çalışanalrımın yaşlarını getirelim
CREATE PROCEDURE sp_CalısanYas @yas int
as
begin
select EmployeeID,
(FirstName + SPACE(1) + LastName),
DATEDIFF("YY",BirthDate,GETDATE()) as [Yas]
from Employees
where DATEDIFF("YY",BirthDate,GETDATE()) > @yas
end
execute sp_CalısanYas 60
--Ad ve soyadına göre çalışan bilgilerini getiren sp yazınız
CREATE PROCEDURE sp_GetEmployeeByFullName @firstName nvarchar(25), @lastName nvarchar(25)
as
begin
select *
from Employees
where FirstName = @firstName and LastName = @lastName
end
execute sp_GetEmployeeByFullName 'Nancy', 'Davolio'
--Kullanıcıdan alınan iki tarih arasındaki siparişleri göstemesi için Store Procedure yazalım
CREATE PROCEDURE sp_Datedıf @ilktarih datetime, @sontarih datetime
as
begin
select OrderID,
OrderDate,
ShippedDate
from Orders
where OrderDate between @ilktarih and @sontarih
end
execute sp_Datedıf '01/01/1996', '12/12/1996'