17 Ocak 2017 Salı

CLR Stored Procedure



CLR (Common Language Runtime), Microsoft’un .NET mimarisi ile birlikte sunduğu yönetilebilir programlama platformudur.
CLR ve .NET dilleri ile SP’ler, kullanıcı tanımlı fonksiyonlar ve Trigger’lar gibi nesneleri kodlamak mümkündür. Dolayısı ile SP ve diğer nesneleri kodlamak için CLR’ ye ihtiyaç vardır. Bununla birlikle SP için çeşitli CLR prosedürleri’de beraberinde gelmektedir.
Güvenlik ve denetim gibi konularda CLR SP’ler, SQL Server için büyük avantaj sağlamaktadır.

Extended Stored Procedure

Genellikle .dll uzantısı şeklinde derlenmiş olan prosedürlerdir. 
T-SQL dışındaki C, C++, Visual Basic, Delphi gibi dillerde  yazılıp derlenirler.
Veritabanı uzayı dışında çalışırlar.
Sistem içerisinde hazır olarak gelen extended procedure’ ler genellikle xp_ öneki ile başlarlar, fakat sp_ öneki ile başlayan prosedürlerde vardır.
Bu sistem extended prosedürleri master veritabanı içerisinde tutulmaktadır. Tam nitelikli isimleri db.sahibi.sp-ismi şeklindedir.
Bütün sistem prosedürlerini master veritabanı altında görebilirsiniz. Örneğin veritabanına bağlanan kullanıcıları listelemek için aşağıdaki extended sistem prosedürü kullanılabilir.

Stored Procedure


Prosedür, belli bir görevi yerine getirmek için yazılmış program parçacıklarıdır. Başka bir deyişle, herhangi bir işlevi yerine getirmek için yazılan kodların bir paket içerisinde tutulmuş halidir.
Bir prosedür başka bir prosedür tarafından da çağrılabilmektedir. Bu da, sık kullanılan işlemlerin bir defa yazılarak programın akışına göre defalarca kullanılmasını sağlamaktadır. Böylelikle kod yazımı ve programlama işlemi kolaylaştırılmış olmaktadır.
Stored Procedure’ler diğer programlama dillerindeki fonksiyonlarla aynı işleve sahiptir.
Oluşturulan bir Stored Procedure’e ana program içerisinde bir komut ile ulaşılmaktadır.
Aynı komut defalarca verilerek procedure çalıştırılabilmektedir. Dolayısı ile procedure defalarca yazılmayıp tek bir defa yazılıp çağrılmış olmaktadır.
Stored Procedure’ler, ilk defa 1980’li yıllarda Sybase veritabanı sunucusunda kullanılmıştır.
Sorguların önceden hazırlanması ve veritabanı yönetim sistemi içerisinde saklanması en büyük özelliğidir. Dolayısı ile aynı uzayda çalıştığı içinde daha hızlı sonuçlar alınabilmektedir.
Bir SP oluşturulduktan sonra veritabanı içerisinde saklanmaktadır ve ihtiyaç duyulduğunda ise çağrılmaktadır.

Stored Procedure’ler, oluşturma şekillerine göre dört’e ayrılırlar:
Extended Stored Procedure’ler
CLR Stored Procedure’ler
Sistem Stored Procedure’leri
Kullanıcı Tanımlı Stored Procedure’ler

VIEW’ ları Şifrelemek


Bazı durumlarda View’ları oluşturan kaynak kodların başkaları tarafından görülmemesi istenebilir. Böyle bir durumda SQL Server’ın kendi içerisinde yer alan bir şifreleme mekanizması bu yapıları kullanıcı için şifreler. Burada dikkat edilmesi gereken en önemli nokta şifrelenmiş bir View’ın içeriğini biz dahil hiç kimsenin görememesidir. Bu nedenle şifreleme işlemi uygulanmadan önce kaynak kodların bir kopyasının mutlaka saklanması gerekir.


View’ları şifrelemek için ENCRYPTION komutu kullanılmaktadır.
ENCRYPTION komutu View oluşturulurken kullanılacağı gibi sonradan da kullanılabilir. Bu komutun genel yapısı şöyledir.

CREATE VIEW view_adı
WITH ENCRYPTION
AS
SELECT cümlesi

Burada dikkat edilmesi gereken bir diğer noktada, View’ın çalıştırılabileceği fakat kodlarının görülemeyeceğidir. Kaynak kodunu görmek için bir sistem prosedüründen faydalanalım. Query kısmına aşağıdaki komut yazıldığında ilgili View’ın şifrelendiğini belirten bir mesaj görüntülenir.
Şifreyi kaldırmak isterseniz View üzerinde yine bir değişiklik yaparak bunu yapabilirsiniz. Bunun için WITH ENCRYPTION komut satırını kaldırarak View’ı yeniden düzenleyebilirsiniz.

VIEW’ ları Silmek





Bir View’ı veritabanından kaldırmak(silmek) için DROP komutu kullanılmaktadır. Bu komut kullanıldığında view sistemden tamamen silinmiş olacaktır. DROP komutunun genel kullanımı aşağıdaki gibidir.

DROP VIEW view_adı

Örnek:
DROP VIEW Urunler

Birden Fazla Tablo Kullanmak



Bir JOIN komutu kullanılarak birden fazla tablodaki veriler bir VIEW oluşturularak defalarca sorgulanabilir. Genel olarak bu işlem için şöyle bir yapı kullanılır:

CREATE VIEW view_adı
AS
SELECT sütun_adları FROM tablo_1 JOIN tablo_2 ON birleştirme_şartı


VIEW’ larda Değişiklik Yapmak


Bir View üzerinde değişiklik yapılmak istenildiğinde ALTER VIEW komutu kullanılır. ALTER VIEW deyiminin genel yapısı aşağıdaki gibidir.

ALTER VIEW view_adi
AS
SELECT ifadesi

VIEW Sütunlarına İsim Vermek


View’lar da sütun adları isteğe göre değiştirilebilir. Eğer değiştirilmek istenmiyorsa filtrelenen ana tablodaki sütun adları ile aynı olacaktır.
Sütun adları ihtiyaca göre değiştirilebilir. View’larda sütun adları verilirken herhangi bir veri tipi belirtilmez. Bunun nedeni sorgulanan tablo baz alındığı için veri tipleri yine asıl tablodaki veri tipleri ile aynı olacaktır.