Instellen van routine karakteristieken

Zowel de CREATE PROCEDURE en CREATE FUNCTION commando’s ondersteunen bijkomende clausules, die gebruikt worden om verschillende kenmerken van de opgeslagen routine te definiëren. Hier volgt een lijst:

  • De DETERMINISTIC clausule geeft aan dat de routine ‘deterministisch’ is , dat wil zeggen dat het bij dezelfde invoer altijd dezelfde uitvoer geeft. Routines die gebruik maken van willekeurige getallen, zijn gebonden aan de huidige tijd, of gebruiken functies die bij elke aanroep een andere waarde retourneren, zoals CONNECTION_ID(). ZIj moeten in plaats daarvan de NOT DETERMINISTIC clausule gebruiken.
  • De LANGUAGE clausule specifieert de taal voor de routine. Op het moment van dit schrijven, is de enig geldige waarde van deze clausule ‘SQL‘.
  • De CONTAINS SQL clausule geeft aan dat de routine SQL-instructies bevat . Ook geldige alternatieven voor deze clausule zijn READS SQL DATA (routine bevat instructies die tabelgegevens leest), MODIFIES SQL DATA (routine bevat instructies die tabelgegevens schrijft), en NO SQL (routine bevat geen SQL-statements).
  • De SQL SECURITY clausule bepaalt welke gebruikerprivileges moeten worden overwogen bij het uitvoeren van de routine: de gebruiker die het aangemaakt heeft (DEFINER) of de gebruiker die het aangeroepen heeft (INVOKER).
  • Het COMMENT clausule specificeert een menselijk leesbaar beschrijvend label voor de routine.

Hier is een voorbeeld van hoe deze kenmerken kunnen worden toegevoegd aan een routinedefinitie:

DELIMITER //
CREATE PROCEDURE get_airport_name(IN aid INT)
DETERMINISTIC
LANGUAGE SQL
READS SQL DATA
SQL SECURITY INVOKER
BEGIN
SELECT AirportName FROM airport WHERE AirportID = aid;
END //

(0 row(s) affected)

Naast het feit die u toestaat om sessievariabelen binnen een opgeslagen procedure aan te maken, te benaderen en te manipuleren, biedt MySQL het DECLARE sleutelwoord, welk gebruikt kan worden om voor een bepaalde routine variabelen te declareren die ‘lokaal’ zijn .

Hier is een voorbeeld:

DELIMITER //
CREATE PROCEDURE decl()
BEGIN
    DECLARE count INT;
END //

(0 row(s) affected)

Een DECLARE instructie moet worden gevolgd door de naam van de variabele en het gegevens type. Dezelfde regels die door de gebruiker gedefinieerde variabele namen regeren ook van toepassing op variabelen in opgeslagen routines. Meerdere variabelen van hetzelfde type kunnen in één DECLARE instructie geïnitialiseerd worden, door het scheiden van de variabele namen met een komma.

Het volgende schema laat zien hoe:

DELIMITER //
CREATE PROCEDURE decl()
BEGIN
DECLARE count, retval, x INT;
END //

(0 row(s) affected)

De DECLARE instructie ondersteunt ook een optioneel sleutelwoord DEFAULT, die gebruikt kan worden om aan een variabele een standaardwaarde toe te wijzen.

DELIMITER //
CREATE PROCEDURE decl()
BEGIN
    DECLARE count INT DEFAULT 0;
END //

(0 row(s) affected)

Eenmaal gedefinieerd, kunnen aan deze variabelen waarden worden toegewezen met behulp van de SET of SELECT INTO instructies. Ze kunnen door andere instructies binnen de routine benaderd worden door hun naam. Merk op dat het niet nodig is om het voorvoegsel ‘@’ te gebruiken wanneer we lokale variabele benaderen die gedefinieerd is met de DECLARE instructie.

DELIMITER //
CREATE PROCEDURE add_one()
BEGIN
    DECLARE count INT DEFAULT 99;
    SELECT (count+1);
END //

(0 row(s) affected)