Saklı yordam nedir?

Saklı yordam nedir? Nasıl çalışırlar? Bir saklı yordamın yapısı nedir (her birinin saklı yordam olması zorunludur)?

Çözüm

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 .

     <param> 

AS

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.

Yorumlar (3)

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ışantablosundaAdısütununun boyutuvarchar(30)` olmalıdır.

Yorumlar (1)

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.

Yorumlar (0)