Saklı yordam nedir? Nasıl çalışırlar? Bir saklı yordamın yapısı nedir (her birinin saklı yordam olması zorunludur)?
Saklı yordamlar, birkaç şekilde yürütülebilen bir SQL deyimleri grubudur. Başlıca DBM'lerin çoğu saklı yordamları destekler; ancak hepsi desteklemez. Ayrıntılar için kendi DBMS yardım belgelerinizi doğrulamanız gerekecektir. En çok SQL Server'a aşina olduğum için örnek olarak onu kullanacağım.
Bir saklı yordam oluşturmak için söz dizimi oldukça basittir:
CREATE PROCEDURE <owner>.<procedure name>
<param> <datatype>
AS
<Body>
Mesela:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
Saklı yordamların bir avantajı, veri erişim mantığını tek bir yerde merkezileştirebilmeniz ve böylece DBA'nın optimize etmesinin kolay olmasıdır. Saklı yordamlar aynı zamanda bir saklı yordama çalıştırma hakları verebileceğiniz ancak kullanıcının temel tablolar üzerinde okuma/yazma izinlerine sahip olması gerekmeyeceği için bir güvenlik avantajına da sahiptir. Bu, SQL enjeksiyonuna karşı iyi bir ilk adımdır.
Saklı yordamların, temel olarak temel CRUD işleminizle ilişkili bakım gibi dezavantajları vardır. Diyelim ki her tablo için bir Insert, Update, Delete ve birincil anahtara dayalı en az bir select işleminiz var, bu da her tablonun 4 yordamı olacağı anlamına gelir. Şimdi 400 tablodan oluşan makul büyüklükte bir veritabanı alın ve 1600 prosedürünüz olsun! Ve bu, muhtemelen yapacağınız kopyalara sahip olmadığınızı varsayar.
Temel CRUD işlemlerinizi otomatik olarak oluşturmak için bir ORM veya başka bir yöntem kullanmanın tonlarca değeri vardır.
Saklı yordam, özel bir görevi gerçekleştirmek için kullanılan önceden derlenmiş SQL deyimleri kümesidir.
Örnek: Eğer bir Çalışan
tablom varsa
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
İlk olarak Employee
tablosunu alıyorum:
Create Procedure Employee details
As
Begin
Select * from Employee
End
Prosedürü SQL Server üzerinde çalıştırmak için:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
İkinci olarak, değeri Çalışan Tablosuna ekliyorum
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
SQL Server üzerinde parametrelendirilmiş prosedürü çalıştırmak için:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
Örnek: @Name Varchar(30)
Çalışantablosunda
Adısütununun boyutu
varchar(30)` olmalıdır.
Genel olarak, bir saklı yordam bir "SQL İşlevi." dir:
-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID
Bu T-SQL odaklı bir örnektir. Saklı yordamlar çoğu SQL deyimini çalıştırabilir, skaler ve tablo tabanlı değerler döndürebilir ve SQL enjeksiyon saldırılarını önledikleri için daha güvenli olarak kabul edilirler.