Saklı yordam nedir?


298

Ne olduğunu "saklı yordam" ve nasıl çalıştıkları mı?

Saklı yordamın telafisi nedir (her birinin saklı yordam olması gerekir )?

Yanıtlar:


243

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.


1
Veri okumak ve işlemleri yapmak ORMgibi Saklı Yordam mı demek istediniz ? Entity FrameworkCRUD
shaijut

2
Evet, bu olası bir yaklaşım.
ORM'leri

Saklı yordam hakkında daha fazla bilgi için URL adresime
Ankur Kumar Singh

150

Saklı yordam, özel bir görevi gerçekleştirmek için kullanılan bir dizi önceden derlenmiş SQL ifadesidir.

Örnek: Bir varsa Employeetablo

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

İlk önce Employeetabloyu 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 Employeetabloda Namesütunun boyutta olmalıdır varchar(30).


1
anlaşılması kolay bir örnek
HaFiz Umer

80

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 saklı yordamları
    • Kullanıcı tanımlı saklı yordamlar
    • Genişletilmiş saklı yordamlar
  • 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.


37

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.


16

Böyle bir durumu düşünün,

  • Veri içeren bir veritabanınız var.
  • Bu merkezi veritabanına erişmek için bir dizi farklı uygulama ve gelecekte bazı yeni uygulamalar da vardır.
  • Merkezi veritabanına erişmek için satır içi veritabanı sorgularını her uygulamanın kodunun içine ayrı ayrı ekleyecekseniz, muhtemelen aynı sorguyu farklı uygulamaların kodu içinde tekrar tekrar çoğaltmanız gerekir.
  • Bu tür bir durumda, saklı yordamları (SP'ler) kullanabilirsiniz. Saklı yordamlarda, sık sorulan soru (yordam) yazıyorsunuz ve bunları merkezi veritabanında depolıyorsunuz.
  • Artık işin kopyalanması asla eskisi gibi olmayacak ve veri erişimi ve bakımı merkezi olarak yapılacak.

NOT:

  • Yukarıdaki durumda, "Neden tüm uygulamalarla etkileşim kurmak için merkezi bir veri erişim sunucusu sunamıyoruz? Evet, bu olası bir alternatif olacaktır.
  • SP'lerin bu yaklaşıma göre temel avantajı, satır içi sorgulara sahip veri erişim kodunuzun aksine, SP'ler önceden derlenmiş ifadelerdir, bu nedenle daha hızlı çalışırlar. Ve iletişim maliyetleri (ağlar üzerinden) minimumda olacaktır.
  • Bunun aksine, SP'ler veritabanı sunucusuna biraz daha yük ekleyecektir. Bu duruma göre endişe yaratacaksa, satır içi sorguları olan merkezi bir veri erişim sunucusu daha iyi bir seçim olacaktır.

9

Saklı yordam temel olarak bir veritabanında belirli görevleri gerçekleştirmek için kullanılır. Örneğin

  • Veri üzerindeki bazı iş mantıklarından veritabanı sonuç kümelerini alın.
  • Tek bir çağrıda birden çok veritabanı işlemi gerçekleştirin.
  • Verileri bir tablodan başka bir tabloya taşımak için kullanılır.
  • Java gibi diğer programlama dilleri için çağrılabilir.

7

Depolanan yordam, tek bir yürütme planında derlenen bir grup SQL ifadesinden başka bir şey değildir.

  1. Bir kez yaratın ve n kez çağırın
  2. Ağ trafiğini azaltır

Ö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

6

Depolanan yordam, veri almak, verileri değiştirmek ve veritabanı tablosundaki verileri silmek için kullanılır. Bir SQL veritabanına her veri eklemek, güncellemek veya silmek istediğinizde tam bir SQL komutu yazmanıza gerek yoktur.


4
  • 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


4

"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 proceduresya da numbering stored procedures.

Sözdizimi Referansı

resim açıklamasını buraya girin

; numbergereğ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ç

resim açıklamasını buraya girin

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 :

  1. Sayı sözdizimi ile PROSEDÜR OLUŞTUR
  2. SQL Server'da Numaralı Saklı Yordamlar - techie-friendly.blogspot.com
  3. Saklı Yordamları Gruplama - sqlmag

DİKKAT

  1. Yordamları grupladıktan sonra, bunları ayrı ayrı bırakamazsınız.
  2. Bu özellik, Microsoft SQL Server'ın gelecekteki bir sürümünde kaldırılabilir.

0

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.


0

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ı,

  1. Verilere kontrollü erişim sağlama (son kullanıcılar yalnızca veri girebilir veya değiştirebilir, ancak yordam yazamazlar)

  2. Veri bütünlüğünün sağlanması (veriler tutarlı bir şekilde girilecektir) ve

  3. Verimliliği artırır (saklı yordamın ifadelerinin yalnızca bir kez yazılması gerekir)


0

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;

0

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ı.


0

Saklı Yordam, sunucuda kod yapmanıza yardımcı olacaktır. Parametreleri iletebilir ve çıktıyı bulabilirsiniz.

create procedure_name (para1 int,para2 decimal)
as
select * from TableName

0

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.

  • Başvurunuzda ödemeleri işlemek için bir üçüncü taraf programı kullanıyorsanız, burada veritabanı yalnızca gerekli bilgileri ve bu üçüncü tarafın yetkilendirdiği etkinliği göstermelidir, bununla Saklı Yordamlar'ı kullanarak izinleri ayarlayarak veri gizliliğini elde edebiliriz.
  • Tablonun güncellenmesi yalnızca hedeflediği tabloya yapılmalıdır, ancak işlem işleme ve hata işlemeyi kullanarak veri bütünlüğünü elde edebileceğimiz başka bir tabloyu güncellememelidir.
  • Veri türüne sahip bir veya daha fazla öğe döndürmek istiyorsanız, bir çıktı parametresi kullanmak daha iyidir.
  • Saklı Yordamlarda, döndürülmesi gereken her şey için bir çıktı parametresi kullanırız. Yalnızca bir tamsayı veri türüne sahip yalnızca bir öğe döndürmek istiyorsanız, bir dönüş değeri daha iyi kullanın. Aslında dönüş değeri yalnızca Saklı Yordamın başarılı veya başarısız olduğunu bildirmektir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.