SQL ifadelerini her çalıştırmamızda sunucuda işlemlerin yapılması için derlemenin tamamlanması beklenir. Bir süre sonra yavaşlamalar meydana gelir ve çeşitli hatalar alarak sunucuya erişim sağlanamayabilir. Yavaşlamaların önüne geçmek için Stored Procedure yani Saklı Yordamlar kullanılır.
Saklı yordamlar ile yazılan SQL kodları birkez derlenir ve bir daha derlenmeden doğrudan çalışır. Buda sistem performansında büyük rahatlık yaşatarak hızlı işlemesini sağlar.
Stored Procedure çeşitleri:
- System Stored Procedure(Sistem Saklı Yordamlar)
- Extended Stored Procedure(Genişletilmiş Saklı Yordamlar)
- Local Stored Procedure(Yerel Saklı Yordamlar)
System Stored Procedure
SQL Server tarafında hazır olarak bulunan ver her birinin önünde sp_ ön eki bulunan yordamlardır. Master veritabanında saklanan bu yordamların bazıları aşağıda verilmiştir.
| Yordam | Açıklama |
|---|---|
| sp_addmessage | Kullanıcı tanımlı hata mesajı oluşturmak için kullanılır. Hata mesajlarının numarası 50000’den büyük olmalıdır. |
| sp_addtype | Kullanıcı tanımlı veri tipi oluşturmak için kullanılır. Oluşturulan veritipleri sistem veri tipleri üzerinden oluşturulur. |
| sp_attach_DB | Var olan bir veritabanını sunucuya eklemek için kullanılır. |
| sp_detach_db | Sunucuya eklenen veritabanını çıkarmak için kullanılır. |
| sp_configure | Sunucuyla ilgili konfigurasyon bilgilerini almaya ve değiştirmeyi sağlar. |
| sp_addlogin | SQL Server’a bağlanacak yeni kullanıcı tanımlamada kullanılır. |
| sp_adduser | Aktif veritabanına kullanıcı eklemek için kullanılır. |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
EXEC SP_ADDMESSAGE 50001,20, 'Tablo bulunamadı.' --Tablo bulunamadı açıklamalı mesajı 50001 kodlu, 20 öncelik değeri ile hata mesajlarının tutulduğu tabloya ekledik GO--sunucuya yolla sonra devam et SELECT * FROM master.dbo.sysmessages WHERE error=50001 --error sütununda 50001 nolu kayda ait tüm verileri getirdik RAISERROR(50001,18,0) --50001 kodlu hata mesajını Messages penceresine yazdırdık EXEC SP_ADDTYPE TAMSAYI, INT, 'NULL' --TAMSAYI adında INT veritipinde ve boş geçilebilir veritipi oluşturduk GO DECLARE @SAYI TAMSAYI SET @SAYI=5 PRINT @SAYI EXEC SP_ATTACH_DB @dbname='VTYS', --VTYS ismi ile veritabanı bağla @filename1='C:\VTYS_data.mdf', --veritabanının bulunduğu dizin @filename2='C:\VTYS_log.ldf' --veritabanı oalylarının kaydedildiği dizin EXEC SP_DETACH_DB 'VTYS' --VTYS isimli veritabanını sunucudan çıkartır EXEC sp_configure'user options', 100 --SQL Server'a aynı anda 100 kullanıcı bağlanabilir EXEC sp_configure 'remote access', 0 --uzaktan bağlantı sağlayan kullanıcıların local stored procedure kullanmasını engeller. 0 engeller, 1 izin verir. EXEC sp_addlogin 'YENI_KULLANICI', 12345 --SQL Server'a bağlanacak kullanıcı oluşturuyoruz. YENI_KULLANICI adında kullanıcı adı ve 12345 şifresini tanımlıyoruz. EXEC sp_adduser 'YENI_KULLANICI', 'VTYS' --YENİ_KULLANICI adlı kullanıcı VTYS veritabanına ulaşmazına izin ver |
Yukarıda bazı sistem saklı yordamlarına dair örnekler ve açıklamalarına yer verdik.
Extended Stored Procedure
Harici bir dil kullanılarak hazırlanmış ve DLL dosya içinde barındırılan fonksiyonlardan oluşur. Master veritabanı üzerinde tanımlıdırlar.
| Yordam | Açıklama |
|---|---|
| xp_cmdshell | MS-DOS komut istmeiine komut göndermek için kullanılır. SQL Server üzerinde varsayılan olarak kapalıdır |
| xp_create_subdir | SQL Server üzerindne klasör oluşturmayı sağlar |
| xp_fileexist | Bir dosyanın olup olmadığını kontrol etmek için kullanılır. |
| xp_subdirs | Alt dizinleri listelemek için kullanılır. |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO sp_configure 'xp_cmdshell', 1 GO RECONFIGURE GO --Yukarıda ki kodlar xp_cmdshell aktif etmek için yazmak zorunda olduğumuz kodlar xp_cmdshell 'dir D:' --D: dizinine git GO xp_cmdshell 'mkdir D:\VTYS2' --VTYS2 adında dizin oluştur GO EXEC xp_fileexist 'C:\VTYS_data.mdf' --VTYS_data.mdf dosyası var mı kontrol eder EXEC xp_create_subdir 'C:\VTYS2' --VTYS2 adında klasör oluşturur EXEC xp_subdirs 'C:\' --C'nin alt klasörlerini lislteler |
Local Stored Procedure
Yerel saklı yordamlar, kullanıcı tarafından oluşturulan saklı yordamlardır. Aşağıda kullanım şekli verilmiştir.
|
1 2 3 4 5 6 7 8 9 |
CREATE PROCEDURE YORDAM_ISMI [;NUMBER] [{ @PARAMETRE VERI_TIPI} [defAult][OUTPUT] ] [WITH {REOCMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ] AS SQL KODLARI |
YORDAM_ISMI: Oluşturulacak yordam için isim belirtilir. Aynı isme sahip iki yordam olamaz.
NUMBER: Kullanım zorunluluğu yoktur. Aynı isme sahip yordamları numaralandırmak için kullanılır. MUSTERI;1, MUSTERI;2 gibi…
@PARAMETRE: Yordama dışarıdan parametre gelecekse kullanılır. Parametre ismi @ işareti ile başlamak zorundadır.
VERI_TIPI: Parametreler için kullanılacak veri tipidir. INT, VARCHAR gibi
DEFAULT: Parametreler için kullanılacak varsayılan değerlerdir. Varsayılan değer tanımlanır ve parametre için değer tanmlanmazsa varsayılan değer kullanılır.
OUTPUT: Yordamdan dönen değerler için kullanılır.
WITH: {REOCMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ile kullanılır. RECOMPILE; yordamın her çalıştırılmasında yeniden derlenmesini sağlar. ENCRYPTION; yordamın orjinal kodunu gizlemek için kullanılır.
AS: Yordamın gerçekleştireceği işlemleri belirler.
SQL KODLARI: Yordam içerisinde gerçekleştirilecek sql kodları yazılır.
|
1 2 3 4 5 6 |
CREATE PROCEDURE TUM_KAYITLAR --TUM_KAYITLAR adında saklı yordam oluştur AS --gerçekleşecek işlemleri belirle SELECT * FROM HESAPLAR --Tüm kayıtları getir GO --sunucuya git TUM_KAYITLAR --saklı yordamı çalıştır |
Yukarıda ki örnekde en basit haliyle parametre vs.almadan saklı yordam oluşturulup sadece sql sorgusu yollanmıştır. Saklı yordam sunucuya gönderildikten sonra adıyla çağrılarak aynı işlem tekrar derlenmeden kayıtlar ekrana getirilmiştir.
Ekran çıktısı yukarıda ki gibidir. Parametreler alan saklı yordamlar bir sonra ki yazıda gelecektir.






