informatique:databases:mysql:procedures_et_fonctions
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
informatique:databases:mysql:procedures_et_fonctions [2024/11/21 18:37] – supprimée - modification externe (Date inconnue) 127.0.0.1 | informatique:databases:mysql:procedures_et_fonctions [2024/11/21 18:37] (Version actuelle) – ↷ Page déplacée de informatique:mysql:procedures_et_fonctions à informatique:databases:mysql:procedures_et_fonctions alexis | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Procédures et fonctions ====== | ||
+ | ===== Interruption de l' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | -- Avec l' | ||
+ | CREATE PROCEDURE <nom de la procédure> | ||
+ | this_proc: | ||
+ | IF < | ||
+ | LEAVE this_proc; | ||
+ | END IF; | ||
+ | ... | ||
+ | END; | ||
+ | |||
+ | -- Avec l' | ||
+ | CREATE PROCEDURE <nom de la procédure> | ||
+ | BEGIN | ||
+ | IF < | ||
+ | ... | ||
+ | END IF; | ||
+ | END; | ||
+ | </ | ||
+ | </ | ||
+ | La première méthode est plus intéressante car elle permet de garder un code propre, même quand le nombre de d' | ||
+ | Avec la seconde méthode, il sera nécessaire d' | ||
+ | |||
+ | ===== Définition d'une procédure ===== | ||
+ | |||
+ | ==== Utilisateur de création ==== | ||
+ | S'il n'est pas explicitement mentionné, l' | ||
+ | Il est possible de spécifier l' | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | CREATE DEFINER = `< | ||
+ | BEGIN | ||
+ | ... | ||
+ | END | ||
+ | </ | ||
+ | </ | ||
+ | **Note** : il n'est pas nécessaire que l' | ||
+ | |||
+ | ==== Type de sécurité appliquée ==== | ||
+ | Il existe 2 types de sécurité pour l' | ||
+ | - //DEFINER// : utilise les droits de l' | ||
+ | - //INVOKER// : utilise les droits de l' | ||
+ | S'il n'est pas explicitement mentionné, le type de sécurité appliqué sera // | ||
+ | Lors de la création d'une procédure, il est possible de définir le type de sécurité à appliquer. | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | CREATE PROCEDURE <nom de la procédure> | ||
+ | BEGIN | ||
+ | ... | ||
+ | END | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | **Note** : si l' | ||
+ | <WRAP prewrap> | ||
+ | < | ||
+ | ERROR 1449 (HY000): The user specified as a definer ('< | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Commentaires ==== | ||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | CREATE PROCEDURE <nom de la procédure> | ||
+ | COMMENT '< | ||
+ | BEGIN | ||
+ | ... | ||
+ | END | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Fonctions utiles ===== | ||
+ | |||
+ | ===== Ajout d'une durée normalisée à une date ===== | ||
+ | Selon la norme [[https:// | ||
+ | ))qui suit permet de faire ça mais uniquement pour les jours, les semaines, les mois et les années. | ||
+ | |||
+ | <WRAP prewrap> | ||
+ | <code sql> | ||
+ | CREATE FUNCTION ADD_ISO_DURATION(StartDate DATE, Duration VARCHAR(45)) | ||
+ | RETURNS DATE | ||
+ | BEGIN | ||
+ | DECLARE Pos INTEGER; | ||
+ | |||
+ | IF StartDate IS NULL OR Duration IS NULL OR LENGTH(Duration) = 0 THEN | ||
+ | RETURN StartDate; | ||
+ | END IF; | ||
+ | |||
+ | IF Duration REGEXP ' | ||
+ | SET StartDate = DATE_ADD(StartDate, | ||
+ | RETURN StartDate; | ||
+ | END IF; | ||
+ | |||
+ | IF Duration NOT REGEXP ' | ||
+ | RETURN NULL; | ||
+ | END IF; | ||
+ | |||
+ | SET Duration = SUBSTR(Duration, | ||
+ | |||
+ | SET Pos = LOCATE(' | ||
+ | IF Pos <> 0 THEN | ||
+ | SET StartDate = DATE_ADD(StartDate, | ||
+ | SET Duration = SUBSTR(Duration, | ||
+ | END IF; | ||
+ | |||
+ | SET Pos = LOCATE(' | ||
+ | IF Pos <> 0 THEN | ||
+ | SET StartDate = DATE_ADD(StartDate, | ||
+ | SET Duration = SUBSTR(Duration, | ||
+ | END IF; | ||
+ | |||
+ | SET Pos = LOCATE(' | ||
+ | IF Pos <> 0 THEN | ||
+ | SET StartDate = DATE_ADD(StartDate, | ||
+ | END IF; | ||
+ | |||
+ | RETURN StartDate; | ||
+ | END | ||
+ | </ | ||
+ | </ | ||
+ | |||