close

PL/pgSQL

Gå til navigasjon Gå til søk

PL/pgSQL ( Procedural Language/ PostGres  Structured Query Language ) er en prosedyreutvidelse av SQL -språket som brukes i PostgreSQL DBMS . Dette språket er ment for å skrive funksjoner, triggere og regler og har følgende funksjoner:

  • legger til kontrollkonstruksjoner til SQL-standarden;
  • tillater komplekse beregninger;
  • kan bruke alle databaseobjekter definert av brukeren;
  • lett å bruke.

Fordeler med å bruke

Standard SQL brukes i PostgreSQL og andre relasjonsdatabaser som det primære språket for å lage spørringer. Den er bærbar og enkel å både lære og bruke. Dets svake punkt er imidlertid at hver språkkonstruksjon utføres separat av serveren . Dette betyr at klientapplikasjonen må sende hver forespørsel til serveren, motta resultatet, behandle den på en bestemt måte i henhold til applikasjonslogikken, sende neste forespørsel osv. Hvis klienten og databaseserveren er plassert på forskjellige maskiner, dette kan føre til uønsket økning i forsinkelser og mengden data som sendes fra klienten til serveren og omvendt.

Når du bruker PL/pgSQL, blir ting enklere. Det blir mulig å gruppere forespørsler og beregningsblokker i en enkelt struktur som skal hostes og kjøres på serveren , og klienten vil sende en forespørsel om utførelse og motta resultatet, og omgå alle mellomliggende dataoverføringer frem og tilbake, som i de fleste saker har en svært positiv effekt på ytelsen.

Det er også funksjonaliteten til anonyme blokker, som lar deg skrive spørringer ikke i SQL, men direkte i et hvilket som helst eksisterende prosedyrespråk på serveren, inkludert pl / pgSQL, uten å opprette lagrede funksjoner på DBMS-serveren.

Støttede argument- og returtyper

Funksjoner skrevet i PL/pgSQL kan ta som argumenter og returnere verdier av enhver skalar eller sammensatt type akseptert av databaseserveren, inkludert brukerdefinerte, strengtyper og poster.

Argumenter og returverdier for , , og pseudotypene anyelementer også tillatt . Dette gjør det mulig å definere polymorfe funksjoner hvis aksepterte og returnerte type kan endres fra anrop til anrop. Funksjoner i PL/pgSQL kan ikke returnere én verdi, men et helt sett med verdier, eller ikke returnere noen verdi i det hele tatt (ved å bruke typen ). anyarrayanynonarrayanyenumvoid

PL/pgSQL-kodestruktur

Enhver programkonstruksjon (funksjon, trigger eller regel) skrevet i PL/pgSQL har et blokkoppsett og ser slik ut:

[  << label >>  ] 
[  DECLARE 
    variabeldeklarasjoner  ] BEGIN programtekst END [ label ] ; _  /* Flerlinjekommentar     */ -- Enkeltlinjekommentar

     
   



Som vanlig angir firkantede parenteser fragmenter som er valgfrie og kanskje ikke finnes i en bestemt versjon.

Hver enkelt erklæring og hver konstruksjon i programkroppen må avsluttes med semikolon. En blokk inne i en annen blokk må også ha semikolon etter den avsluttende END, men den ytterste blokken ENDtrenger ikke semikolon.

Enhver konstruksjon i programkroppen kan også separeres i en separat blokk, med sin egen variabeldeklarasjonsseksjon.

Syntaks for språket

Variabel deklarasjonsformat

Enhver variabel i PL/pgSQL må deklareres før den brukes, implisitt erklæring støttes ikke; det eneste unntaket er løkken FOR - i den er standard løkkevariabel erklært som INTEGER. Det er mulig å umiddelbart tilordne en verdi til en variabel eller erklære den som en konstant:

navn  [  KONSTANT  ]  skriv  [  IKKE  NULL  ]  [  {  STANDARD  |  : =  }  verdi  ];  ( Alle  parenteser  er påkrevd )

Nøkkelordet DEFAULTbrukes til å angi en standardverdi, nøkkelordet CONSTANTbeskytter variabelen mot ytterligere endring ved å definere den som en konstant.

Bestått argumenter

Som standard er beståtte parametere angitt som $1, $2og så videre. Men hvis det er ønskelig å øke lesbarheten til koden, kan disse parameterne betegnes med aliaser. Det er to måter.

Du kan sette parameternavnet direkte i funksjonsdefinisjonen:

CREATE  FUNCTION  sales_tax ( subtotal  real )  RETURNS  real  AS  $$ 
BEGIN 
    RETURN  subtotal  *  0.06 ; 
SLUTT ; 
$$  SPRÅK  plpgsql ;

Ellers kan du deklarere et alias for parameteren direkte i variabeldeklarasjonsdelen:

CREATE  FUNCTION  sales_tax ( real )  RETURER  real  AS  $$ 
ERKLÆR 
    subtotal alias FOR  $ 1 ; BEGIN RETURN subtotal * 0,06 ; SLUTT ; $$ SPRÅK plpgsql ;  

       

  

Se også

Lenker