T-SQL’de Stored Procedure, Trigger, Index, Cursor, Temptable, Pivot Kavramları
Stored Procedure
Birden fazla TSQL kodunun birlikte yazılıp, sunucu üzerine derlenerek kaydedildiği yapılardır.
Stored procedure’ler üzerine TSQL kodlarının tamamı yazılabilir.
– Select, insert, update, delete işlemlerini kullanma
– Değişken tanımlama
– Döngü oluşturma
– If şartlarını kullanma
– Dosya okuma, dosya yazma, başka bir procedure’ü, fonksiyonu ya da view’ı içinden çağırma
– Web servislere bağlanma
– Temp table kullanma
– Cursor kullanma
– Mail gönderme
Operasyonel (dosya okuma/yazma, login olma ) işlemlerde, raporlama ekranlarında, ETL ve Datawarehouse uygulamalarında yaygın olarak kullanılırlar.
AD HOC QUERY
Bir SQL ya da T-SQL cümlesini doğrudan SQL server’e göndermede kullanılır.
STORED PROCEDURE
Sorguların çağrılması execute işlemlerinde kullanılır.
AD HOC QUERY nasıl çalışır?
Managment Studio’da veritabanına bağlandıktan sonra sorgu çalıştırdığımızda arka tarafta 6 adımdan oluşan işlemler gerçekleşir.
1) Query: Sorgu gönderilir ve veritabanı tarafından sorgu alınır.
2) Parse: Alınan sorgunun eksiği ya da sorunu var mı kontrol edilir.
3) Optimize: Veritabanından çekilen sorgunun en hızlı en optimize nasıl çekileceğinin planlanması. Daha çok index kavramıyla alakalıdır. Sistemde bir tabloda yapılan sorguya uygun şekilde hangi index varsa o index’in belirlenmesi ve execution planın çıkarılması işlemleri gerçekleştirilir.
4) Compile: Oluşturulan execution planı compile edilir yani derlenir. Stored procedurler hafızada derlenip makine diline çevrilmiş olarak saklanırlar.
5) Execute: Derlenen kod çalıştırılır.
6) Result: Sonuçların client’e gönderilmesi sonuçlanması aşamasıdır.
Stored Procedur’ler T-SQL kodlarının derlenip hafızada tutulduğu yerdir. İlk dört ad hoc query aşaması (Query,Parse,Optimize,Compile) hali hazırda stored procedure’de saklanmış olduğu için doğrudan otomatik olarak Execute ve Result işlemleri gerçekleştirilir. Stored Procedur’ler ilk dört adım atlandığı için hızlı çalışırlar.
Stored Procedure Kullanmanın Faydaları
– Hızlıdırlar çünkü execution plan hazırdır. Ayrıca Client Server mimarisinin aksine toplu işlemler kendi içerisinde çalıştığı için sorgular network hızında değil RAM hızında çalışır.
– Esnektirler. Yazılım güncellemeden değişiklik yapılabilir. Hemen hemn çoğu progrmalama dilinin yaptığı işi yapabilir. Birbirleri içerisinde çağırılabilirler.
– Güvenlidirler. SQL Injection saldırılarına kesin çözümdür. Kriti raporlar için stored procedure bazında yetki verilebilir.
– Yönetilebilir ve performansı ölçülebilirdir. Kaç kez çalıştırılmış en son ne zaman çalıştırılmış gibi bilgiler görülebilir.
Trigger
T-SQL’de Trigger (tetikleyici), bir veritabanı tablosu üzerinde gerçekleşen INSERT
, UPDATE
veya DELETE
gibi veri değişikliklerine otomatik olarak yanıt veren özel bir prosedürdür. Triggers, veri bütünlüğünü korumak, iş kurallarını uygulamak veya tetikleyici bir olay sonrasında otomatik görevleri yerine getirmek amacıyla kullanılır.
T-SQL’de iki ana tip tetikleyici bulunur:
AFTER Trigger
Belirtilen işlem (INSERT, UPDATE, DELETE) gerçekleştikten sonra devreye girer.
Veri değişikliği tamamlandıktan sonra çalıştığı için, genellikle veri kontrolü veya loglama işlemleri için kullanılır.
INSTEAD OF Trigger
Veritabanında gerçekleşmesi beklenen işlemi engeller ve onun yerine belirtilen bir işlemi yapar.
Bu tip tetikleyiciler özellikle VIEW üzerinde INSERT, UPDATE veya DELETE işlemlerini yönetmek için kullanılır.
Trigger İçindeki Tablo ve Yapılar
- INSERTED: INSERT ve UPDATE işlemleri sırasında, yeni veri ya da güncellenen veri satırlarını içerir.
- DELETED: DELETE ve UPDATE işlemlerinde, silinen veya eski veri satırlarını içerir.
Trigger Kullanım Senaryoları
Veri Doğrulama ve Bütünlük Sağlama:
Trigger, bir verinin belirli bir formatta veya aralıkta olup olmadığını kontrol etmek için kullanılabilir.
Loglama:
Veri tabanında gerçekleşen önemli değişiklikleri (örneğin, silinen veya eklenen veriler) başka bir tabloya kaydetmek için tetikleyici kullanılabilir.
İş Kurallarını Zorlamak:
Bir tetikleyici, iş kurallarını zorunlu hale getirir ve kurallara aykırı işlemleri otomatik olarak reddeder.
Index
Index kavramı doğrudan SQL Server ile alakalı olan bir kavram değildir. Veritabanı sorgulama ve veritabanı programlama işlemlerini hızlı ve performanslı bir şekilde yapabilmek adına bilinmesi gereken en önemli kavramdır.
Veritabanlarının temel misyonu veriyi yönetmektir. Veriyi yönetmek ise büyük oranda i/o yani okuma/yazma yapmaktır. I/O işlemleri hard diskten RAM’ e alınarak RAM üzerinde yapılan işlemlerdir. Türkiye genelinde karşılaşılan sistemlere baktığımızda veritabanı yönetim sistemlerinin %5 oranında yazma, %95 oranında okuma yaptığını görürüz. Bu yüzden sistemin okuma performansını arttırmak çok önemlidir. Okuma yani veriyi arayıp bulma performansını arttırmak için binary search (ikili arama) algoritması kullanılır. Index özelliğine sahip olanlarda işlem sayısı düşeceği için daha hızlıdırlar.
Cursor
Bir SQL sorgusu içinde döngü ile satır satır dolaşmak ve işlem yaptırmak için kullandığımız yapıdır.
WHILE döngüsü ile arasındaki fark while’da belirli bir sayıda işlem gerçekleştirirken cursor’de SQL sorgusundan çektiğimiz değerleri listeye çekip oradan döngü işlemi yapmaya devam ederiz. Cursor’de değişkenler tanımlanır ve bu değişkenlere tablodan dönen değerler atanır. Yapı olarak:
DECLARE <cursor_adi> FOR SELECT ..FROM şeklindedir. FETCH NEXT INTO ibaresi ile de bir sonraki satıra geçme işlemi yaparız.
Temp Table
T-SQL’de kodu daha anlaşılır kılmak ve daha performanslı çalıştırmak adına kullanılan yapılardan biridir.
TempDB üzerinde geçici olarak oluşturulan tablolara denir. SQL Server üzerinde master,model, msdb ve tempdb olmak üzere 4 adet sistem veritabanı vardır. Geçici olarak oluşturduğumuz TempDB ler üzerinde temptable’lar oluştururuz. Yapı olarak:
#TabloAdi şeklinde oluşturulur. # kullanımı temptable olduğunu ifade eder.Tek ya da çift # kullanılabilir. # ile oluşturulan tablolar oturuma özeldir. ## ile oluşturulan tablolar global olarak oluşturulan tablolardır. SQL hizmeti yeniden başaltıldığında hafızadan silinirler. Veri tutmazlar.
Pivot / Unpivot
Pivot işlemi ham veriden özet tablo oluşturma işlemidir. Ham verideki satırları sütun şeklinde, sütunları ise satır şeklinde oluşturma işlemidir. Yapısı 3 bölümden oluşur
SELECT — ham veriden almak istediğim alanlar
FROM
(
— ham verinin yazıldığı alan
)TABLE_NAME
PIVOT
(
— pivotlanması istenilen alan
)PIVOT_TABLE
Unpivot işlemi ise özet tablodan ham veri oluşturma işlemidir. Yine pivot işlemi gibi yapısı 3 bölümden oluşur.
SELECT — ham veriden almak istediğim alanlar
FROM
(
— ham verinin yazıldığı alan
)TABLE_NAME
UNPIVOT
(
— unpivotlanması istenilen alan
)UNPIVOT_TABLE