close

PL/pgSQL

Navigasyona git Aramaya git

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

Bağlantılar