-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStoredProcedure_Input_Output.sql
139 lines (92 loc) · 3.49 KB
/
StoredProcedure_Input_Output.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
select * from kitap;
select * from yazar;
select kitapid, kitapad, yazarid, yazarad, sayfa, renk
from kitap inner join yazar
on kitap.yazarid=yazar.yazar_id; -- id'si uyan değerleri listeledik.
create view kitapyazar -- sorguyu kitapyazar adında kaydettik. tablo değil görüntü olarak veritabanında tutuyoruz.
as
select kitapid, kitapad, yazarad from kitap inner join yazar on kitap.yazarid = yazar.yazarid;
--View kullanım :
select * from kitapyazar;
insert into kitapyazar values(9, 'Kumarbaz', 'Dostoyevski'); -- Buna bu şekilde ekleme yapamayız. Çünkü iki tablo bağlı
-- AMA tek tablo olursa insert into yapabiliriz. Bağlı olmayan tabloda olur..
--Tek tablodan oluşan viewlar üzerinde insert delete işlemleri yapabiliyoruz.
--VIEW : Tablo gibi oluşturabiliriz.
--Oluşturulan view'ı veritabanından silme
drop view kitapyazar;
create view kitapRenkleri
as
select renk, count(*) kitapSayisi from kitap group by renk;
insert into kitapRenkleri values('Turuncu', 1); --KitapSayisi değeri bizim türettiğimiz, türetilmiş bir değer olduğu için insert yapamıyoruz 1 diye
--Tablo güncellenirse view de güncellenir.
select kitapid, kitapad, yazarad, kitapsayisi
from kitap left join yazar on kitap.yazarid = yazar.yazar_id;
create view kitapGoster
as
select kitapid, kitapad, yazarad, kitapsayisi
from kitap left join yazar on kitap.yazarid = yazar.yazar_id;
select * from kitapGoster
-- STORED PROCEDURE
create procedure toplama kitapGetir -- ya da create proc şeklinde de olur.
as
begin
select * from kitap
end
-- kullanımı 1:
kitapGetir
-- 2:
execute kitapGetir
-- 3:
exec kitapGetir
-- input parametreli procedure
create procedure rengeGoreKitapGetir (@kitapRenk varchar(10))
as
begin
select * from kitap where renk=@kitapRenk
end
execute rengeGoreKitapGetir 'sari'
-- output parametreli procedure
create procedure kitapsayirenk @kitaprengi varchar(10), @sayi int output
as
begin
select @sayi = count(*) from kitap where renk=@kitaprengi
end
declare @kitapsayisi int;
exec kitapsayirenk 'sari', @kitapsayisi output;
print @kitapsayisi -- normal çıktı olarak yazar .
select @kitapsayisi -- tablo çıktısı olarak yazar.
create procedure topla (@sayi1 int, @sayi2 int, @sonuc int output)
as
begin -- sonnuc değerine işlemin sonucunu atadık ve döndürdü procedure
set @sonuc = @sayi1 + @sayi2
end
declare @toplam int;
exec topla 4, 7, @toplam output -- 4 ve 7 sayi1 ve sayi2 çıkan sonucu toplam değişkenine atadık.
select @toplam;
create procedure sayikitapgetir (@sayfasayisi int)
as
begin
select * from kitap where sayfa>=@sayfasayisi
end
exec sayikitapgetir 150 -- sayfa sayısı 150'den büyük olan kitapları getir tablodan dedik.
-- Sayfa başına düşen maliyet değerinden bir kitabın maliyetini hesaplayan procedur
create procedure kitapmaliyet @sayfabasimaliyet int
as
begin
select kitapid, kitapad, yazarid, sayfa, renk, sayfa*@sayfabasimaliyet as Maliyet from kitap
end
exec kitapmaliyet 2;
--.. Rengindeki kitapların toplam maliyetini hesaplasın
create procedure toplamMaliyet @kitaprengi varchar(10), @sayfabasimaliyet int, @toplammaliyet int output
as
begin
select @toplammaliyet = select sum(sayfa*@sayfabasimaliyet) as ToplamMaliyet from kitap where renk=@kitaprengi;
end
declare @toplammaliyet int;
exec toplamMaliyet 'sari', 3, @toplammaliyet output;
select @toplammaliyet;
--Atamada
declare @a int;
set @a = 3;
--veya
declare @a int = 3;