Formation PUB200 : MySQL, 2018 Les procédures et fonctions stockées

15.18 Les paramètres


Tout comme les procédures et fonctions des langages de programmation comme C#, PHP, Java, etc., les procédures et fonctions stockées MySQL peuvent recevoir des paramètres afin de transférer des valeurs entre le programme appelant et la procédure ou fonction.

Les paramètres des procédures stockées peuvent avoir différents rôles précisés par les mots-clés suivants :

  • IN : le paramètre contient une valeur lorsqu’il est passé à la procédure et la procédure ne peut pas le modifier.
  • OUT : le paramètre ne contient pas de valeur lorsqu’il est passé à la procédure. C’est la procédure qui se chargera de l'initialiser.
  • INOUT : le paramètre peut contenir une valeur lorsqu’il est passé à la procédure et cette dernière peut le modifier.

Ex : La procédure copie_table recevra le nom de la table à copier.

MySQL

CREATE PROCEDURE copie_table(IN table VARCHAR(25))

BEGIN

   -- (entête standard)

   ...

END!!

Ex : La procédure nombre_rendezvous initialisera le nombre de rendez-vous.

MySQL

CREATE PROCEDURE nombre_rendezvous (OUT nombre INTEGER)

BEGIN

   -- (entête standard)

   ...

END!!

Ex : La procédure indicatif_regional recevra un numéro de téléphone en paramètre et changera sa valeur
       en lui ajoutant l'indicatif régional.

MySQL

CREATE PROCEDURE indicatif_regional (INOUT tel VARCHAR(10))

BEGIN

   -- (entête standard)

   ...

END!!

Pour les fonctions, il ne faut pas mettre les mots-clés IN, OUT ni INOUT. Les paramètres des fonctions stockées sont toujours considérés comme IN.

Ex :

MySQL

CREATE FUNCTION total_dernier_rendezvous(mecanicien_id INT) RETURNS DOUBLE

READS SQL DATA

BEGIN

   -- (entête standard)

   ...

   RETURN total;

END!!

Procédure ou fonction stockée avec plusieurs paramètres

Lorsqu'on a besoin de plus d'un paramètre, il faut prendre le soin de répéter le type pour chacun des paramètres, que les types soient identiques ou non. Dans le cas d'une procédure stockée, il faut également répéter le mot-clé IN, OUT ou INOUT.

Ex :

MySQL

CREATE PROCEDURE test(IN valeur1 INT, IN valeur2 INT)

BEGIN

   -- (entête standard)

   ...

END!!

MySQL

CREATE FUNCTION autre_test(valeur1 INT, valeur2 INT) RETURNS INT 

READS SQL DATA

BEGIN

   -- (entête standard)

   ...

   RETURN ...;

END!!

Pour éviter les conflits de noms

Lorsqu'un paramètre réfère à un champ, vous risquez de rencontrer un conflit de nom. Par exemple, si on reçoit en paramètre le code d'un usager (code), la requête qui doit retrouver ce code devra utiliser le nom de champ code. Et si la procédure reçoit une date en paramètre, il y aura fort à parier qu'elle aura à travailler avec le champ date.

Comment alors différencier le paramètre du champ ? 

Dès qu'il y a possibilité de conflit de nom, on fera précéder le nom du paramètre par p_.

Ex :

MySQL

CREATE PROCEDURE nombre_rendezvous (IN p_date DATETIME, OUT nombre INT)

BEGIN

   -- (entête standard)

   ...

   SELECT COUNT(*) INTO nombre FROM rendezvous WHERE date=p_date;

   ...

END!!

Notez que dans d'autres langages procéduraux, comme par exemple en T-SQL (sous MS-SQL), les variables et les paramètres doivent être précédés d'un caractère spécial, soit le @. Pour ces langages, il n'y a donc jamais lieu de précéder le nom des paramètres par p_ pour les différencier des champs qui eux, ne sont pas précédés par ce caractère spécial.

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre