PL/pgSQL functies en procedures

PostgreSQL is een erg uitgebreid systeem, om het nóg uitgebreider te maken heb je de mogelijkheid om je eigen functies te schrijven. Functies in een database zijn erg krachtig en vaak ook snel omdat het rechtstreeks op de server gebeurt. Functies / procedures kunnen worden geschreven in verschillende talen, het is zelfs mogelijk om PHP te gebruiken als taal!!! (zie http://www.commandprompt.com/community/plphp). De meest gebruikte is echter PL/pgSQL.

In een functie kun je gebruik maken van de standaard SQL-mogelijkheden, uitgebreid met foutafhandeling, loops, control-structures etc.

Simpel beginnen: Een sommetje. We maken een functie welke 2 getallen bij elkaar optelt en de uitkomst teruggeeft:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
CREATE OR REPLACE FUNCTION som(INTEGER,INTEGER) RETURNS INTEGER AS'
BEGIN
  RETURN $1+$2;
END;
' LANGUAGE 'plpgsql'


Hiermee wordt de functie “som” aangemaakt (of vervangen indien hij al bestaat). De functie heeft 2 argumenten nodig die beiden van het type INTEGER zijn, de returnwaarde van de functie is ook een INTEGER. Binnen de functie kun je de argumenten benaderen op nummer, welke beginnen bij 1.

De BEGIN en END geven het blok aan waarin bepaalde zaken plaatsvinden. Zo’n blok kan genest worden, variabelen welke je in een blok declareerd kun je in geneste blokken gebruiken maar niet in hoger gelegen blokken, de scope van een variabele beperkt zich dan dus tot het eigen blok en de blokken daarbinnen.

Je kunt deze functie op de volgende manier aanroepen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT som(2,3); // Geeft uitkomst 5


Iets uitgebreider: Een wiskundige berekening; de faculteit van een getal berekenen. Bijvoorbeeld: De faculteit van 5 is 120: 5*4*3*2*1 = 120. Dit wordt ook wel geschreven als 5!

In dit voorbeeld komen de blokken en if-statements naar voren:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE FUNCTION faculteit(INTEGER) RETURNS INTEGER AS '
DECLARE
  getal INTEGER;
BEGIN
  getal := $1;
  -- Controleer of we een geldig getal krijgen
  IF getal IS NULL OR getal<0 THEN
    RAISE NOTICE ''Geen geldig getal'';
  ELSE
    IF getal = 1 THEN
      RETURN 1;
    ELSE
      DECLARE
        volgende INTEGER;
      BEGIN
        volgende := faculteit( getal-1 )*getal;
        RETURN volgende;
      END;
    END IF;
  END IF;
END;
' LANGUAGE 'plpgsql';


De aanroep van deze functie gebeurt op deze wijze:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT faculteit(5); // Uitkomst 120


In deze functie wordt een variabele gedeclareerd waarin we de meegegeven waarde opslaan, in een dieper blok genereren we een variabele “volgende” welke we als returnwaarde gebruiken. Je ziet dat dit een recursieve functie is, hij roept zichzelf aan totdat de eindwaarde is bereikt.

De mogelijkheden van functies en procedures in PL/pgSQL zijn echt oneindig, ik raad je aan om er over te lezen op http://www.postgresql.org/docs/8.1/static/plpgsql.html.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Voorbeeld-case
  3. Overerving in PostgreSQL
  4. Aanmaken van tabellen en het leggen van relaties
  5. Views
  6. PL/pgSQL functies en procedures
  7. Triggers
  8. Check constraints en domains
  9. Conclusie

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.