//bu ifadelerin ikisi de gerçekleşiyorsa havale işlemi gerçekleşmiştir fakat 1 tanesini çalışmazsa havale olmamıştır.

Save this PDF as:
 WORD  PNG  TXT  JPG

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "//bu ifadelerin ikisi de gerçekleşiyorsa havale işlemi gerçekleşmiştir fakat 1 tanesini çalışmazsa havale olmamıştır."

Transkript

1 transaction ifadeleri update hesaplar set bakiye=bakiye-1500 where hesapno=12 update hesaplar set bakiye=bakiye+1500 where hesapno=22 //bu ifadelerin ikisi de gerçekleşiyorsa havale işlemi gerçekleşmiştir fakat 1 tanesini çalışmazsa havale olmamıştır. commit => iki işlem de çalışmışsa bu gerçekleşir ve havale gerçekleşir rollback => iki işlemden bir tanesini bile gerçekleşmiyorsa bu ifade devreye girer ve işlemi iptal eder. transaction log => veri tabanına sıralı olaraj kayıt olmı transactionda ya hep ya hiç ya olacak ya olmayacak start, transaction ile başlar örnek: transaction update kitapar set s_sayisi=0 update kitaplar set kitap_adi='deneme' select * from kitaplar // burada işlem yapıldı şeklinde listelenecek rollback select * from kitaplar // üstte rollback yapıldığı için kitaplar listesini olduğu gibi gösterecek savepoint örneği: transaction save transaction deneme update kitapar set s_sayisi=0 select * from kitaplar Rollback transaction deneme //eğer hata varsa en başa değil save transaction olan yerden başlayacak select * from kitaplar update kitaplar set kitap_adi='deneme' select * from kitaplar rollback //burada ise hata varsa en başa dönecek yani yapılan tüm işlemleri iptal edecek select * from kitaplar // burada ise hiç değişikliğe uğramamış olan ilk hali gösterilecek

2 transac sql de değişken tanımlama veritipi[(boyut] örnek :> int varchar(20 varchar( örnek: int // bu şekilde ekrana herhangi bir çıktı göstermez ************-*-*-*-*-*-*-*-*-*-*-*-* örnek: int = max(s_sayisi // burada atama yapıyoruz from kitaplar "Sayfa Sayisi" // burada ise ekrana yazdırıyoruz *-*-*-*-***-*-*********** *-*-*-*-* Sistem Fonksiyonları select * from sys.messages yazarak sistem fonksiyonlarını listeleyebiliriz tane hata ile karşılaşırsak : select 5/0 select üsttekinin alternatifi select 5/0 select * from sys.messages where error = ********************* select 5/0 select * from mter.dbo.sysmessages where error = ******************* select select

3 select select select // kullanılın dilin ID si set LANGUAGE 'turkish' // kullanılan dili değiştir dedik select // sonra yeni dilin ID sini yaz dedik select ********************** tsql ifadeleri int // bu ifadeyi kullanarak üstteki değeri iptal eder // bunu yazarsak hata verir çünkü dan önceki değişkenler iptal edildiği değişkenini bulamaz // dan önce kullanılan değişkenler dan sonra kullanılamaz örnek : int print 'Toplam Sonucu: ' print ' ' ****************************************** table( degisken adi tipi degisken adi tipi

4 *********************************************** table ( o_no int identity(1,1, isim varchar( _ _- table ( pno int identity(1,1, adsoyad varchar(20 not null, telefon varchar( insert values ('Fatih KAYA',' ' insert values ('ali ahmet mehmet',' ' select * order by adsoyad ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use KUTUPHANE table( yazar_no int insert values(1 insert values(2 insert values(3 select yazar_adi,yazar_soyadi from yazarlar where yazar_no in(select * declare eklenenler table( ad varchar(20, soyad varchar(20, ma int

5 insert into personel output inserted.ad,inserted.soyad,inserted.ma values('22','fatih','kaya','','1500','','' select * // üstteki koddaki veriler hem personel hem de eklenenler tablosuna ekleniyor *********************************************************** silinenleri göstermek için de üstteki tabloda yer alan inserted yerine deleted yazarız ve into yerine de silinenleri eklemek istediğimiz tablonun adını yazarız. delete from personeller output deleted.ad,deleted.soyad,deleted.ma where ma <2500 select * select * from personeller ********************************************************************************** *********** if koşul_ifadesi koşula_bağlı_çalışan_kod else if koşul_ifadesi koşula_bağlı_çalışan_kod else kod_blogu if exists(select * from personeller where ma>2000 print 'maaşı 2000 den yüksek olan personel var' if (select min(ma from personeller >=1500 print 'mai 1500 den küçük personel yok' else select ad,soyad,ma from personeller where ma<1500 ******************************* // Kütüphane veritabanında kitap sayısı 5 ten az ise yetersiz kitap 6-10 aralığında ise yeni kitaplar gerekli,10 dan fazla ise yeterli kitap mesajlarını veren sql komutlarını yaz. use KUTUPHANE

6 int = count(* from kitaplar <=5 print 'Kitap Sayisi : ' print 'Yetersiz Kitap ' else if >5 print 'Kitap Sayisi print 'Yeni Kitaplar Gerekli' print 'Kitap print 'Yeterli Kitap ' ******************************************** ce kontrol_edilecek_deger when aldıgı_deger then deger1 when aldıgı_deger then deger2... else deger_n -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- ce when karsiltirma_islemi then deger1 when karsiltirma_degeri then deger2... else deger_n use mter create table denemee (ad varchar(20,soyad varchar(20,rev varchar(20,cinsiyet int insert into deneme values ('Ali','Murat','Teknisyen',1, ('Ali','Kus','Teknisyen',1, ('Ayşe','Demir','Hizmetli',0, ('Burcu','Cuma','Mühis',0 select * from deneme

7 use mter select (adsoyad,rev,cinsiyet =ce cinsiyet when '1' then 'Bay' when '0' then 'Bayan' from deneme *-********************************************************* create table calisanlar (adsoyad varchar(30, revi varchar(20, ma int insert into calisanlar values ('AliMurat','Teknisyen',1000, ('AliKus','Teknisyen',1500, ('AyşeDemir','Hizmetli',2000, ('BurcuCuma','Mühis',2500 select adsoyad,revi,ma from calisanlar order by ce revi when 'Teknisyen' then ma desc, ce revi when 'Mühis' then ma -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*--*-*-*-*-*-*-*-*--* update calisanlar set ma =( ce when ma <1000 then ma +(ma*0.2 when ma>=1000 and ma<2000 then ma +(ma*0.15 when ma>=2000 and ma<3000 then ma +(ma*0.12 else ma +(ma* while koşul_ifadesi tekrarlanmı_istenen_islem /*Eğer tekrarlanmı istenen işlem tek satır içeriyorsa - bloguna gerek yok

8 int =1 <=5 peint varchar(10+ 'karesi :' + varchar(10 ********************************************************** select ' Ortalama Ma = ' +ct(avg(ma varchar(20 from calisanlar while (select avg(ma from calisanlar< 5000 update calisanlar set=ma=ms+(ma*0.2 select adsoyad,ma from calisanlar select ' Son Ortalama Maaş = ' + ct(avg(ma varchar(20 from calisanlar int =3 continue print varchar(20 + ' Karesi : ' varchar( > üstteki kodda ise 1 den 5 e kadar sayıların karesini alırken sıra 3 e geldiğindew 3 ü atlamının komutu verildi. *********************************************************************** select ' Ortalama Ma = ' +ct(avg(ma varchar(20 from calisanlar while (select avg(ma from calisanlar>2000 update calisanlar set ma=ma-(ma*0.2 select adsoyad,ma from calisanlar

9 if(select max(ma from calisanlar <=2500 break select ' Son Ortalama Maaş = ' + ct(avg(ma varchar(20 from calisanlar select max(ma from calisanlar etiket_adi:... to etiket_adi -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- int =1 yenile : print "Sayac Degeri : ' + varchar(1 +1 <=4 to yenile int int is null print 'deger degiskeni null' return // blogun sonlanmını sağlıyor else is not null ****************************************************** /* waitfor ifadesi */ /* delay ve time parametreleri içerir */ *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* waitfor time '10:41:00' // belirtilen saatte çalışmaya başlar waitfor delay '10:41:00' // 10 saat 41 dakika sonra çalışmaya başlamı için komut verdik

10 waitfor time '10:41:00' select * from calisanlar try sql_ifadeleri try catch hata_oluştuğunda_yapılacak_işlem catch try select 1/0 try catch select ERROR_NUMBER( hata_no ERROR_SEVERITY( hata_oncelik ERROR_LİNE( hata_satiri ERROR_MESSAGE( hata_mesaji catch ******************************************** **** if koşul_ifadesi koşula_bağlı_çalışan_kod else if koşul_ifadesi koşula_bağlı_çalışan_kod else kod_blogu if exists(select * from personeller where ma>2000 print 'maaşı 2000 den yüksek olan personel var' if (select min(ma from personeller >=1500 print 'mai 1500 den küçük personel yok' else select ad,soyad,ma from personeller where ma<1500 ******************************* // Kütüphane veritabanında kitap sayısı 5 ten az ise yetersiz kitap 6-10 aralığında ise yeni kitaplar gerekli,10 dan fazla ise yeterli kitap mesajlarını veren sql komutlarını yaz. use KUTUPHANE int = count(* from kitaplar

11 <=5 print 'Kitap Sayisi : ' print 'Yetersiz Kitap ' else if >5 print 'Kitap Sayisi print 'Yeni Kitaplar Gerekli' print 'Kitap print 'Yeterli Kitap ' ******************************************** ce kontrol_edilecek_deger when aldıgı_deger then deger1 when aldıgı_deger then deger2... else deger_n -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- ce when karsiltirma_islemi then deger1 when karsiltirma_degeri then deger2... else deger_n use mter create table denemee (ad varchar(20,soyad varchar(20,rev varchar(20,cinsiyet int insert into deneme values ('Ali','Murat','Teknisyen',1, ('Ali','Kus','Teknisyen',1, ('Ayşe','Demir','Hizmetli',0, ('Burcu','Cuma','Mühis',0 select * from deneme use mter

12 select (adsoyad,rev,cinsiyet =ce cinsiyet when '1' then 'Bay' when '0' then 'Bayan' from deneme *-********************************************************* create table calisanlar (adsoyad varchar(30, revi varchar(20, ma int insert into calisanlar values ('AliMurat','Teknisyen',1000, ('AliKus','Teknisyen',1500, ('AyşeDemir','Hizmetli',2000, ('BurcuCuma','Mühis',2500 select adsoyad,revi,ma from calisanlar order by ce revi when 'Teknisyen' then ma desc, ce revi when 'Mühis' then ma -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*--*-*-*-*-*-*-*-*--* update calisanlar set ma =( ce when ma <1000 then ma +(ma*0.2 when ma>=1000 and ma<2000 then ma +(ma*0.15 when ma>=2000 and ma<3000 then ma +(ma*0.12 else ma +(ma* while koşul_ifadesi tekrarlanmı_istenen_islem /*Eğer tekrarlanmı istenen işlem tek satır içeriyorsa - bloguna gerek yok

13 int =1 <=5 peint varchar(10+ 'karesi :' + varchar(10 ********************************************************** select ' Ortalama Ma = ' +ct(avg(ma varchar(20 from calisanlar while (select avg(ma from calisanlar< 5000 update calisanlar set=ma=ms+(ma*0.2 select adsoyad,ma from calisanlar select ' Son Ortalama Maaş = ' + ct(avg(ma varchar(20 from calisanlar int =3 continue print varchar(20 + ' Karesi : ' varchar( > üstteki kodda ise 1 den 5 e kadar sayıların karesini alırken sıra 3 e geldiğindew 3 ü atlamının komutu verildi. *********************************************************************** select ' Ortalama Ma = ' +ct(avg(ma varchar(20 from calisanlar while (select avg(ma from calisanlar>2000 update calisanlar set ma=ma-(ma*0.2 select adsoyad,ma from calisanlar if(select max(ma from calisanlar <=2500 break

14 select ' Son Ortalama Maaş = ' + ct(avg(ma varchar(20 from calisanlar select max(ma from calisanlar etiket_adi:... to etiket_adi -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- int =1 yenile : print "Sayac Degeri : ' + varchar(1 +1 <=4 to yenile int int is null print 'deger degiskeni null' return // blogun sonlanmını sağlıyor else is not null ****************************************************** /* waitfor ifadesi */ /* delay ve time parametreleri içerir */ *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* waitfor time '10:41:00' // belirtilen saatte çalışmaya başlar waitfor delay '10:41:00' // 10 saat 41 dakika sonra çalışmaya başlamı için komut verdik

15 waitfor time '10:41:00' select * from calisanlar try sql_ifadeleri try catch hata_oluştuğunda_yapılacak_işlem catch try select 1/0 try catch select ERROR_NUMBER( hata_no ERROR_SEVERITY( hata_oncelik ERROR_LİNE( hata_satiri ERROR_MESSAGE( hata_mesaji catch try transaction try transaction save transaction blangic // buradan itibaren kaydediyor hatayi update kitaplar set sayfa_sayisi=0 // sayfa sayisinı 0 yaptık commit // herşeyi kaydediyor try // hata yakalamayı bitiriyor catch // hata yakalanırsa rollback transaction blangic // save başlangıç a döner print 'Hata 1. güncellemede ' + ERROR_MESSAGE( // hata mesajı gösterir catch // yakalama blogunu kapattık update kitaplar set kitap_adi ='deneme' // kütüphane veritabanından kitaplar tablosundaki kitap adını 'deneme ' yaparız. commit // tüm işlemleri kaydettik try // hata yakalama blogunu kapattık catch // hata yakalandıktan sonra yapılacak işlemler blogu rollback // hata olursa en başa döndür print 'Hata 2. güncellemede' + ERROR_MESSAGE( // hata mesajı ver catch // ve işlemleri bitir dinamik sql komutu : exec yada execute varchar(20 // tablo adında bir değişken oluşturduk ='kitaplar' // sonrında kitaplar tablosunu tablo değişkenine aktardık

16 execute('select * from' // ardından ise execute içinde yapılacak işlemi anlattık /* ya da */ varchar(20 varchar (MAX ='kitaplar' * execute /****************************PROSEDÜRLER **********************************************/ prosedürler değer alarak da değer almadan da çalışır yani değer de döndürebiliriz. uzun bir kodu bir kere yazdıktan sonra istediğin kadar kullanabilirsiniz sp_addmessage 50001, 16, 'Otomatik artan sütun için deger girisi yapılmış' create table deneme( id int identity(1,1, isim varchar(20 insert into deneme( values (1,'Fatih Kaya' select * from deneme ******************************************************************************* /*Procedure oluşturma */ CREATE PROCEDURE <ProcedureName> AS BEGIN END GO calisacak_sql_komutları create procedure yordam_ismi [{parametre veri tipi}]

17 with recompile encryption recompile,encryption //üç şekilde de kullanılabilir. sql_ifadeleri recompile ifadesi ile kodu tekrar çağırıp kullanabiliriz, encryption ise kodu ben başka kimse kullanamın demek /*Kütüphane veri tabanı üzerinde kütüphanelerdeki kitapların isimlerini listeleyen sql ifadesi*/ create procedure kutuphane_kitaplari select kut_no,ktp.isbn,kitap_adi from kitap_kutuphane kk inner join kitaplar ktp on kk.isbn=ktp.isbn execute kutuphane_kitaplari // birbirleriyle eşleşen kitapları gösterecek //nocount ifadesi// her satırda etkileşen ifade olup olmadığını kontrol edip gösteriyor //on ve off olmak üzere iki parametresi vardır. //on => etkilenen satırları göstermez, of=> ise etkilenen satırları gösterir. ::::örnek::::: set nocount on select * from kitaplar set nocount off select * from kitaplar ******************************************************************************* sp_helptext kutuphane_kitaplari // kutuphane kitaplarındaki kodları gösterir /* Eğer kodların gözükmesini istemiyorsak alttaki şekilde kodları düzenleriz*/ ALTER procedure [dbo].[kutuphane_kitaplari] with encryption set nocount on select kut_no,ktp.isbn,kitap_adi from kitap_kutuphane kk inner join kitaplar ktp on kk.isbn=ktp.isbn set nocount off

18 ********************************************************************************** ***** create procedure kitap_ekle varchar(30 varchar(30=null set nocount on int from kutuphane where kut_ismi is null is null return 0 else is null or not exists (select * from kitaplar where print 'Belirtilen kütüphane veya kitap bulunamadı' return 0 else if exists(select * from kitap_kutuphane where and update kitap_kutuphane set miktar =miktar+1 where and else insert into kitap_kutuphane set nocount off /* Stored procedure de çıkış parametresi*/ /*sonuç döndürmek için : return ve output*/ /*output: yordamdan dönen değeri parametre olarak çağrıldığı yere geri gönderir*/ /*Örnek: gönderiklen iki değerin ortalamını alan ve sonucu geri döndüren sql ifadesi*/ create procedure ortalama3 int decimal(10,2 output set decimal(10,2 exec ortalama output print('ortalama : ' + varchar(20

19 /* Return ile */ create procedure int int=0 return decimal(10,2 =ortalama4 output print ('ortalama : ' + varchar(20 ********************************************************************************** /*Parametre olarak isbn numarı verilen kitabın ismini,yayın tarihini ve sayfa sayısını geri döndüren sql ifadesi*/ /* giriş parametresi isbn, diğerleri çıkış parametresi*/ create procedure kitap_bul varchar(20=null datetime int output is not @s_sayisi=sayfa_sayisi from kitaplar else print 'isbn degeri bos' /* tek değer döndüren fonksiton : scalar-valued getdate( fonksiyonu scalar fonksiyondur. CREATE FUNCTION<Fonksiyon Adi> (... fonksiyonların parametrelerini buraya ekliyoruz veya default,[readonly] => sadece okunmını istiyorsak RETURNS <Fonksiyon Data Tipi,int>

20 sql ifadeleri return scalar değer */ /*parametre olarak aldığı değeri büyük harfe çeviren fonksiyon*/ create function varchar(max returns varchar(max return ********************************************************************************** ****** /*kütüphane veritabanı üzerinde girilen isbn numarına sahip kitaplardan kütüphanelerde kaç adet olduğunu bulan sql ifadesi*/ create function k_sayisi varchar(max returns int int from kitap_kutuphane where ****************************************************** bir tablo içeriği geri döndürüyorsa buna table valued denilir. ****************************************************** /* kütüphane veritabanı üzerinde ismi verilen kitapların yazarlarının yazmış olduğu diğer kitaplarını listeleyen fonksiyon

21 birden fazla değer döndürebileceği için buna table valued denir. */ create function kitap_bul varchar(max returns table return ( select kitaplar.kitap_adi from kitaplar where isbn=kitap_yazar.isbn 'kitap' from kitap_yazar where yazar_no in ( select yazar_no from kitap_yazar where isbn=(select isbn from kitaplar where üstteki kodu fonksiyon kullanmadan nıl yaparız? select distinct(select kitaplar.kitap_adi from kitaplar where isbn=kitap_yazar.isbn 'kitap' from kitap_yazar where yazar_no in(select yazar_no from kitap_yazar where isbn=(select isbn from kitaplar where ********************************************************************************** **** /*Belirtilen sayfa sayısından daha fazla sayfaya sahip olan kitap bilgilerini ekranda gösterme*/ create function int returns table return ( select * from kitaplar where ********************************************** /* kütüphane veritabanında parametre olarak verilen isbn numarının olduğu kitap adı ve bu kitabı alan üyelerin isimleri,emanet ve teslim tarihleri ve üyelerin telefon bilgilerini dolduran sql ifadesi */

22 create function emanetler varchar(max returns uye_emanet table( u_no int, uye_adsoyad varchar(30, k_adi varchar(30, e_tarihi datetime, t_tarihi datetime, u_telefon varchar(20 insert select uye_no,(select kitap_adi from kitaplar where kitaplar.isbn=emanet.isbn, emanet_tarihi,teslim_tarihi from emanet where select uye_telefon from uyeler where uyno=u_no set uye_adsoyad =(select uye_adi +''+uye_soyadi from üyeler where uyeler.uye_no=u_no, telefon=(select telefon from uyeler where uyeler.uye_no=u_no return select * from emanetler(' ' create table Dersnotlari ( ogrenci_no int primary key identity(110201,1, ders varchar(10, notu int insert into Dersnotlari values ('VTYS',75, ('VTYS',65, ('VTYS',43, ('VTYS',95 select ogrenci_no,ders,notu,'not' = ce

23 when notu >84 then 5 when notu >69 and notu<85 then 4 when notu >54 and notu <70 then 3 when notu >44 and notu <55 then 2 when notu >24 and notu < 45 then 1 else 0 from Dersnotlari insert into Dersnotlari values ('Java',15 * * /* to: koşulsuz dallanma */ int yenile : print 'sayac degeri : ' varchar(1 <=4 to yenile -*************************************************************************- /* try-catch yapısı */ try try catch Hata durumunda çalışacak kod catch * * try varchar(10 = 3 delete from urunler where urun_no try catch if ERROR_NUMBER(=547 print 'Oncelikle ' + 'no lu urun bilgisini siliniz' else print ERROR_NUMBER( catch --**************************************************************************--

24 create function varchar(30 table ( u_no int, u_adsoyad varhcar(50, k_adi varchar(50, e_tarihi datetime, t_tarihi datetime, telefon varchar(20 insert select uye_no,(select kitap_adi from kitaplar where kitaplar.isbn =emanet.isbn, emanet_tarihi,teslim_tarihi from emanet where =(select uye_adi +' ' + uye_soyadi where uyeler.uye_no =u_no telefon =(select telefon from uyeler where uyeler.uye_no = u_no return select * from emanetler('154154'