Tabo yapıları KullanTur KullanTurNo INT Birincil anahtar(kullanıcının türü 0 : Öğrenci, 1: Öğretim elemanı KullanTurAd VARCHAR(20 NOT NULL GecikmeCeza MONEY NOT NULL DEFAULT(0 Kullanıcı türü için uygulanacak günlü k ceza OduncSure INT NOT NULL DEFAULT(0 Kullanıcı türü için gün olarak ödünç süresi Kullanıcı KullanNo INT Birincil anahtar KullanAd VARCHAR(20 NOT NULL Sistemi kullanmak için kullanılan kimlik. Örneğin öğrenci no Ad VARCHAR(20 NOT NULL Soyad VARCHAR(20 NULL Adres VARCHAR(50 NULL KullanTurNo INT NOT NULL (KullanTur tablosunun KullanTurNo kolonuna bağlı yabancı anahtar Yazar YazarNo INT Birincil anahtar, IDENTITY(1,1 AdSoyad VARCHAR(20 NOT NULL Kitap KitapNo INT Birincil anahtar, IDENTITY(1,1 KitapAd VARCHAR(255 NOT NULL ISBN VARCHAR(20 NOT NULL KopyaSay INT NOT NULL DEFAULT(1 YazarKitap YazarNo INT NOT NULL (YAZAR tablosunda YazarNo kolonuna bağlı yabancı anahtar KitapNo INT NOT NULL (KITAP tablosunda KitapNo kolonuna bağlı yabancı anahtar Odunc OduncNo INT Birincil anahtar, IDENTITY(1,1 KitapNo INT NOT NULL(KITAP tablosunun KitapNo kolonuna bağlı yabancı anahtar KullanNo INT NOT NULL (KULLANICI tablosunun KullanNo kolonuna bağlı yabancı anahtar VerilişTarihi SMALLDATETIME NOT NULL BitişTarihi SMALLDATETIME NOT NULL İadeTarihi SMALLDATETIME NULL Ceza MONEY NOT NULL DEFAULT(0 Sayfa 1 / 8
Kullanıcı Fonksiyonlarına Örnekler Skaler Değerli Kullanıcı Fonksiyonları CREATE FUNCTION fn_duzelt (@S VARCHAR(50 RETURNS VARCHAR(50 DECLARE @A VARCHAR(100, @N INT SET @S = LTRIM(@S SET @S = Lower(@S SET @N=Charindex(' ',@S,1 SET @A = ' ' IF @N<>0 SET @A =Substring(@S, @N, LEN(@S SET @S =Substring(@S, 1, @N-1 SET @A = LTRIM(@A SET @S = UPPER(LEFT(@S,1+Substring(@S,2,LEN(@S SET @A = UPPER(LEFT(@A,1+Substring(@A,2,LEN(@A RETURN @S + ' '+ @A CREATE FUNCTION fn_kitaplar (@YazarNo int returns Varchar(255 as declare @s as varchar(255 set @s='' SELECT @s = CE WHEN @s='' THEN B.KitapAd ELSE @s +', '+B.KitapAd WHERE YazarKitap A INNER JOIN kitap B ON A.KitapNo = B.KitapNo (A.YazarNo = @YazarNo return @s CREATE FUNCTION fn_yazarlar (@KitapNo int returns Varchar(255 as declare @s as varchar(255 set @s='' SELECT @s = CE WHEN @s='' THEN B.AdSoyad ELSE @s +', '+B.AdSoyad YazarKitap A INNER JOIN Yazar B ON A.YazarNo = B.YazarNo WHERE (A.KitapNo = @KitapNo Sayfa 2 / 8
return @s CREATE FUNCTION fn_kitapvekategori (@KitapNo INT RETURNS VARCHAR(255 return ( SELECT B.KategoriAd + ' ' + A.KitapAd Expr1 Kitap A INNER JOIN KitapKategori B ON A.KategoriNo = B.KategoriNo WHERE (A.KitapNo = @Kitapno CREATE FUNCTION fn_kullanıcıtoplamceza (@KullanNo INT RETURNS MONEY DECLARE @M MONEY SELECT @M = sum(ceza Odunc WHERE KullanNo = @KullanNo IF @M IS NULL SET @M = 0 RETURN @M CREATE FUNCTION fn_kullanıcıveturu (@KullanNo INT RETURNS VARCHAR(255 Declare @KullanTurAd Varchar(20,@KullanTurNo Int,@S varchar(50 Select @KullanTurNo=KullanTurNo,@S= Ad+' '+ Soyad From Kullanıcı where KullanNo= @KullanNo Select @KullanTurAd=KullanTurAd from dbo.kullantur where KullanTurNo=@KullanTurNo return @KullanTurAd + ' ' + @S CREATE FUNCTION fn_oduncalansay (@KitapNo INT RETURNS VARCHAR(255 DECLARE @N INT, @S VARCHAR(255 SELECT @N = COUNT(* dbo.odunc Sayfa 3 / 8
WHERE KitapNo = @KitapNo SELECT @S = KitapAd from Kitap WHERE KitapNo = @KitapNo SET @S = @S +' isimli kitab ' + CT(@N VARCHAR(5 +' defa ödünç alındı RETURN @S Tablo Değerli Kullanıcı Fonksiyonları CREATE FUNCTION fn_kitap ( @KitapNo Int SELECT C.KitapAd, D.KategoriAd, B.AdSoyad, C.ISBN YazarKitap A INNER JOIN Yazar B ON A.YazarNo = B.YazarNo INNER JOIN Kitap C INNER JOIN KitapKategori D ON C.KategoriNo = D.KategoriNo ON A.KitapNo = C.KitapNo WHERE (C.KitapNo = @KitapNo CREATE FUNCTION fn_kullanbilgi(@kullanno INT SELECT A.KullanAd, B.KullanTurAd, B.GecikmeCeza, B.OduncSure Kullanıcı A INNER JOIN KullanTur B ON A.KullanTurNo = B.KullanTurNo WHERE (A.KullanNo = @KullanNo CREATE FUNCTION fn_kullanbilgi(@kullanno INT SELECT A.KullanAd, B.KullanTurAd, B.GecikmeCeza, B.OduncSure Kullanıcı A INNER JOIN KullanTur B ON A.KullanTurNo = B.KullanTurNo WHERE (A.KullanNo = @KullanNo CREATE FUNCTION fn_kullanıcı ( @KullanNo Int Sayfa 4 / 8
SELECT A.Ad, A.Soyad, A.Telefon, A.Adres, B.KullanTurAd, A.Etkin Kullanıcı A INNER JOIN KullanTur B ON A.KullanTurNo = B.KullanTurNo WHERE (A.KullanNo = @KullanNo CREATE FUNCTION fn_kullanoduncbilgi(@kullanno INT SELECT B.KitapAd, CONVERT(VARCHAR(10, A.VerilişTarihi, 104 Veriliş_Tarihi, CONVERT(VARCHAR(10, A.BitişTarihi, 104 Bitiş_Tarihi, CE WHEN A.İadeTarihi IS NULL THEN 'Kitap henüz iade edilmedi' ELSE CONVERT(VARCHAR(10, A.İadeTarihi, 104 İadeTarihi Odunc A INNER JOIN Kitap B ON A.KitapNo = B.KitapNo WHERE (A.KullanNo = @KullanNo CREATE FUNCTION fn_oduncbilgi (@KullanNo INT return( SELECT B.KitapAd, CONVERT(VARCHAR(10, A.VerilişTarihi, 104 VerTarih, CONVERT(VARCHAR(10, A.BitişTarihi, 104 BitTarih, CONVERT(VARCHAR(10, A.İadeTarihi, 104 İadeTarih Odunc A INNER JOIN Kitap B ON A.KitapNo = B.KitapNo WHERE (A.KullanNo = @KullanNo AND (NOT (A.İadeTarihi IS NULL UNION SELECT B.KitapAd, CONVERT(VARCHAR(10, A.VerilişTarihi, 104 VerTarih, CONVERT(VARCHAR(10, A.BitişTarihi, 104 BitTarih, 'Kitap henüz iade edilmedi' İadeTarih Odunc A INNER JOIN Kitap B ON A.KitapNo = B.KitapNo WHERE (A.KullanNo = @KullanNo AND (A.İadeTarihi Sayfa 5 / 8
Stored Procedure Örnekleri CREATE PROC sx_kitapekle @KategoriAd VARCHAR(50, @KitapAd VARCHAR(50, @ISBN VARCHAR(50, @KopyaSay INT, @Reserve INT DECLARE @KategoriNo INT IF @KopyaSay<0 RETURN -3 SELECT @KategoriNo = KategoriNo KitapKategori WHERE KategoriAd = @KategoriAd IF @KategoriNo IS NULL --Kategori adini bulamadim ekleyeleim. bu katorinin numarasini kullanalim INSERT INTO KitapKategori(KategoriAd VALUES(@KategoriAd SELECT @KategoriNo = @@IDENTITY IF EXISTS(SELECT * Kitap WHERE ISBN = @ISBN UPDATE Kitap SET KategoriNo = @KategoriNo, KitapAd = @KitapAd, KopyaSay = @KopyaSay, Reserve = @Reserve WHERE ISBN = @ISBN RETURN 0 ELSE INSERT INTO Kitap(KategoriNo, KitapAd, ISBN, KopyaSay, Reserve VALUES(@KategoriNo, @KitapAd, @ISBN, @KopyaSay, @Reserve RETURN @@IDENTITY CREATE PROC sx_kitapgir @KategoriNo INT, @KitapAd VARCHAR(50, @ISBN VARCHAR(30, @KopyaSay INT, @Reserve INT IF EXISTS(SELECT * dbo.kitapkategori WHERE KategoriNo = @KategoriNo Sayfa 6 / 8
AND NOT EXISTS(SELECT * Kitap WHERE KitapAd = @KitapAd INSERT INTO Kitap(KategoriNo, KitapAd, ISBN, KopyaSay, Reserve VALUES(@KategoriNo, @KitapAd, @ISBN, @KopyaSay, @Reserve RETURN @@ROWCOUNT CREATE PROC sx_oduncver @KullanNo Int, @KitapNo Int As if NOT EXISTS ( select * from Kitap where Kitapno=@KitapNo select 'verilen kitap numarasinda bir kitap yoktur.' return -1 if NOT EXISTS ( select * from Kullanıcı where KullanNo=@KullanNo select 'verilen KULLANICI YOK.' return -2 if EXISTS ( select * from Odunc where BitişTarihi<getdate( and İadeTarihi is null AND KitapNo=@KitapNo select 'bu KİTAP ÖDÜNÇTEN GERİ GELMEDİ' return -3 DECLARE @BitişTarihi SMALLDATETIME, @OduncSure INT, @KullanTurNo INT SELECT @KullanTurNo = KullanTurNo Kullanıcı WHERE ( KullanNo = @KullanNo SELECT @OduncSure = OduncSure KullanTur where KullanTurNo = @KullanTurNo select @BitişTarihi = DATEADD(DAY, @OduncSure, GETDATE( INSERT INTO Odunc(KitapNo, KullanNo, VerilişTarihi, BitişTarihi VALUES(@KitapNo, @KullanNo, GetDate(, @BitişTarihi create proc sx_yazarsil @YazarNo int as If Exists(select * from YazarKitap where YazarNo=@YazarNo select 'Yazarİn yazdiði kitaplar var. Yazarİ silemem' return -1 delete from dbo.yazar where YazarNo=@YazarNo Sayfa 7 / 8
create Proc sx_yazarkitapgir @YazarNo Int,@KitapNo Int As if not exists(select KitapNo Kitap WHERE (KitapNo = @KitapNo return -1 if not exists(select YazarNo Yazar WHERE (YazarNo = @YazarNo return -2 Insert Into YazarKitap(YazarNo, KitapNo values(@yazarno,@kitapno return 0 Sayfa 8 / 8