PL/pgSQL
PL/pgSQL ( Procedural Language/ PostGres Structured Query Language ), PostgreSQL DBMS'de kullanılan SQL dilinin prosedürel bir uzantısıdır . Bu dil, işlevleri, tetikleyicileri ve kuralları yazmak için tasarlanmıştır ve aşağıdaki özelliklere sahiptir:
- kontrol yapılarını SQL standardına ekler;
- karmaşık hesaplamalara izin verir;
- kullanıcı tarafından tanımlanan tüm veritabanı nesnelerini kullanabilir;
- kullanımı kolay.
_
Standart SQL, PostgreSQL ve diğer ilişkisel veritabanlarında sorgu oluşturmak için birincil dil olarak kullanılır. Taşınabilir ve hem öğrenmesi hem de kullanması kolaydır. Ancak zayıf noktası, her dil yapısının sunucu tarafından ayrı ayrı yürütülmesidir . Bu, istemci uygulamasının her isteği sunucuya göndermesi, sonucunu alması, uygulama mantığına göre belirli bir şekilde işlemesi, bir sonraki isteği göndermesi vb. anlamına gelir. İstemci ve veritabanı sunucusu farklı makinelerde bulunuyorsa, bu, gecikmelerde ve istemciden sunucuya gönderilen veri miktarında istenmeyen artışa ve bunun tersine yol açabilir.
PL/pgSQL kullanırken işler kolaylaşır. İstekleri ve hesaplama bloklarını sunucuda barındırılacak ve yürütülecek tek bir yapıda gruplandırmak mümkün hale gelir ve istemci, yürütülmesi için bir istek gönderir ve sonucu alır, çoğu durumda ileri geri tüm ara veri aktarımlarını atlar. durumların performans üzerinde çok olumlu bir etkisi vardır.
Ayrıca, sorguları SQL'de değil, DBMS sunucusunda depolanmış işlevler oluşturmadan pl / pgSQL dahil olmak üzere mevcut herhangi bir sunucu prosedür dilinde doğrudan yazmanıza izin veren anonim blokların işlevselliği de vardır.
Desteklenen bağımsız değişken ve dönüş türleri
PL/pgSQL'de yazılan işlevler, kullanıcı tanımlı, dize türleri ve kayıtlar dahil olmak üzere veritabanı sunucusu tarafından kabul edilen herhangi bir skaler veya bileşik türün argümanlarını alabilir ve döndürebilir.
, , ve sözde tiplerinin anyelementbağımsız değişkenlerine ve dönüş değerlerine de izin verilir . Bu, kabul edilen ve döndürülen türü çağrıdan çağrıya değişebilen polimorfik fonksiyonları tanımlamayı mümkün kılar. PL/pgSQL'deki işlevler tek bir değer değil, tüm değerler kümesini döndürebilir veya hiçbir değer döndürmeyebilir (türünü kullanarak ).
anyarrayanynonarrayanyenumvoid
PL/pgSQL kod yapısı
PL/pgSQL'de yazılmış herhangi bir program yapısı (işlev, tetikleyici veya kural) bir blok düzenine sahiptir ve şöyle görünür:
[ << etiket >> ]
[ DECLARE
değişken bildirimleri ] BEGIN program gövdesi END [ etiket ]; /* Çok satırlı açıklama */ -- Tek satırlı açıklama
Alışıldığı gibi, köşeli parantezler isteğe bağlı olan ve belirli bir versiyonda bulunmayabilecek parçaları gösterir.
Program gövdesi içindeki her bir bildirim ve her yapı noktalı virgülle bitmelidir. Başka bir bloğun içindeki bir bloğun sonunda noktalı virgül olmalıdır END, ancak en dıştaki bloğun ENDnoktalı virgüle ihtiyacı yoktur.
Program gövdesi içindeki herhangi bir yapı, kendi değişken bildirim bölümüyle ayrı bir bloğa da ayrılabilir.
Dilin sözdizimi
Değişken bildirim formatı
PL/pgSQL'deki herhangi bir değişken kullanılmadan önce bildirilmelidir, örtük bildirim desteklenmez; tek istisna döngüdür FOR - içinde varsayılan döngü değişkeni olarak bildirilir INTEGER. Bir değişkene hemen bir değer atamak veya onu sabit olarak bildirmek mümkündür:
ad [ SABİT ] yazın [ NULL DEĞİL ] [ { DEFAULT | : = } değer ]; ( Tüm parantezler gereklidir )
Anahtar kelime DEFAULTvarsayılan bir değer ayarlamak için kullanılır, anahtar kelime CONSTANTdeğişkeni bir sabit olarak tanımlayarak daha fazla değişiklikten korur.
Argümanları iletmek
Varsayılan olarak, iletilen parametreler olarak gösterilir $1ve $2bu şekilde devam eder. Ancak kodun okunabilirliği artırılmak isteniyorsa bu parametreler takma adlarla gösterilebilir. İki yol var.
Parametre adını doğrudan fonksiyon tanımında belirleyebilirsiniz:
CREATE FUNCTION sales_tax ( alt toplam gerçek ) RETURNS gerçek AS $$
BEGIN
RETURN alt toplamı * 0.06 ;
SON ;
$$ DİL plpgsql ;
Aksi takdirde, doğrudan değişken bildirimi bölümünde parametre için bir diğer ad bildirebilirsiniz:
FONKSİYON OLUŞTURUN sales_tax ( reel ) $$ OLARAK gerçek DÖNÜŞLER 1 $ İÇİN ALIAS BİLDİRİN ; GERİ DÖNÜŞ BAŞLAMA ara toplamı * 0.06 ; SON ; $$ DİL plpgsql ;
Ayrıca
- PL/SQL , Oracle'dan yakın bir dildir
- PostgreSQL'deki Diğer Gömülü Diller :
Bağlantılar
- PL/pgSQL - SQL İşlem Dili
- Sergei Suprunov. PostgreSQL: İşlevler ve Tetikleyiciler // Sistem Yöneticisi . - 2004. - No.10 (23) .