[G_PRO] Databanken
  • Welkom
  • Inleiding
    • Benodigdheden
    • Nuttige extra's
    • Mee helpen?
  • Semester 1: databanken intro
    • Installatie van alle software
    • Databanken
      • Inleiding
      • Voorbeeld
      • Wat is een relationele databank
      • Basisstructuren van een relationele databank
      • Diagramnotatie
    • (My)SQL
      • DDL
        • Datatypes
          • Enum
        • CREATE
        • ALTER
        • DROP
        • Sleutels voor identificatie
        • Primaire sleutel toevoegen/verwijderen
        • Primaire sleutel in een nieuwe tabel
        • Vreemde sleutels
        • Relaties-voorstellen
        • Labo
      • DML
        • INSERT
        • UPDATE
        • DELETE
        • LIKE
        • Logische operatoren
        • Vergelijkingen
        • SELECT sorteren
        • Functies
        • Labo
      • SELECT
        • SELECT met clausules
        • SELECT met WHERE
      • Groeperen en samenvatten
        • Aggregaatfuncties
        • SELECT met GROUP BY
        • SELECT met HAVING
        • IN
        • BETWEEN
        • SELECT DISTINCT
        • Labo
      • JOINS
        • JOINs bij simpele relaties
        • JOINs via tussenliggende tabel
        • UPDATE van JOIN
      • apTunes project
  • PRO (GEEN LEERSTOF EN/OF IN OPBOUW)
    • PRO
      • Waarom een databank?
      • Een databank ontwerpen
      • ERM
        • Basisbegrippen
        • Constraints (voorwaarden, beperkingen)
        • Keys (Sleutels)
        • Discussiepunten bij ontwerp in ERM
        • Aanvullende begrippen
        • Herleiden van ERD's tot tabellen
        • Voorbeeld
        • Bibliografie
        • Labo oefeningen
      • NoSQL
      • Blockchain
  • SEMESTER 2: DATABANKEN
    • Join
      • INNER JOIN
      • LEFT JOIN
      • COALESCE
      • RIGHT JOIN
      • LEFT EXCLUDING JOIN
      • RIGHT EXCLUDING JOIN
      • OUTER JOIN
      • OUTER EXCLUDING JOIN
      • Samenvattende flowchart
      • Labo oefeningen
    • Views
      • CREATE
      • ALTER
      • DROP
      • UPDATE
      • RENAME
      • BESLUIT
      • Labo oefeningen
    • Subqueries
      • Een onafhankelijke subquery
      • Subqueries met tijdelijke opslag
      • Labo oefeningen
    • Indexeren
      • mogelijkheden
      • CREATE
      • DROP
      • UNIQUE
      • trage queries opvolgen
    • ERD
      • ReferentiĆ«le beperkingen
      • Overzicht
      • Labo oefeningen
    • Stored programs
      • Stored procedures
      • CREATE
      • DROP
      • DELIMITER
      • Variabelen
      • Parameters
      • Gerelateerde data invoegen
      • IF -THEN-ELSE-ELSEIF
      • LOOP
      • WHILE
      • REPEAT
      • SIGNAL
      • Error handling
      • RESIGNAL
      • Stored functies
      • Triggers
      • Cursors
      • Transacties en rollbacks
      • Object access control
      • Oefeningen basisgebruik stored procedures
      • Oefeningen control flow
      • Oefeningen stored functions
      • Oefeningen triggers
      • Oefeningen error handling
      • Oefeningen transacties en access control
Powered by GitBook
On this page
  • Verschil in gebruik met stored procedures
  • Determinisme
  • Aanmaken van functies
  • De referentie

Was this helpful?

Export as PDF
  1. SEMESTER 2: DATABANKEN
  2. Stored programs

Stored functies

PreviousRESIGNALNextTriggers

Last updated 2 years ago

Was this helpful?

Stored functies zijn, net als stored procedures, stappenplannen om tot een bepaald resultaat te komen, maar hun doel is verschillend. Stored procedures zijn in de eerste plaats bedoeld om taken in een specifieke database makkelijker uitvoerbaar te maken. Functies zijn in de eerste plaats bedoeld om zuiver inputs in outputs te transformeren. Dat wil niet zeggen dat je ze niet andersom kan gebruiken, maar dat zal minder handig werken.

Verschil in gebruik met stored procedures

Een stored procedure MyProcedure roep je op door middel van CALL MyProcedure(). De procedure kan ook IN en OUT parameters hebben en beide plaats je tussen de ronde haakjes.

Een functie schrijf je gewoon zonder CALL en alle parameters zijn invoer, dus stemmen overeen met IN parameters in een stored procedure. De functie wordt dan uitgerekend en het resultaat wordt uiteindelijk gebruikt. Bijvoorbeeld: CONCAT is een ingebouwde functie en als je ergens CONCAT('hello','world') schrijft is het net alsof je op diezelfde plaats 'helloworld' hebt geschreven.

Determinisme

Een functie kan deterministisch of niet-deterministisch zijn. Een deterministische functie produceert voor dezelfde inputs altijd dezelfde outputs. CONCAT is een deterministische functie: CONCAT('hello','world') zal altijd 'helloworld' produceren. Een niet-determinische functie kan bij identieke invoer toch verschillende uitvoer produceren. RAND is niet-deterministisch. RAND() kan de ene keer bijvoorbeeld 0.42 opleveren en de volgende keer weer 0.24.

MySQL veronderstelt standaard dat een functie niet-deterministisch is als je het zelf niet aangeeft.

Om niet-deterministische functies te kunnen schrijven, kan het zijn dat je eerst de globale setting log_bin_trust_function_creators eenmalig moet aanzetten: SET GLOBAL log_bin_trust_function_creators = TRUE;

Aanmaken van functies

De syntax om een functie aan te maken lijkt sterk op de syntax om een stored procedure aan te maken. Je doet dit dan ook via de function editor in Workbench:

In het algemeen kan je dezelfde zaken doen tussen de begin en end als in een stored procedure. Je kan dus variabelen declareren, procedures oproepen, if of lusstructuren gebruiken,... Wat hier nieuw is, is het keyword returns. Dit geeft aan dat de expressie die volgt het resultaat is van de functie.

Een voorbeeld van een deterministische functie is als volgt:

Een voorbeeld van een niet-deterministische functie:

De referentie

MySQL voorziet veel ingebouwde functies. Als je algemene functionaliteit nodig hebt, is de kans groot dat deze al voorzien is. Raadpleeg om zeker te zijn van wat voorzien is en wat niet.

deze pagina van de officiƫle documentatie
De function editor vind je op dezelfde manier terug als de procedure editor