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 | ||
| + | </ | ||
| + | </ | ||
| + | |||
