Veritabanı Programlama Dersi 2. Ünite Özet

T-SQL Programlama

Giriş

SQL dili, ilişkisel veritabanı yönetim sistemlerinde veri tanımlama, veri isleme ve veri kontrolü gibi farklı amaçlar için kullanılmaktadır. ANSI standartları ile tanımlı olup farklı firmalara ait ilişkisel veritabanı yönetim sistemlerinde kullanım imkânı vardır. SQL komutları kullanım amaçlarına göre;

  • Veri Tanımlama Dili (DDL)
  • Veri İşleme Dili (DML)
  • Veri Kontrol Dili (DCL)

üç genel kategoriye ayrılır. Veri Tanımlama Dili (DDL), verilerin tutulduğu nesneler olan tabloların oluşturulmasını, silinmesini ve bazı temel özelliklerinin düzenlenmesini sağlar. Bu kategoride, yeni bir tablo oluşturmak için CREATE TABLE, tabloda değişiklik yapmak için ALTER TABLE ve tabloyu silmek için DROP TABLE kullanılan bazı yaygın komutlardır. Veri İşleme Dili (DML), veri girmek, değiştirmek, silmek ve verileri almak için kullanılan DML komutlarının tümüdür. Bu kategoride, veri seçmek için SELECT, veri silmek için DELETE, veri güncellemek için UPDATE ve veri girmek için INSERT en sık kullanılan DML komutlarıdır. Veri Kontrol Dili (DCL) veritabanı kullanıcısı veya rolü ile ilgili izinlerin düzenlenmesini sağlar. Bu kategoride, kullanıcıya yetki tanımlama için GRANT, kullanıcı yetkilerini engellemek için DENY ve daha önce yapılmış olan yetki ve izinleri kaldırmak için REVOKE komutları kullanılır.

SQL’deki yukarıdaki temel komutlara yıllar içinde birçok Yordamsal Dil (procedural language) bileşeni eklenmekle beraber, SQL gerçek bir programlama dilinin özelliklerine sahip değildir. İşletmeler ile ilgili bazı veritabanı projelerinde ise veritabanı yönetim sistemi içinde akış kontrolü, döngü vb. yordamsal dil özelliklerinin raporlama, analiz vb. işlemler için kullanılması gerekmektedir. Bu durumlarda, Microsoft ve Sysbase tarafın-dan geliştirilen ve bazı yordamsal dil özelliklerini barındıran T-SQL (Transact-SQL) dili geliştirilmiştir. T-SQL ile çeşitli veri tipleri ve fonksiyonlar tanımlanabilmektedir. Ayrıca yukarıda bahsedilen döngüler, akış kontrolü gibi işlemlerde gerçekleyebilir.

T-SQL, Microsoft SQL Server ve Sybase için kullanılabilecek bir dildir. Bu platformlar dışında geliştirilen veritabanı sistemlerinde veya harici programlama dillerinde kullanılamaz. Microsoft ortamında, T-SQL ifadeleri ile SQL sunucu üzerinden işlem yapabilmek için istemci bir yazılıma ihtiyaç vardır. SQL Server Management Studio bu amaçla kullanılabilecek bir yazılımdır. Birinci ünitede kurulumu anlatılan SQL Server Management Studio, 2005’ten itibaren MS SQL Server sürümlerini desteklemektedir. Bu yazılım, standart SQL komutlarının kullanılmasına imkân vermektedir. Ayrıca, veritabanı oluşturma, tablo oluşturma, indeks oluşturma vb. birçok işlem kod kullanılmadan yardımcı (Wizard) görsel arayüzler kullanılarak sağlanabilmektedir.

Değişken İşlemleri

Değişken bir niceliği (miktarı) ifade etmek için kullanılan, bilgisayar belleğinde belli bir yer kaplayan ve üzerine değer ataması yapılabilen bir yapıdır. T-SQL’de değişken oluşturulabilir ve program içinde kullanılabilir. T-SQL dilinde değişkenler oluşturmak için değişken adı @ simgesi ile başlamalıdır. Bu şekilde tanımlanan değişkenler yerel değişkenler olarak da adlandırılır. Ayrıca sunucu tarafından tanımlanmış ve sunucu hakkında genel bilgileri veren evrensel değişkenler “@@” ön eki ile gösterilmektedir.

T-SQL’ de değişken isimlendirme kuralları diğer diller ile aynı olup bazıları aşağıda verilmektedir.

  • Değişkenler Türkçe karakter ve boşluk içermez.
  • Değişken isimleri ilk karakteri harf ile başlayıp harf, rakam ve alt çizgi (i) ile devam edebilir.
  • SQL veya T-SQL için kullanılan komutlar ve ayrılmış sözcükler (SELECT, INSERT, UPDATE, NOT vb.) kullanılmaz.
  • Değişken ismi, SQL’de özel anlamı olan sembollerle (@, @@, #, ##, $) başlamamalıdır.
  • Değişken isimlerinde küçük veya büyük harf kullanımı fark etmez. Değişken tanımlama DECLARE komutu ile yapılır.

Genel yazım şekli aşağıdaki gibidir: DECLARE @degiskenadi [(boyut)]

Burada “degiskenadi” değişkenin taşıdığı anlama yakın fazla uzun olmamalı ve yukarıdaki isimlendirme kurallarına uygun olmalıdır. Veri tipi ise sayısal değerler için INT veya karakter türündeki veriler için VARCHAR(boyut) olabilir. Tablo oluşturulması sırasında sütun alanlarında kullanılabilen veri tipleri değişkenler için de geçerlidir. Aynı satırda değişken tanımlama ve atama yapabilmek için ilk komuttan sonra noktalı virgül(;) kullanılması gerekir.

T-SQL programlama dilinde tam sayı, ondalıklı sayı, metin gibi SQL veri türlerinin kullanılabileceği gibi veritabanı yönetim sistemindeki diğer nesneler de değişken olarak tanımlanabilmektedir.

Akış Kontrolü

Programlama dillerinde kullanılan akış kontrolleri T-SQL içerisinde de yer almaktadır. Akış kontrollerine bağlı işletilecek komut sayısı birden fazla olduğu takdirde BEGIN... END bloğu arasında yazılır.

If…Else Yapısı

IF ya da Türkçe karşılığı ile “EĞER” koşul yapısı programlamada oldukça yaygın olarak kullanılır. Belirli koşullar sağlandığı takdirde gerçekleştirmesi istenen işlemler için kullanılır. Aşağıda verilen genel yazım kuralı açıklanacak olur ise “Koşul 1” ifadesinin sağlanması durumunda bir alt komut ya da komut bloğu çalıştırılarak işlem tamamlanır. Ancak “Koşul 1” doğru değilse bu durumda ELSE IF ile tanımlanan “Koşul İfadesi 2” ifadesine bakılır ve doğru ise bu komutun alt satırındaki komut ya da komut bloğu çalıştırılır. Eğer IF komutlarının hiçbiri sağlanmıyor ise en son ELSE komutunun alt satırındaki komut ya da komut bloğu çalıştırılır.

IF (koşul İfadesi 1)

Bir SQL ifadesi ya da BEGIN…END bloğu

ELSE IF (Koşul İfadesi 2) Bir SQL ifadesi ya da

BEGIN…END bloğu

ELSE Bir SQL ifadesi ya da BEGIN…END bloğu

Case Yapısı

Case komutu, birden fazla koşulun kontrol edilmesi gerektiğinde kolay kullanım sağlayan bir akış kontrolü komutudur. Case yapısı SQL sorgu ifadelerinin içinde de koşul amacıyla kullanılmaktadır. T-SQL’ de bu yapının iki farklı kullanımı aşağıda tanımlanmıştır.

CASE Değer

WHEN Değer ya da aralık THEN Sonuç_ifadesi_1

WHEN Değer ya da aralık THEN Sonuç_ifadesi_2

...

ELSE Sonuç_ifadesi_n END

While Yapısı

Programlama dillerinde döngüler, tekrar gerektiren işlemler için kullanılmaktadır. WHILE döngüsü birçok programlama dilinde olduğu gibi verilen bir koşulun sağlanması durumunda belirlenen komut bloğunu tekrar eden bir yapıdır. Genel yazım şekli aşağıdaki gibidir.

WHILE koşul_ifadesi

BEGIN

Tekrarlanacak işlemler

END

While yapısı içinde CONTINUE ve BREAK komutları bir sonraki adıma geçme ve döngüden çıkmak için kullanılabilir. CONTINUE komutundan sonra gelen ifadeler göz ardı edilerek bir sonraki adımdan döngü devam eder. BREAK komutu ise While yapısı içinde döngüden çıkmayı sağlar.

Goto Yapısı

GOTO komutu ile kod içerisinde belirlenen bir etikete direkt geçiş yapılıp bu etiketten sonra devam edilir. Komut sade kullanılabileceği gibi IF veya WHILE yapısı ile farklı amaçlar için de kullanılabilir. Genel yazım şekli aşağıdaki gibidir:

Etiket_adı:

......

Komutlar

......

GOTO Etiket_adı

Dinamik SQL Sorguları

SQL sorgularını esnek bir şekilde T-SQL programlama ortamında kullanmak mümkün-dür. Bunun için çalıştırılması planlanan SQL sorgu komutunun bir değişkene aktarılarak çalıştırılması sağlanır. Bu yöntemin temel amacı program kodları tarafından bir sorgunun hazırlanarak çalıştırılmasına ve sonucunun alınmasına olanak sağlamaktadır. “Dinamik SQL Sorguları” ismi de verilen bu yöntemde hazırlanan sorgu değişkenleri “EXECUTE” fonksiyonu ile çalıştırılabilirler.

İmleç İşlemleri

Veritabanı Yönetim Sisteminde gerçekleştirilen seçme sorguları; verilerin süzülmesi, he-saplanması ya da türetilmesi gibi işlemleri gerçekleştirmek için kullanılır. Ancak bazı özel durumlarda kullanıcıların, her birini izleyen satırlardaki verileri kullanarak işlem yapması gerekebilmektedir. Kullanıcıların belirleyecekleri bir veri kümesinde her bir satırda birer birer ilerlemelerini sağlayan IMLEÇ (Cursor) yapısı kullanılmaktadır. İşleyiş bakımından performansı olumsuz etkileyen bu yapı zorunlu durumlarda tercih edilmelidir.

Program İzlenirlik Araçları

T-SQL’de yazılan programın daha sonra tekrar okunabilmesine veya çalışma zamanında olası hata önleyici veya denetimine yönelik araçlar da bulunmaktadır. Bu araçları kullanmak çevrim dışı ve çevrim içi program izlenirliğini ve güvenirliğini artıracaktır.

T-SQL’de açıklama eklemek için “--” veya “/*...*/” ifadeleri kullanılır. Tek satırlık açık-lama eklemek için açıklama satırının önüne “--” ifadesi konur. Bir veya daha fazla satırı açıklama satırı olarak göstermek için açıklama satırının başına “/*” işareti ve açıklama satırının sonuna “*/” işareti eklenir. Açıklamalar kodların takip edilirliği için önemlidir.

GO Komutu ile SQL sorgularının sırasıyla yığınlar olarak çalıştırılması sağlanır. GO komutu bir T-SQL ifadesi olmayıp yığının son satırında kullanılarak yığının sonlandığını ifade eder. GO komutu GO [sayi] şeklinde yazılarak en son yığının yazılan sayı kadar çalıştırılması sağlanır. Böylece aynı komut tekrar tekrar çalıştırılarak bir döngü elde edilir.

Veri İşleme Dili kullanımı sonucunda değişiklik olan kayıtları listelemek için OUTPUT komutu kullanılır.

Veritabanı yönetim sisteminde hata algılama ve işlem yapmaya yönelik farklı özellikler bulunmaktadır. TSQL’de oluşan hata mesajları ve kodları “sys.messages” adlı sistem tablosunda tutulmaktadır. Eğer hata denetimi yapılması ve gerektiğinde bir işlem yapılması gerekiyorsa TRY... CATCH komutu, diğer programlama dillerinde de olduğu gibi kullanılabilir. TRY bloğunda hata oluştuğu takdirde CATCH bloğuna geçilir. Hata CATCH bloğu tarafından yakalanır.