Saklı Yordamlar içerisindeki kodlar düzenlendiği için SQL komutlarından daha hızlı yürütülür. Şimdi nasıl çalıştığına hep beraber bakalım.
Saklı Yordamlar içerisindeki kodlar düzenlendiği için SQL komutlarından daha hızlı yürütülür. Şimdi nasıl çalıştığına hep beraber bakalım.
T-SQL (sql server da yazdığımız komutların tamamına verilen addır) programlama dili veri tabanı ile program arasındaki ilk basamaktır. Hazırladığımız programda veritabanına işlem yaptırmanın iki yöntemi vardır.
1. İşlem için gerekli komutlar programdan gönderilir
2. İşlemler saklı yordamlarda saklanır. Programdan saklı yordam çağrılır
Saklı Yordamların üstünlükleri
Saklı yordam içerisindeki kodlar başka programlardan gönderilen parametrelere göre çalıştırılabilir.
Saklı Yordamlar fonksiyonlar gibi değer döndürebilir, bu döndürülecek değer işlemi parametreye OUTPUT yazısı eklenerek belirtilir.
Saklı yordamlar 2100 tane parametreye sahip olabilir
Parametre; parametre adı, veri türü, yönü (output veya input), ve varsayılan değer özelliklerine sahiptir.
Parametresiz bir örnek
Create proc ilkonspor
as
set nocount on
set rowcount 11
select baslik,id from haber order by id desc
set nocount off
set rowcount 0
1. satırda ilkonspor yordamı oluşturuluyor. Yordam oluşturulurken create procedure veya create proc kullanılır.
2. satırda as ile yordam başlangıcı belirtiliyor
3. satırda nocount özelliğine atama yapılıyor
4. satırda rowcount özelliğine atama yapılıyor
5. satırda t-sql cümleciği yazılıyor
6. ve 7. satırlarda atama yapılan özellikler eski hallerine döndürülüyor
Parametreli bir örnek
create procedure ilkhaber
@hangisi int
as
select * from haber where id=@hangisi
exec ilkhaber 300 --Bir yordamı çalıştırmak için exec veya execute komutu kullanılır
yordam çalıştırıldığında 300 nolu haber ekrana getirilir
saklı yordamlar; view ler ve fonksiyonlar gibi sql cümleciklerine tablo adı olarak yazılamaz. select * from ilkonspor şeklinde yazım olmaz
Yordam çalıştırılırken yordamdaki parametre sayısı kadar değer gönderilmelidir. Aksi takdirde yordamda ki parametreye değer gönderilmediği için yordam çalışmaz. Bazı parametrelere değer gönderilmediği zaman dahi yordamın çalışması istenebilir.
Aşağıdaki örnekte ilkhaber yordamına herhangi bir parametre gönderilmediği zaman 116 sayısı parametreye değer olacaktır
create procedure ilkhaber
@hangisi int=116
as
select * from haber where id=@hangisi
exec ilkhaber 300
yordam çalıştırıldığında 300 nolu haber ekrana getirilir
---------------------------------------------
exec ilkhaber
yordam çalıştırıldığında parametre değeri gönderilmediği için 116 nolu haber ekrana getirilir
%, _, [] ve [^] karakterleri joker karakterlerdir. Eğer yordama geçilecek parametre like sözcüğünde kullanılacaksa gönderilen parametre değeri joker karakter içerebilir. Ayrıca Parametreye varsayılan değer verilirken joker karakterler kullanılabilir.
create proc yazarlar
@yazadi nvarchar(30)='A%'
as
select * from yazar where adi like @yazadi
exec yazarlar
parametre belirtilmediği için varsayılan değer ataması yapılır. İsmi A ile başlayan yazarlar listelenir.
exec yazarlar 'M%'
parametrede joker karakter kullanılmıştır. Parametre kullanıldığı için varsayılan değer ataması (='A%') yapılmayacaktır. İsmi M ile başlayan yazarlar listelenecektir.
Drop Procedure
var olan yordamı silmek için kullanılır.
drop procedure ilkonspor
Alter Procedure
var olan yordam üzerinde değişiklik yapmak için kullanılır
alter proc ilkonspor
as
set nocount on
set rowcount 8
select baslik, kisaozet, id from haber order by id desc
set nocount off
set rowcount 0
1.Kullanıcı Tanımlı Saklı Yordamlar
T-SQL: Yukarı anlattığımız saklı yordam türüdür
CLR: Net mimarisinin kalbi olarak nitelendirilir. Net Framework mimarisindeki bir sınıfa ait yerel ya da genel sınıf özelliklerini içerir. Sql server da olmayan diziler, kolleksiyon sınıfları clr sayesinde kullanılır.
jljkl
2.Genişletilmiş Saklı Yordamlar (Extended Stored Procedures )
Herhangi bir programlama dilinde (Visual Basic, C gibi) oluşturulan harici yordamlardır. Önünde xp_ öneki bulunur. Genişletilmiş yordamlar DLL dosyalarıdır, bu dosyalar dinamic olarak Sql Server'a yüklenir. Bu yordamlar SQL Server Extenden Stored Procedure API kullanılarak programlanırlar ve doğrudan SQL Server in bulunduğu adres boşluğunda yer alırlar (Ram üzerindeki).
CLR bu yordamdan daha güvenilirdir. Genişletilmiş saklı yordamlar SQL Server in önümüzdeki zamanda çıkacak sürümlerinde bulunmayacaktır. Dolayısıyla bu yordamın kullanılmasından sakınılmalıdır. Bunun yerine CLR kullanılmalıdır.
3.Sistem Saklı Yordamları
SQL server da ki yönetim kademesindeki bir çok işlem özel bir yordam olan sistem saklı yordamları sayesinde yapılır. Sistem saklı yordamlarının önünde sp_ öneki bulunur. Örneğin sys.sp_changedbowner bir sistem saklı yordamıdır. Sistem saklı yordamları Resource veritabanında saklanırlar. İzin işlemleri olan Grant, Deny ve Revoke komutları sistem saklı yordamlarına uygulanabilirler. Sistem saklı yordamları listesi için tıklayınız.
Resource veritabanı salt-okunurdur. SQL serverdaki tüm sistem nesnelerini içerir. Sistem nesneleri (sys.objects gibi ) fiziksel olarak Resource veritabanında saklanırlar. Fakat bunlar her veritabanının sys şemasında görünürler. Resource veritabanları kullanıcı verileri veya kullanıcı metadata ları saklamazlar.
Resource veritabanı SQL Server in yeni veriyonlarıyla güncellenir. 2005 ten önceki versiyonlarda Resource veritabanını güncellemek için, önce sistem objeleri silinir sonra oluşturulurdu. Şimdi ise Resource veritabanını kopyalayıp yapıştırmak yeterlidir.
Resource veritabanı sabit diskte
SQL Server Resource veritabanını yedekleyemez. Yedekleme işlemi ilgili klasör açılıp mssqlsystemresource adındaki mdf ve ldf dosyaları kopyalanıp başka bir klasöre yapıştırılmasıyla gerçekleştirilir. Yedek Yükleme işlemide aynı şekilde yapılır.
Resource veritabanı düzenlemeleri sadece Microsoft firması yetkilileri tarafından yapılır. Kullanıcının yapacağı iş sadece Resource veritabanı ile master veritabanını aynı klasörde bulundurmaktır. Resource veritabanının ID numarası her zaman 32767 dir. Resource veritabanı ile ilgili önemli diğer özellikler ise: Sürüm numarası ve en son güncelleme zamanıdır.
Sürüm numarası
SELECT SERVERPROPERTY('ResourceVersion')
ile öğrenilir.
En son güncelleme zamanı ise
SELECT SERVERPROPERTY('ResourceLastUpdateDateTime')
komutu ile öğrenilir.
sistem nesnesi ile ilgili sql komutunu görmek için
SELECT OBJECT_DEFINITION(OBJECT_ID('sys.objects'))
komutu kullanılır.