Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

STORED PROCEDURE UYGULAMALARI


Özet
Bir önceki makalemizde stored procedure tiplerini ve çalışma mekanizmalarından bahsetmiştik ve stored procedure'ler ile ilgili uygulama işlerini bu makaleye bırakmıştık. Dolayısıyla, bu makalede stored procedure oluşturacağız, değiştireceğiz, ve en dataylı şekilde inceleyeceğiz.

Yazar Hakkında
Şehir :
İstanbul

Üyelik :
06 Temmuz 2007 17:13

Son Giriş :
03 Ağustos 2008 16:27
» Mesaj gönder
» serkhan hakkında
» Sözlükte serkhan
Merhaba,

Bir önceki makalemizde stored procedure tiplerini ve çalışma mekanizmalarından bahsetmiştik ve stored procedure'ler ile ilgili uygulama işlerini bu makaleye bırakmıştık. Dolayısıyla, bu makalede stored procedure oluşturacağız, değiştireceğiz, ve en dataylı şekilde inceleyeceğiz.

Giriş amacıyla stored procedure'ler ile ilgili küçük bir bilgi vererek, buradan stored procedure uygulamalarına doğru geçiş yapalım;

Stored procedure'ler sadece bağlı bulunulan database'de oluşturulurlar. (Temporary stored procedure'ler hariç. Temporary stored procedure'ler sadece "tempdb" database'inin altında oluşturulabilirler).

Stored procedure'lerin yaratılması, view'ların yaratılmasına çok benzer. Şimdi bazı önbilgileri edindikten sonra, bir stored procedure yaratalım :

STORED PROCEDURE YARATMAK (CREATE PROCEDURE) :

Bir stored procedure "CREATE PROCEDURE" ya da kısaca "CREATE PROC" ifadesi ile yaratılır. Stored procedure'ümüzü oluşturmadan önce şu bilgileri edinmekte fayda var:

- CREATE PROCEDURE ifadesinin altında "CREATE DEFAULT, CREATE RULE, CREATE TRIGGER, CREATE VIEW ve CREATE PROCEDURE ifadeleri kullanılamaz. Yani, bir stored procedure oluşturulurken, bu procedure'ün içinde DEFAULT, RULE, TRIGGER, VIEW ve başka bir PROCEDURE oluşturulamaz. Bununla birlikte, bir stored procedure yaratılırken içinde bu belirtilenler dışındaki objeler yaratılabilir.

- Stored procedure oluşturabilmek için ;
System Administrator  (sysadmin)
Database Owner (db_owner)
Data Definiton Language Administrator (db_ddladmin) rollerine yada
CREATE PROCEDURE  izni verilmiş bir role sahip olunmalıdır.

#  Şimdi Stored procedure'ümüzü yaratılım:
(Not: Tüm uygulamalarımızı, SQL Server ile birlikte gelen NORTHWIND veritabanı üzerinde yapacağız.)


Use Northwind
GO

CREATE PROCEDURE MakaleDeneme    --Ya da CREATE PROC MakaleDeneme
AS
SELECT * FROM Products
WHERE UnitsInStock<60 AND CategoryID=1
GO

/*  Bu procedure; sonuç olarak 1 nolu Kategoriye giren ve Stokta 60'dan az bulunan ürünleri listeler  */


Görüldüğü gibi bir stored procedure oluşturmak view oluşturmak ile neredeyse aynı !...


Stored Procedure'lerin Diğer Stored Procedureleri Çağırması (NESTING) :

Stored Procedure'ler, diğer stored procedure'leri çağırabilme özelliğine sahiptirler. Yani bir stored procedure çalışırken, aynı anda başka bir stored procedure'ün çalışmasını tetikleyebilir. Bu olaya "Nesting" denir.

"Nesting" hakkında şunları söyleyebiliriz :

- Stored procedure'ler 32 kez diğer procedure'leri çağırabilirler. (32 level). Bu sayı 32'yi geçer ise stored procedure zincirinin kırılmasına ve yeni bir stored procedure'ün çağırılamamasına neden olur. Dolayısıyla "Nesting" olayı hiçbir zaman sonsuz döngüye girmez. Maksimum 32 kez "Nesting" olur.
- "@@Nestlevel" sistem fonksiyonu ile, stored procedure'ün kaç kez nesting yaptığı araştırılabilir. (Stored procedurelerin nasıl çalıştırıldığını gördükten hemen sonra @@Nestlevel kullanımını ile ilgili bir örnek yapacağız.)
- Bir stored procedure ikinci bir stored procedure'ü çağırıyor ise; ikinci (çağırılan) stored procedure, birincinin (çağıran) stored procedure'ün yarattığı tüm objelere erişme hakkına sahiptir.
- Stored Procedure'ler aynı anda birbirlerini de çağırabilirler. Yani X stored procedure'ü Y stored procedure'ünü çağırırken, aynı anda Y stored procedure'ü de X stored procedure'ünü çağırabilir.


STORED PROCEDURE'Ü ÇALIŞTIRMAK (EXECUTE) :

Stored Procedure'ler "direkt" olarak ya da bir "INSERT" ifadesinin bir parçası olarak çalıştırılabilir. Stored Procedure'leri "EXECUTE" ya da kısaca "EXEC" ifadelerini kullanarak çalıştırıyoruz.

a)Biraz önce oluşturduğumuz "MakaleDeneme" stored procedure'ümüzü "direkt" çalıştıralım:


Use Northwind
GO

EXEC MakaleDeneme



b)Bu kez "MakaleDeneme" stored procedure'ümüzü bir INSERT ifadesi içinde kullanarak çalıştıracağız.  INSERT ifadesi altında kullanılan bir stored procedure ile, bir tabloya (tek veya çoklu olarak) kayıt eklememiz mümkündür. SQL Server, stored procedure'ün içindeki SELECT ifadesi ile dönen veriyi istediğimiz tabloya kaydeder. Burada dikkat edilmesi gereken şey ; tablonun kolonlarının veritipleri (data type) ile stored procedure'de oluşturduğumuz yapının veritiplerinin birbirlerini tutması gerektiğidir.

Bu anlattıklarımızı örneğimiz üzerinde anlamaya çalışalım :


Use Northwind
GO

CREATE PROCEDURE MakaleDenemeInsert
AS
SELECT CompanyName,Phone FROM Suppliers
WHERE ContactTitle='Sales Manager'
GO

/*  Bu Stored Procedure ile, Suppliers Tablosundan;    */
/*  ContactTitle'ı 'Sales Manager' olan kayıtlardan        */
/*  'Company Name' ve 'Phone' Bilgilerini çektik.          */  


/*  Bu stored procedure'den çektiğimiz veriyi Shippers tablosuna ekleyelim.             */
/*  NOT: İncelerseniz Shippers tablosundaki veriler ile     */
/*  Suppliers Tablosunda çektiğimiz kolonların veritipleri birbiriyle uyuşmaktadır.     */

INSERT INTO Shippers
EXEC MakaleDenemeInsert


/*  Bu şekilde INSERT ifadesinin içine gömülü bir stored procedure'ün      */
/*  nasıl çalıştığını görmüş olduk...                                                              */

 
Bir Stored Procedure'ün çalıştırılmasını da gördükten sonra, şimdi de yukarıda bahsettiğimiz gibi ;

#  @@Nestlevel kullanarak bir örnek yapalım :


-- Bir Stored Procedure yaratalım

CREATE PROCEDURE IlkProcedure
AS
SELECT @@NESTLEVEL AS 'Ilk Procedure Kaç Tane Procedure Çağırıyor?'
GO

-- IlkProcedure'ü içinde çağıran IkinciProcedure'ü yaratalım

CREATE PROCEDURE IkinciProcedure
AS
SELECT @@NESTLEVEL AS 'Ikinci Procedure Kaç Tane Procedure Çağırıyor?'

           EXEC IlkProcedure
            -- 'IkinciProcedure' kendi içinde 'IlkProcedure' procedure'ünü de çağırsın !
GO


-- Procedure'lerimizi çalıştıralım

EXEC IlkProcedure
GO

-- Görüneceği gibi IlkProcedure sadece kendisini çalıştırdığından Nestlevel=1 dir


EXEC IkinciProcedure
GO

/* Burada da IkinciProcedure önce kendisini çalıştırıyor; Nestlevel=1. */
/* Daha sonra içinde IlkProcedure'ü çağırıyor ve Nestlevel=2 oluyor.   */



STORED PROCEDURE'Ü DEĞİŞTİRMEK (ALTER PROCEDURE) :

Stored Procedure'leri değiştirme (düzenleme) işini , "ALTER PROCEDURE" ya da kısaca "ALTER PROC" ifadesi ile yapıyoruz.  ALTER PROCEDURE ifadesi çalıştığında, SQL Server var olan stored procedure'ün tanımını yenisi ile değiştirir.

ALTER PROCEDURE ifadesi hakkında şu bilgileri verelim :

- Sistem stored procedure'lerini değiştirmemek önerilir. Ancak, değiştirecek isek de; bu sistem stored procedure'ün içinde geçen ifadeleri kopyalayarak (bu ifadelere Enterprise Manager'dan ya da Query Analyzer içinde "syscomments" sistem tablosu sorgulanarak ulaşılabilineceğini bir önceki makalede belirtmiştik.), bu ifadeleri yeni bir "user-defined stored procedure" oluşturup, bu stored procedure'ün içine yapıştırmak en iyi yol olacaktır. Daha sonra sistem stored procedure'ümüzü veri kaybı kaygımız rahatça değiştirebiliriz.

- Bir stored procedure'ü değiştireceksek ve bu stored procedure örneğin "WITH ENCRYPTION" gibi bir özellik ile yaratılmış ise ; ALTER PROCEDURE işleminde bu özellik yeniden belirtilmelidir. Aksi halde stored procedure'ümüz bu özelliğini kaybedecektir.  

- ALTER PROCEDURE ile aynı anda sadece tek bir stored procedure değiştirilebilir. Dolayısıyla "Nesting" ile bir diğer procedure'ü çalıştıran bir stored procedure'ü değiştirdiğimizde, bu değişimden çağırılan stored procedure'ler etkilenmeyecektir.

- ALTER PROCEDURE ifadesini ;
System Administrator  (sysadmin)
Database Owner (db_owner)
Data Definiton Language Administrator (db_ddladmin) rollerine sahip olunmalıdır.
NOT: ALTER PROCEDURE diye biri iznin olmadığı unutulmamalıdır.

ALTER PROCEDURE ifadesini bir örnek üzerinde inceleyelim :


/* Yukarıda önceden yarattığımız "MakaleDenemeInsert"  stored procedure'ümüzü değiştirelim.  */                           

Use Northwind
GO


ALTER PROCEDURE MakaleDenemeInsert
AS
SELECT CompanyName,Phone FROM Suppliers
WHERE ContactTitle='Sales Representative'
GO

/* Bu örnekte, görüldüğü gibi WHERE ifadesindeki ContactTitle' 'Sales Representative' olarak değiştirdik.  */



STORED PROCEDURE'Ü SİLMEK (DROP PROCEDURE) :

Stored Procedure'leri silme işini , "DROP PROCEDURE" ya da kısaca "DROP PROC" ifadesi ile yapıyoruz.  Bir stored procedure'ü silmeden önce "sp_depends <object name>" sistem stored procedure'ünü kullanılarak, bu stored procedure'lerin hangi objelere dayandığını öğrenmek önemli olabilir. Örneğin; yukarıda yarattığımız "IlkProcedure" ve "IkinciProcedure" stored procedurelerini düşünelim. Bu procedureleri, sp_depends ile kontrol edersek her ikisinin de birbirine dayandığını görebiliriz. "IkinciProcedure" örneğimize göre "IlkProcedure"ü içinde çağırıyordu. Dolayısıyla "IlkProcedure"ü birazdan öğreneceğimiz "DROP PROCEDURE" ile silersek ve daha sonra "IkinciProcedure"ü çalıştırırsak görülecektir ki içinde çağırdığı "IlkProcedure" silindiğinden hata meydana gelecektir.

DROP PROCEDURE ifadesini örnek üzerinde inceleyelim :



Use Northwind
GO

-- İlk yarattığımız MakaleDeneme stored procedure'ümüzü silelim

DROP PROC MakaleDeneme
GO




STORED PROCEDURE'DE PARAMETRE KULLANIMI :


Parametre Kullanımı stored procedure'lere işlevsellik kazandırır. Stored Procedure'ler içerisine parametre alabilir (Input Parameters) ve dışarıya parametre ile bir değer döndürebilir (Output Parameters). Parametre ile işlevsellik kazandırılmış bir stored procedure sayesinde bir veritabanını, sadece parametre değerlerini değiştirerek çok amaçlı olarak kullanabiliriz. Örneğin; bir stored procedure Northwind veritabanında oluşturduğumuz "MakaleDenemeInsert" stored procedure'ümüzdeki WHERE ifadesinde geçen 'ContactTitle' için bir parametre belirtseydik, bu parametreyi kullanarak birden çok 'ContactTitle' için 'CompanyName' ve 'Phone' değerlerine ulaşabilirdik. Dolayısıyla, parametre kullanımıyla stored procedure'ümüzü daha işlevsel hâle getirebilirdik.

a) INPUT PARAMETERS :

Bir stored procedure içine dışarıdan parametre çağrılabilir. Bu şekildeki parametreler "INPUT parametreler"dir. Stored procedure'e bir ya da daha çok parametre eklenebilir ve bu parametreler CREATE / ALTER PROCEDURE ifadesinin altında tanımlanır. Parametrelerin tanımlanması "@" ile olup, aşağıdaki şekildedir:

Syntax:  @parameter data_type [=Default]

Parametrelere belirtildiği gibi "Default" değerler de verilebilir. Bu şekilde, stored procedure'ü çalıştırırken default değerleri olan parametreleri belirtmesek de, stored procedure'ümüz çalışacaktır.

Default parametre değerleri, "SABİT (Constraint)" ya da "NULL" olarak verilebilir. Burada şunu belirtelim ki ; bir parametre için NULL değeri Default olarak atayacaksak , "IS NULL"  değil  "=NULL" kullanılmalıdır. Çünkü burada ANSI NULL desteklenmediği için IS NULL çalışmaz.

Input Parametreler ile ilgili genel bilgiler vererek, sonra da bir örnek verelim :

- Bir stored procedure'de verilebilecek maksimum parametre sayısı 1024'tür.
- Parametre isimleri "Local"dir. Yâni, bir parametre ismi diğer stored procedure'lerde de kullanılabilir.
- Parametre bilgileri "syscolumns" sistem tablosunda tutulurlar.

Şimdi, Input Parametreler ile ilgili örneğimizi, 'MakaleDenemeInsert' stored Procedure'ü üzerinde 'ContactTitle' için parametre vererek yapalım :

Use Northwind
GO

ALTER PROCEDURE MakaleDenemeInsert
@ContactTitle nvarchar(50) = 'Sales Representative'
AS
SELECT CompanyName,Phone FROM Suppliers
WHERE ContactTitle = @ContactTitle

GO


Şimdi de, Input parametreler içeren bir stored procedure çalıştırılırken, Input parametrelerinin nasıl kullanılacağından bahsedelim :

- Input parametreler ; 
 
1) Parametre değerlerini direkt çağırarak;
Syntax:
EXECUTE <stored procedure adı>
         @parametre1= deger1
         @parametre2= deger2 .......

2)  Parametre değerlerinin stored proceduredeki sırasıyla;  
Syntax:
EXECUTE <stored procedure adı>
            'Deger1' , 'Deger2', 'Deger3'.......


şeklinde kullanılabilir . Burada dikkat edilmesi gereken, parametre değerlerini stored procedure'deki sıralarıyla çağrılırken, default değerler olsa bile parametrelerin girilmesi zorunluluğudur. Burada sadece kolaylaştırılmış birkaç şey vardır ;
- Eğer son parametrenin default bir değeri varsa, bu son parametre boş geçilebilir.
- Ayrıca, örneğin 5 parametresi olan bir stored procedure çalıştırılırken, ilk üçü girilip son ikisi boş geçilebilir (Default değerleri olmak koşuluyla), fakat dördüncü parametre boş geçilip beşinci parametreye değer verilmez. Verilirse beşinci parametre olarak düşündüğümüz parametre, stored procedure'ün dördüncü parametresi yerine çalışır ve dolayısıyla beşinci parametre yok sayılır. Hatta bu şekilde dördüncü ve beşinci parametrelerin veri türleri (data type) uyuşmuyorsa hata meydana gelir.

Input parametrelerle ilgili bir örnek verelim:

Use Northwind
GO

-- Mevcut 'MakaleDenemeInsert' procedure'ümüz üzerinde değişiklik yapalım

ALTER PROCEDURE MakaleDenemeInsert
@ContactTitle nvarchar(50) ,
@Country nvarchar(50) ,
@Region nvarchar(15)

AS

IF @ContactTitle IS NULL OR @Country IS NULL OR @Region IS NULL
BEGIN
RAISERROR ('Parametreleri boş geçemezsiniz',16,1)
RETURN
END

SELECT CompanyName,Phone,Country,Region FROM Suppliers 
WHERE ContactTitle = @ContactTitle AND Country=@Country
                      AND Region=@Region

GO

-- Parametre isimlerini vererek stored procedure'ü çalıştıralım

EXEC MakaleDenemeInsert
           @Region = 'Québec',
           @ContactTitle='Marketing Manager',
           @Country='Canada'

-- Göründüğü gibi sıra önemli değil.

-- Aşağıdaki gibi yaparsak da NULL değerlere izin verilmeyeceğinden hata verecektir

EXEC MakaleDenemeInsert
           @Region = 'Québec',
           @ContactTitle='Marketing Manager',
           @Country= NULL


-- Şimdi de parametreleri sırayla vererek çalıştıralım

EXEC MakaleDenemeInsert
'Marketing Manager','Canada','Québec'

-- Bu şekilde sıralı olduğundan kayıt bulunuyor.


-- Fakat sıralı olarak parametreleri vermezsek , kayıt bulunamayacaktır.

EXEC MakaleDenemeInsert
'Canada','Marketing Manager','Québec'

-- Ayrıca bu şekilde de NULL değerler verildiğinde hata alınacaktır.

EXEC MakaleDenemeInsert
'Canada','Marketing Manager',NULL



  
b) OUTPUT PARAMETERS :

Stored Procedure'ler OUTPUT parametrelerle dışarıya  değer döndürebilir. Dışarıya dönen bu değer çoğu zaman programcının diğer işlemlerinde kullanılabilmek ya da matematiksel hesaplamaların sonuçlarını öğrenmek amacıyla kullanılırlar. Parametre tanımlanmaları Input parametrelerdeki gibi olmakla beraber tek fazlası hem Stored Procedure'ün oluşturulma tarafında hem de Execute tarafında dışarıya değer döndürecek parametrenin yanına OUTPUT yazılmasıdır. Ayrıca, Execution tarafında OUTPUT ifadesi yazılmaz ise stored procedure sorunsuz çalışacak fakat dışarıya bir değer döndürmeyecektir. Ayrıca, ek olarak; Output olacak parametreler tanımlanırken veritiplerinin "text" ve "image" olmaması gerektiği unutulmamalıdır.

Output parametreler kullanarak bir matematiksel bir örnek verelim :

Use Northwind
GO

CREATE PROC MakaleOutput
@Eleman1 decimal,
@Eleman2 decimal,
@Eleman3 decimal,
@Sonuc decimal OUTPUT
AS
SET @Sonuc = (@Eleman1 * @Eleman2) + @Eleman3

GO

-- Bu basit örnek ile girilen 3 sayının ilk ikisini çarpıp, üçüncü ile toplayan bir matematiksel işlem yaptık ve sonucu döndürmesi için @sonuc parametresini OUTPUT olarak tanımladık.


Output parametreleri dışarıdan karşılarken "DECLARE"  ifadesi ile tanımlanan bir başka parametre kullanılır ve stored procedure çalıştırılırken bu parametre kullanılır.

Bu durum örnek üzerinde daha iyi anlaşılacaktır :


Use Northwind
GO

DECLARE @cevap decimal
EXEC MakaleOutput 3,5,6,@cevap OUTPUT
SELECT @cevap AS 'sonuc'



STORED PROCEDURE'LERİN DERLENMESİ (RECOMPILING) :

Stored Procedure'leri bazı durumlarda yeniden derleme ihtiyacı duyabiliriz. Bu durumları sıralarsak ;

- Stored procedure, sonuç olarak geniş bir result set döndürüyorsa,
- Stored procedure'ün yararlandığı bir tabloda indexleme yapılmış ise,
- Stored procedure'de "atypical" değerler var ise,

bu durumlarda, stored procedure'ler recompile edilebilir.

3 Tip Recompile Yöntemi vardır :

1) CREATE PROCEDURE ... [WITH RECOMPILE] :

WITH RECOMPILE ifadesi ile yaratılan bir stored procedure için, procedure cache'de execution plan oluşturulmaz. Bunun yerine, stored procedure her Execute edildiğinde yeniden derlenecek (recompile edilecek) demektir.

# ÖRNEK:
Use Northwind
GO

CREATE PROC MakaleWithRecompile
WITH RECOMPILE
AS
SELECT COUNT(*) FROM Products
GO

-- Yukarıdaki, Products tablosunda kaç tane ürün olduğunu sorgulayan Stored
-- Procedure'ümüz her Execute edildiğinde recompile edilecektir.

EXEC MakaleWithRecompile


2) EXECUTE ... [WITH RECOMPILE] :

EXECUTE ... [WITH RECOMPILE] ifadesi ile execute edilen bir stored procedure için, her defasında yeni bir execution plan oluşturulur. Fakat bu planlar procedure cache'de tutulmaz. Bu recompile metodu, stored procedure'de atypical değerler varsa veya stored procedure'ünüzün en son derlendiği zamana göre, yararlanılan veri büyük değişikliğe uğramış ise kullanılır.

## ÖRNEK:
Use Northwind
GO

EXEC MakaleWithRecompile WITH RECOMPILE

-- Bu kullanım ise, 'MakaleWithRecompile' stored procedure'ümüzün
-- her defasında execution plan yaratmasını fakat cache tutulmamasını sağlar.


3) Sp_recompile :

Sp_recompile sistem stored procedure'ü, parametre olarak belirtilen stored procedure ya da trigger'ı bir dahaki execute edilişinde yeniden derler.

SYNTAX : sp_recompile [ @objname = ] 'object'

Kullanımı yukarıda gösterilmektedir. Eğer "@objname" parametresi olarak bir table ya da view da verilebilir, bu durumda bu tablo ya da view'ı kullanan tüm stored procedure'ler bir dahaki derlenmelerinde yeniden derleneceklerdir.

Sp_recompile sistem stored procedure'ünü eğer bir tabloda indexleme yapmışsanız ve bu tabloyu kullanan stored procedure'ler bu değişimden yarar sağlayacaksa, kullanmakta fayda vardır.

### ÖRNEK:


Use Northwind
GO

EXEC sp_recompile Products

/* Bu ise, Products tablosunu kullanan tüm stored procedure'lerin (MakaleWithRecompile gibi) bir sonraki EXECUTE edilişlerinde RECOMPILE edilemelerini sağlar. */



NOT : Eğer Procedure Cache'i tamamen temizlemek istersek, DBCC FREEPROCCACHE  ifadesini kullanacağımızı bir önceki makalemizde belirtmiştik.


EXTENDED STORED PROCEDURE'LER :
 
Extended stored procedure'ler bir DLL içindeki fonksiyonlar olup, SQL Server'ın işlevselliğini artırmaktadırlar. Execute edilmeleri stored procedureler ile aynı olup, extended stored procedure'lerin de Input,Output parametre kullanımı ve Durum Kodu (Status Codes) değerleri döndürebilme desteği vardır.

Extended stored procedure'ler ile ilgili şunları söyleyebiliriz :

- Extended stored procedure'leri sadece MASTER veritabanında iken çalıştırılabilir. Eğer başka veritabanından çalıştırmak istiyorsak da, Master veritabanının yolunu belirtmek gerekir . (Bununla ilgili bir örnek aşağıda verilecektir).
- Bir user-defined stored procedure oluşturup, bu stored procedure'ün içinde extended stored procedure'leri çağırabiliriz. Bu bize aynı zamanda extended stored procedure'lerini her veritabanında çalıştırmamızı sağlayabilir.
- Extended stored procedure'ler, Open Data Services (ODS) Uygulama Programlama Arayüzleri (Application Programming Interface- API)  tarafından programlanırlar.
- Microsoft Visual C ve C++ uygulamalarında kullanışlıdırlar.
- Çok sayıda fonksiyon (Multiple Functions) içerebilirler.
- Hem Client hem de SQL Server'dan çağrılabilirler.
- Sadece Master veritabanına eklenebilirler.
- Extended stored procedure'ler, genelde diğer uygulamalar ve işletim sistemleriyle haberleşmek amacıyla kullanılırlar. Örneğin; "Sqlmap70.dll" dosyası sayesinde "xp_sendmail" extended stored procedure'ünü kallanarak SQL Server'dan mail gönderme işlemini gerçekleştirebiliriz.

Bu bilgilerden sonra Extended Stored Procedure'ler ile ilgili örneğimizi vererek makalemize nokta koyalım :

Use Master
GO

EXEC xp_cmdshell 'dir c:\'

/* Bu extended stored procedure'ü command prompt'ta yaptığımız gibi c diskinin içeriğini listeler. */

/*Yukarıda belirttiğimiz gibi de eğer başka bir veritabanındaysak da Master veritabanının yolunu yazmalıyız */

Use Northwind    -- Herhangi bir başka veritabanı da olabilir.
GO

EXEC master..xp_cmdshell 'dir c:\'


Bir başka makalede görüşmek üzere...

SERKAN ERSANLI
serkanersanli@yahoo.com
serkanersanli@gmail.com



Yazarımıza ait diğer makaleler

1. ÇÖZÜNÜRLÜK HAKKINDA BİR SORUN BİR ÇÖZÜM
Bu makalede benim de birkaç kez karşılaştığım ve çözüm yolunu bilmediğim zamanlarda oldukça vaktimi almış bir sorundan bahsedeceğim; Çözünürlük!
08 Temmuz 2007 03:06

2. STORED PROCEDURE YAPISI VE ÇALIŞMA MEKANİZMASI
Bu makalede, Stored Procedure tiplerinden ve çalışma mekanizmasından bahsedeceğiz. Stored Procedure'ler, ilk ve daha sonraki çalıştırılmalarında farklı mekanizmalar ile çalışırlar : "Initial Processing" ve "Subsequent Processing". Bu iki mekanizmanın çalışma şekillerini inceleyeceğiz.
06 Temmuz 2007 20:49

Yorumlar

Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.
© 2005, Bilişim Kulübü. (1078 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen