Yanıtlar:
Saklı yordamlar, birkaç yolla çalıştırılabilen bir grup SQL ifadesidir. Büyük DBM'lerin çoğu saklı yordamları destekler; ancak, hepsi değil. Ayrıntılar için DBMS yardım belgelerinizle doğrulamanız gerekir. En çok SQL Server hakkında bilgi sahibi olduğum için bunu örneklerim olarak kullanacağım.
Saklı bir yordam oluşturmak için sözdizimi oldukça basittir:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
Yani mesela:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
Saklı yordamların bir yararı, veri erişim mantığını tek bir yerde merkezileştirebilmenizdir; bu durumda DBA'ların optimize etmesi kolaydır. Saklı yordamlar ayrıca, saklı yordam için yürütme hakları verebileceğiniz için güvenlik avantajına sahiptir, ancak kullanıcının temel tablolarda okuma / yazma izinlerine sahip olması gerekmez. Bu, SQL enjeksiyonuna karşı iyi bir ilk adımdır.
Saklı yordamlar, temel olarak temel CRUD işleminizle ilişkili bakım ile birlikte gelir . Her tablonun Ekle, Güncelle, Sil ve birincil anahtara göre en az bir seçiminiz olduğunu varsayalım, yani her tablonun 4 prosedürü olacaktır. Şimdi 400 tablo büyüklüğünde bir veritabanı alın ve 1600 prosedürünüz var! Ve bu muhtemelen yapacağınız kopyaların olmadığı varsayılır.
Temel CRUD işlemlerinizi otomatik olarak oluşturmak için bir ORM veya başka bir yöntem kullanmanın bir ton değeri vardır.
Saklı yordam, özel bir görevi gerçekleştirmek için kullanılan bir dizi önceden derlenmiş SQL ifadesidir.
Örnek: Bir varsa Employee
tablo
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
İlk önce Employee
tabloyu alıyorum :
Create Procedure Employee details
As
Begin
Select * from Employee
End
Yordamı SQL Server'da çalıştırmak için:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
Sonra ikinci 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
Parametrelendirilmiş yordamı SQL Server'da çalıştırmak için:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
Misal: @Name Varchar(30)
Gelen Employee
tabloda Name
sütunun boyutta olmalıdır varchar(30)
.
Saklı yordam, oluşturulan ve veritabanında depolanan bir SQL deyimleri grubudur. Saklı yordam, giriş parametrelerini kabul eder, böylece ağ üzerinde farklı girdi verileri kullanan birkaç istemci tarafından tek bir yordam kullanılabilir. Saklı yordamlar ağ trafiğini azaltır ve performansı artırır. Saklı yordamı değiştirirsek, tüm istemciler güncel saklı yordamı alır.
Saklı yordam oluşturma örneği
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
Saklı yordamları kullanmanın avantajları
Saklı bir prosedür modüler programlamaya izin verir.
Yordamı bir kez oluşturabilir, veritabanında saklayabilir ve programınızda istediğiniz sayıda çağırabilirsiniz.
Saklı yordam daha hızlı yürütme sağlar.
İşlem, art arda gerçekleştirilen büyük miktarda SQL kodu gerektiriyorsa, saklı yordamlar daha hızlı olabilir. İlk yürütüldüklerinde ayrıştırılır ve optimize edilirler ve saklanan yordamın derlenmiş bir sürümü daha sonra kullanılmak üzere bir bellek önbelleğinde kalır. Bu, saklı yordamın her kullanımda yeniden onarılması ve yeniden optimize edilmesi gerekmediği anlamına gelir, bu da çok daha hızlı yürütme süreleriyle sonuçlanır.
Saklı yordam ağ trafiğini azaltabilir.
Transact-SQL kodu yüzlerce satır gerektiren bir işlem, ağ üzerinden yüzlerce kod satırı göndermek yerine, bir yordamda kodu yürüten tek bir ifade ile gerçekleştirilebilir.
Saklı yordamlar verileriniz için daha iyi güvenlik sağlar
Yordamın deyimlerini doğrudan yürütme izni olmasa bile, kullanıcılara saklı yordamı uygulama izni verilebilir.
SQL Server'da farklı türde saklı yordamlarımız vardır:
Sistem tarafından saklanan prosedürler ana veritabanında saklanır ve bunlar bir sp_
önek ile başlar . Bu yordamlar, sistem tablolarındaki harici uygulama çağrıları için SQL Server işlevlerini desteklemek üzere çeşitli görevleri gerçekleştirmek için kullanılabilir
Örnek: sp_helptext [StoredProcedure_Name]
Kullanıcı tanımlı saklı yordamlar genellikle bir kullanıcı veritabanında saklanır ve genellikle kullanıcı veritabanındaki görevleri tamamlamak için tasarlanmıştır. Bu yordamları kodlarken öneki kullanmaz , sp_
çünkü önce öneki kullanırsak sp_
, ana veritabanını kontrol eder ve daha sonra kullanıcı tanımlı veritabanına gelir.
Genişletilmiş saklı yordamlar, DLL dosyalarından işlevleri çağıran yordamlardır. Günümüzde, genişletilmiş saklı yordamlar, genişletilmiş saklı yordamlar kullanmaktan kaçınmanın daha iyi olacağı için kullanımdan kaldırılmıştır.
Genellikle, saklı yordam bir "SQL işlevi" dir. Onlar sahip:
-- 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 ifadesini yürütebilir, skaler ve tablo tabanlı değerleri döndürebilir ve SQL enjeksiyon saldırılarını önledikleri için daha güvenli oldukları düşünülür.
Böyle bir durumu düşünün,
NOT:
Saklı yordam temel olarak bir veritabanında belirli görevleri gerçekleştirmek için kullanılır. Örneğin
Depolanan yordam, tek bir yürütme planında derlenen bir grup SQL ifadesinden başka bir şey değildir.
Örnek: saklı yordam oluşturma
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
Saklı yordamı değiştirme veya değiştirme:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
Saklı yordamı bırakma veya silme:
DROP PROCEDURE GetEmployee
Saklı yordam, belirli bir görevi gerçekleştiren bir veya daha fazla SQL deyiminin önceden derlenmiş kümesidir.
Saklı bir prosedür aşağıdakiler kullanılarak tek başına yürütülmelidir EXEC
Saklı yordam birden çok parametre döndürebilir
Transact uygulamak için saklı bir yordam kullanılabilir
"Saklı yordam nedir" zaten diğer yazılarda yanıtlanmıştır. Ne yazacağım saklı yordamı kullanarak daha az bilinen bir yoludur. Öyle grouping stored procedures
ya da numbering stored procedures
.
Sözdizimi Referansı
; number
gereğince bu
Aynı addaki yordamları gruplandırmak için kullanılan isteğe bağlı bir tam sayı. Bu gruplandırılmış prosedürler bir DROP PROCEDURE ifadesi kullanılarak birlikte bırakılabilir
Misal
CREATE Procedure FirstTest
(
@InputA INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO
CREATE Procedure FirstTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
kullanım
exec FirstTest 10
exec FirstTest;2 20,30
Sonuç
Başka Bir Deneme
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Sonuç
Msg 2730, Düzey 11, Durum 1, Yordam SecondTest, Satır 1 [Toplu Başlangıç Satırı 3] Grup adı 2 olan 'SecondTest' yordamı oluşturulamıyor çünkü aynı ada ve 1 numaralı grup numarasına sahip bir prosedür şu anda mevcut değil veritabanı. OLUŞTURMA PROSEDÜRÜ 'SecondTest'; ilk önce 1 uygulanmalıdır.
Kaynaklar :
DİKKAT
Saklı yordam, SQL veritabanlarının ve yordamsal mantığın adlandırılmış bir koleksiyonudur, yani derlenmiş, doğrulanmış ve sunucu veritabanında depolanmıştır. Saklı yordam genellikle diğer veritabanı nesneleri gibi davranılır ve sunucu güvenlik mekanizması aracılığıyla denetlenir.
Bir DBMS'de saklı yordam, bir dizi program tarafından paylaşılabilmesi için veritabanında derlenmiş biçimde depolanan atanmış bir ada sahip SQL ifadeler kümesidir.
Saklı bir yordamın kullanımı,
Verilere kontrollü erişim sağlama (son kullanıcılar yalnızca veri girebilir veya değiştirebilir, ancak yordam yazamazlar)
Veri bütünlüğünün sağlanması (veriler tutarlı bir şekilde girilecektir) ve
Verimliliği artırır (saklı yordamın ifadelerinin yalnızca bir kez yazılması gerekir)
basit olarak,
Saklı Yordam edilir Programlar Saklı , veritabanına kayıtlı bir program / fonksiyonu.
Saklanan her program bir SQL ifadesinden oluşan bir gövde içerir. Bu ifade, noktalı virgül (;) karakterleriyle ayrılmış birkaç ifadeden oluşan bileşik bir ifade olabilir.
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
SQL Server'da saklı yordamlar girdi parametrelerini kabul edebilir ve çıktı parametrelerinin birden çok değerini döndürebilir; SQL Server'da, saklı yordamlar veritabanında işlemleri gerçekleştirmek ve bir çağrı yordamına veya toplu iş için bir durum değeri döndürmek için program deyimleri.
SQL Server'da saklı yordamları kullanmanın yararları
Modüler programlamaya izin verirler. Daha hızlı yürütmeye izin verirler. Ağ trafiğini azaltabilirler. Güvenlik mekanizması olarak kullanılabilirler.
Bir parametre alan, bir sorgu yürüten ve bir sonuç döndüren bir saklı yordam örneği. Özellikle, saklı yordam BusinessEntityID bir parametre olarak kabul eder ve bunu talep edilen çalışanı döndürmek için HumanResources.Employee tablosunun birincil anahtarıyla eşleştirmek için kullanır.
> create procedure HumanResources.uspFindEmployee `*<<<---Store procedure name`*
@businessEntityID `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId, <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId <<<---parameter used as criteria
end
Bunu essential.com'dan öğrendim ... çok faydalı.
Saklı Yordamlarda ifadeler yalnızca bir kez yazılır ve istemciler ile sunucular arasındaki ağ trafiğini azaltır. Ayrıca Sql Enjeksiyon Saldırılarından da kaçınabiliriz.
ORM
gibi Saklı Yordam mı demek istediniz ?Entity Framework
CRUD