Saklı yordam - Stored procedure
Bir saklı yordam ( proc , storp , sproc , StoPro , StoredProc , StoreProc , sp veya SP olarak da adlandırılır ), ilişkisel bir veritabanı yönetim sistemine (RDBMS) erişen uygulamalar için kullanılabilen bir alt yordamdır . Bu tür prosedürler veritabanı veri sözlüğünde saklanır .
Saklı yordamlar için kullanımlar, veri doğrulama (veritabanına entegre) veya erişim kontrol mekanizmalarını içerir. Ayrıca, saklı yordamlar, orijinal olarak uygulamalarda uygulanan mantığı birleştirebilir ve merkezileştirebilir. Zamandan ve bellekten tasarruf etmek için, birkaç SQL ifadesinin yürütülmesini gerektiren kapsamlı veya karmaşık işleme, saklı yordamlara kaydedilebilir ve tüm uygulamalar yordamları çağırır. Bir saklı yordamı diğerinin içinden yürüterek iç içe saklı yordamlar kullanılabilir.
Saklı yordamlar sonuç kümelerini , yani bir
SELECTifadenin sonuçlarını döndürebilir . Bu tür sonuç kümeleri, imleçler kullanılarak , diğer saklı yordamlar tarafından, bir sonuç kümesi bulucu ilişkilendirilerek veya uygulamalar tarafından işlenebilir . Saklı yordamlar ayrıca verileri işlemek için bildirilmiş değişkenler ve bir tablodaki birden çok satır arasında dolaşmasına izin veren imleçler içerebilir. Saklanan prosedürü akış kontrolü ifadeler genellikle içerir
IF,
WHILE,
LOOP,
REPEAT, ve
CASEifadeler, ve daha fazlası. Saklı yordamlar, değişkenin nasıl ve nerede bildirildiğine bağlı olarak değişkenleri alabilir, sonuçları döndürebilir veya değişkenleri değiştirebilir ve döndürebilir.
uygulama
Saklı yordamlar, kullanıcı tanımlı işlevlere (UDF'ler) benzer. En büyük fark, UDF'lerin SQL deyimleri içindeki diğer herhangi bir ifade gibi kullanılabilmesidir, oysa saklı yordamlar
CALLdeyim kullanılarak çağrılmalıdır .
CALL procedure(...)
veya
EXECUTE procedure(...)
Saklı yordamların tam ve doğru uygulanması bir veritabanı sisteminden diğerine değişir. Çoğu büyük veritabanı satıcısı bunları bir şekilde destekler. Veritabanı sistemine bağlı olarak, saklı yordamlar, örneğin SQL , Java , C veya C++ gibi çeşitli programlama dillerinde uygulanabilir . SQL olmayan dillerde yazılmış saklı yordamlar, SQL deyimlerini kendileri yürütebilir veya yürütmeyebilir.
Saklı yordamların artan şekilde benimsenmesi, SQL/PSM bölümünde SQL :1999 ve SQL:2003 standartlarında SQL diline prosedürel öğelerin eklenmesine yol açtı . Bu, SQL'i zorunlu bir programlama dili haline getirdi . Çoğu veritabanı sistemi, SQL/PSM'yi aşan tescilli ve satıcıya özel uzantılar sunar. SQL/JRT'nin yanı sıra Java saklı yordamları için standart bir belirtim mevcuttur .
|Veritabanı sistemi||uygulama dili|
|KÜBRİD||Java|
|IBM DB2||SQL PL ( SQL/PSM standardına yakın) veya Java|
|ateş kuşu||PSQL (Fyracle ayrıca Oracle'ın PL/SQL bölümlerini de destekler)|
|Informix||Java|
|bazlar arası||Saklı Yordam ve Tetikleme Dili|
|Microsoft SQL Sunucusu||Transact-SQL ve çeşitli .NET Framework dilleri|
|MySQL||SQL/PSM standardına sıkı sıkıya bağlı kalarak kendi saklı yordamları|
|NuoDB||SQL veya Java|
|OpenLink Virtüözü||Virtüöz SQL Prosedürleri (VSP); Java, C ve diğer programlama dilleri aracılığıyla da genişletilebilir|
|kehanet||PL/SQL veya Java|
|PostgreSQL||PL/pgSQL , PL/Perl veya PL/PHP gibi kendi fonksiyon dillerini de kullanabilir|
|SAP HANA||SQLScript veya R|
|SAP ASE||Transact-SQL|
|SAP SQL Her Yerde||Transact-SQL , Watcom SQL|
|SQLit||Desteklenmiyor|
Statik SQL ile karşılaştırma
- havai
- Saklı yordam ifadeleri veritabanında doğrudan saklanır olduğundan, olabilir tipik yazılım uygulamaları bir veritabanına satır içi (dinamik) SQL sorguları göndermek durumlarda gereklidir Derleme yükü tamamını veya bir kısmını kaldırın. (Ancak, çoğu veritabanı sistemi, dinamik SQL ifadelerini tekrar tekrar derlemekten kaçınmak için ifade önbelleklerini ve diğer yöntemleri uygular .) Ayrıca, önceden derlenmiş bazı SQL'den kaçınsalar da, ifadeler, SQL'in tüm argümanları olmadığı için optimal bir yürütme planı oluşturmanın karmaşıklığına katkıda bulunur. ifadesi derleme zamanında sağlanır. Belirli veritabanı uygulamasına ve yapılandırmasına bağlı olarak, genel sorgulara veya kullanıcı tanımlı işlevlere karşı saklı yordamlardan karışık performans sonuçları görülecektir.
- Ağ trafiğinden kaçınma
- Saklı yordamların önemli bir avantajı, doğrudan veritabanı motoru içinde çalışabilmeleridir . Bir üretim sisteminde bu, tipik olarak prosedürlerin tamamen erişilen verilere doğrudan erişimi olan özel bir veritabanı sunucusunda çalıştığı anlamına gelir. Buradaki fayda, ağ iletişim maliyetlerinden tamamen kaçınılabilmesidir. Bu, karmaşık SQL deyimleri dizisi için daha önemli hale gelir.
- Kapsülleme iş mantığı
- Saklı prosedürler, programcıların veri yönetimini basitleştirebilen ve istemci programlarında başka bir yerde mantığı kodlama ihtiyacını azaltabilen bir API olarak iş mantığını veritabanına yerleştirmelerine olanak tanır . Bu, hatalı istemci programları tarafından daha az veri bozulması olasılığına neden olabilir. Veritabanı sistemi, saklı yordamlar yardımıyla veri bütünlüğünü ve tutarlılığını sağlayabilir .
- Erişim haklarını devretme
- Birçok sistemde, saklı yordamlara, bu yordamları yürüten kullanıcıların doğrudan sahip olmadığı veritabanına erişim hakları verilebilir.
- SQL enjeksiyon saldırılarına karşı bazı koruma
- Enjeksiyon saldırılarına karşı korunmak için saklı yordamlar kullanılabilir. Bir saldırgan SQL komutları eklese bile saklı yordam parametreleri veri olarak kabul edilecektir. Ayrıca, bazı DBMS, parametrenin türünü kontrol edecektir. Bununla birlikte, uygun önlemler alınmadıkça, girdiyi kullanarak dinamik SQL üreten saklı bir prosedür, SQL enjeksiyonlarına karşı hala savunmasızdır.
Diğer kullanımlar
Bazı sistemlerde, işlem yönetimini kontrol etmek için saklı prosedürler kullanılabilir; diğerlerinde, saklı yordamlar, işlemlerin onlar için etkin bir şekilde şeffaf olacağı şekilde bir işlemin içinde çalışır. Saklı yordamlar ayrıca bir veritabanı tetikleyicisinden veya bir koşul işleyicisinden de çağrılabilir . Örneğin, bir saklı yordam, belirli bir tablodaki bir ekleme veya bir tablodaki belirli bir alanın güncellenmesi tarafından tetiklenebilir ve saklı yordamın içindeki kod yürütülür. Saklı yordamları koşul işleyicileri olarak yazmak, aynı zamanda, veritabanı yöneticilerinin, hataları yakalamak ve bazı denetim bilgilerini veritabanına veya bir dosya gibi harici bir kaynağa kaydetmek için saklı yordamları kullanarak sistemdeki hataları daha ayrıntılı olarak izlemesine olanak tanır.
Fonksiyonlarla karşılaştırma
- İşlev, belirli hesaplamaları gerçekleştirmek için yazılmış bir alt programdır.
- Bir skaler işlev yalnızca bir değer (veya NULL) döndürürken, bir tablo işlevi, her satırda bir veya daha fazla sütun bulunan sıfır veya daha fazla satır içeren (ilişkisel) bir tablo döndürür.
- İşlevler bir değer döndürmelidir (
RETURNanahtar kelimeyi kullanarak ), ancak saklı yordamlar için bu zorunlu değildir.
- Saklı yordamlar
RETURNanahtar kelimeyi kullanabilir, ancak hiçbir değer iletilmez.
- Fonksiyonlar
SELECT, veri manipülasyonu yapmamaları koşuluyla ifadelerde kullanılabilir . Ancak, prosedürler
SELECTifadelere dahil edilemez .
- Saklı yordam,
OUTparametreyi kullanarak birden çok değer döndürebilir veya değer döndürmeyebilir.
- Saklı yordam, sorgu derleme süresini kaydeder.
- Saklı yordam, bir veritabanı nesnesidir.
- Saklı yordam maddi bir nesnedir.
Hazırlanan ifadelerle karşılaştırma
Hazırlanan ifadeler sıradan bir ifade veya sorgu alır ve daha sonra farklı değişmez değerlerin kullanılabilmesi için onu parametreleştirir. Saklı prosedürler gibi, verimlilik için sunucuda depolanırlar ve SQL enjeksiyon saldırılarına karşı bir miktar koruma sağlarlar. Daha basit ve daha açıklayıcı olmasına rağmen, hazırlanan ifadeler normalde prosedürel mantığı kullanmak için yazılmaz ve değişkenler üzerinde işlem yapamaz. Basit arayüzleri ve istemci tarafı uygulamaları nedeniyle, hazırlanan ifadeler DBMS arasında daha yaygın olarak yeniden kullanılabilir.
Akıllı sözleşmelerle karşılaştırma
Akıllı sözleşme , bir RDBMS'nin aksine bir blok zincirinde depolanan yürütülebilir koda uygulanan bir terimdir . Genel blok zinciri ağlarının yürütme sonucu fikir birliği mekanizmalarının geleneksel özel veya birleşik veritabanlarından prensipte farklı olmasına rağmen, genellikle bir değer işlemi duygusuyla da olsa, görünüşte saklı prosedürlerle aynı işlevi yerine getirirler.
Dezavantajları
- Saklı yordam dilleri genellikle satıcıya özeldir. Veritabanı satıcılarını değiştirmek genellikle mevcut saklı yordamların yeniden yazılmasını gerektirir.
- Saklı yordamlardaki değişiklikleri bir sürüm kontrol sistemi içinde takip etmek diğer kodlardan daha zordur. Değişiklikler, dahil edilecek proje geçmişinde saklanacak komut dosyaları olarak yeniden oluşturulmalıdır ve prosedürlerdeki farklılıkların birleştirilmesi ve doğru şekilde izlenmesi daha zor olabilir.
- Saklı yordamlardaki hatalar, bir uygulama IDE'sindeki derleme veya derleme adımının parçası olarak yakalanamaz - aynısı, saklı bir yordam kaybolduğunda veya yanlışlıkla silindiğinde de geçerlidir.
- Farklı satıcılardan gelen saklı yordam dilleri, farklı gelişmişlik düzeylerine sahiptir.
- Örneğin, Postgres'in pgpsql'si Microsoft'un T-SQL'inden daha fazla dil özelliğine (özellikle uzantılar aracılığıyla) sahiptir.
- Saklı yordamları yazmak ve hata ayıklamak için araç desteği genellikle diğer programlama dilleri kadar iyi değildir, ancak bu, satıcılar ve diller arasında farklılık gösterir.
- Örneğin, hem PL/SQL hem de T-SQL, özel IDE'lere ve hata ayıklayıcılara sahiptir. PL/PgSQL, çeşitli IDE'lerden hata ayıklanabilir.