Saklı Prosedürler (Stored Procedures) kalibi Create Procedure Procedure_Adi [Parametre_Listesi] As Procedure_Bloğu Create Proc Procedure_Adi [Parametre_Listesi] As Procedure_Bloğu
Saklı Prosedürler (Stored Procedures) cagirilmasi Execute (Saklı Prosedür Adı) [parame1, parametre 2 …]
Saklı Prosedürler OUTPUT PARAMETERS : Stored Procedure'ler OUTPUT parametrelerle dışarıya değer döndürebilir. Dışarıya dönen bu değer çoğu zaman programcının diğer işlemlerinde kullanılabilmek ya da matematiksel hesaplamaların sonuçlarını öğrenmek amacıyla kullanılırlar. Parametre tanımlanmaları Input parametrelerdeki gibi olmakla beraber tek fazlası hem Stored Procedure'ün oluşturulma tarafında hem de Execute tarafında dışarıya değer döndürecek parametrenin yanına OUTPUT yazılmasıdır. Ayrıca, Execution tarafında OUTPUT ifadesi yazılmaz ise stored procedure sorunsuz çalışacak fakat dışarıya bir değer döndürmeyecektir. Ayrıca, ek olarak; Output olacak parametreler tanımlanırken veritiplerinin "text" ve "image" olmaması gerektiği unutulmamalıdır. Output parametreler kullanarak bir matematiksel bir örnek verelim :
Saklı Prosedürler OUTPUT PARAMETERS : CREATE PROC decimal OUTPUT AS = GO
Saklı Prosedürler return Önce procedure’ümüzü biraz degistirelim. Ayni ad ve soyadda baska biri varsa kayit yapmasin ve geriye 0 degeri döndürsün. Eger yoksa kayit yapsin ve bize 1 degeri döndürsün. CREATE PROCEDURE sp_Deneme_Ekle NVARCHAR(20)) AS int int count(*) from DENEME_TABLO where and SOYAD = 0) begin INSERT INTO DENEME_TABLO(AD,SOYAD) = 1 end else begin =0 end GO
trigger Create trigger trigger isim on İşlemYapılanTabloİsmi after veya for delete,update,insert as Kodlar
trigger Bir tabloda insert,delete ve update işlemleri gerçekleştiğinde devreye giren yapılardır. Bu işlemler sonucunda veya bu işlemler sürerken devreye girerler
After ile trigger CREATE TRIGGER bot_trigger ON bot --hangi tablo uzerinde calisacagi With Encryption after update,delete,insert-- insert update delete AS print 'islem' go
For ile trigger CREATE TRIGGER bot ON bot --hangi tablo uzerinde calisacagi for update,delete,insert-- insert update delete AS print 'islem' go
INSTEAD OF TRIGGERLAR Delete,update ve insert işlemleri yerine şu işlemleri yap, gibisinden bir amaca hizmet ederler. Şimdi aşağıdaki örnek triggerı inceleyiniz.Delete işlemi yapıldığın da çalışacak olan trigger,aslında delete işlemi yapmayacaktır.Onun yerine as komutundan sonraki işlemi yapacaktır. CREATE TRIGGER botkisitla ON bot --hangi tablo uzerinde calisacagi instead of update,delete,insert-- insert update delete AS print 'islemengellendi' go
View Nedir? SQL de, View temel olarak sanal tablo(geçici ile sanal tablo farklı kavramlar lütfen karıştırmayın) diye geçiyor. Satır ve sütunları olan gerçek tablo gibidir. İçerisinde sadece SQL Fonksiyonlarını, Join, Group By ve Where ifadelerini kullanabilirsiniz. Yapamadıkları yaptıklarından daha az bu yapamadıklarını yazımın en son bölümünde yer vereceğim. (örnekleri hayali tablolar üzerinde anlatacağım). SQL Query açıp aşağıdaki örnek kodları yazıp daha sonra execute,kısayolu f5, ettikten sonra çalışmış olacaktır.
kalip CREATE VIEW view_adi AS SELECT sütun_adları FROM tablo_adlari
CREATE VIEW OnSekizYasindanBuyukKullanicilar AS SELECT kullaniciAdi, YasadigiYer,Yas FROM Kullanicilar WHERE Yas>17
Şifreli View Oluşturma (With Encryption) CREATE VIEW SifreliView With Encryption AS SELECT kullaniciAdi, YasadigiYer,Yas FROM Kullanicilar WHERE Yas<17
create view botdenizci1 With Encryption as select b.b_adi,d.d_adi,d.yasi,d.derece,b.rengi,r.gun from bot b, denizci d, rezerve r where r.bid=b.bid and r.did=d.did
View Güncelleştirme (Alter View) Güncelleştirmek için alter ifadesinden sonra güncelleştirmek istediğimiz türü seçiyoruz burada view oluyor ve en son olarak View adını yazıyoruz. Kodları değiştirten sonra çalıştırmayı unutmayın. ALTER VIEW OnSekizYasindanBuyukKullanicilar AS SELECT kullaniciAdi, Yas FROM Kullanicilar WHERE Yas>17 View Silme (Drop View) Aslında Create, Alter, Drop SQL ifadeleri olduğu için tablo, view, fonsiyon, procedur işlemlerinde aynı şekide kullanılıyor, yani view e özel durum söz konusu değil. DROP VIEW OnSekizYasindanBuyukKullanicilar
View larda Ne Yapılmaz Yukarıda söylediğim gibi aslında view lerin yapamadıkları daha fazla. Order By kullanamazsınız. İsimsiz kolon bırakamazsınız. Örneğin Sum fonsiyonunu kullanacaksınız As ile kesin bir isim vermek zorundasınız. Birden fazla sorgu yazamazsınız yani sadece bir select ile başlayan bir cümle yapabilirsiniz. T-SQL kullanamazsınız Insert, Update veya Delete kullanamazsınız Herhangi bir parametre yollayamazsınız.
Scalar Functions Scalar functions tek bir değer döndüren fonksiyonlardır. Parametre olarak Color değerini alan ve rengi paremetre olarak belirttiğimiz ürünlerin kayıt sayısını döndüren bir scalar function gerçekleştirelim;
kalip CREATE FUNCTION fonsiyonismi(gerekli degisken adlari)RETURNS donecekveritipi AS BEGIN T-sql ve sql komutlari yazilir end
CREATE FUNCTION NVARCHAR(20)) RETURNS INT AS BEGIN INT; FROM Production.Product WHERE END SELECT dbo.GetProductCount('Silver') Fonksiyonu çağırmak için şu T-SQL komutunu kullanıyoruz;
CREATE FUNCTION NetMaasHesapla numeric(10,2) ) RETURNS numeric(10,2) AS BEGIN numeric(10,2) IF > 5000) ELSE END
Table-Valued Functions CREATE FUNCTION NVARCHAR(20)) TABLE( ProductID INT PRIMARY KEY NOT NULL, [Name] NVARCHAR(50), Color NVARCHAR(20), ListPrice SMALLMONEY ) AS BEGIN SELECT ProductID,[Name],Color,ListPrice FROM Production.Product WHERE RETURN; END SELECT * FROM dbo.GetProducts('Silver') Table-Valued function’ı kullanmak için şu ifadeyi kullanabiliriz;
CREATE FUNCTION alii int ) RETURNS TABLE AS RETURN ( SELECT d_adi,derece from denizci where ) GO
CREATE FUNCTION aliii9 int ) TABLE ( adi nvarchar(50), derece int ) AS begin SELECT d_adi,derece from denizci where RETURN end GO
Prosedür ile Fonksiyon arasındaki Temel Farklar: Saklı Yordam (SY)Kullanıcı Tanımlı Fonksiyon (KTF) Select ifadesi içinde kullanılamazSelect ifadesi içinde kullanılabilir Genellikle bir işi gerçekleştirmek için kullanılır Genellikle bir hesaplama için kullanılır Değer döndürmesi şart değildirMutlaka değer döndürmelidir Tüm veri türlerini döndürebilirImage gibi bazı veri türlerini döndüremez Daha fazla girdi parametresi alabilir (21000 adet) En fazla 1023 girdi parametresi alabilir Geçici tabloları kullanabilirGeçici tabloları kullanamaz Dinamik SQL yürütebilirDinamik SQL yürütülemez Hata İşleme desteği vardırHata işleme desteği yoktur (RAISEERROR veya kullanılamaz) Non-Deterministik fonksiyonlar kullanılabilir GETDATE() gibi non-deterministik fonksiyonlar kullanılamaz