Beyza'nın Blogu

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

Scroll to Top