PL/pgSQL
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å
- PL/SQL er et nært språk fra Oracle
- Andre innebygde språk i PostgreSQL :
- PL/Java
- PL/Lua
- PL/Perl
- PL/PHP
- PL/Python
- PL/R
- PL/Ruby
- PL/ordning
- PL/Sh
- PL/Tcl
- PL/V8
Lenker
- PL/pgSQL - SQL prosedyrespråk
- Sergei Suprunov. PostgreSQL: Funksjoner og utløsere // Systemadministrator . - 2004. - Nr. 10 (23) .