Procedure Stockee

Vous êtes ici : >> SQL / Procédure Stockée
Temps d'étude : 30 min. Niveau : Moyen.
Tags : Base de données, cours sql, Procédure Stockée
Fichier(s) utile(s) pour ce cours : employes.sql

Procédure Stockée

Une procédure stockée est similaire à une fonction dans le sens où l'on peut isoler un traitement de plusieurs lignes de code à réaliser.

Dans une procédure stockée, nous ne sommes pas obligés de prévoir un RETURN contrairement à une fonction.

Dans le cadre d'un site web, application smartphone, logiciel, cela peut permettre de regrouper les requêtes au même endroit :

explication SQL

Dans le cas n°1, si l'une des requêtes est amené à changer, nous devrons le modifier dans le site web (code php par exemple), dans l'application smartphone (code Objectiv-C par exemple), et dans le logiciel (code java par exemple).

Dans le cas n°2, la requête changera uniquement dans la procédure et cela laissera ce travail à l'administrateur / développeur de base de données.

Prenons un exemple pour avoir l'occasion d'écrire une procédure : Nous allons réunir les employés par groupe en fonction de leur salaire :
- Entre 3000 et + = Groupe 1
- Entre 2000 et 3000 = Groupe 2
- Entre 0 et 2000 = Groupe 3

SQL / Procédure Stockée
	DELIMITER //
	DROP PROCEDURE IF EXISTS groupe_employes //
	DROP PROCEDURE groupe_employes //
	CREATE PROCEDURE groupe_employes(IN pren VARCHAR(10))
	BEGIN
		DECLARE s INT DEFAULT 0;
		SELECT * FROM employes WHERE prenom=pren;
		SELECT salaire FROM employes WHERE prenom = pren INTO s;
		IF s > 3000  THEN
			SELECT CONCAT(pren, '  fait partie du Groupe 1 avec ', s, ' de salaire mensuel') AS résultat;
		ELSEIF s >= 2000 AND s <= 3000 THEN
			SELECT CONCAT(pren, '  fait partie du Groupe 2 avec ', s, ' de salaire mensuel') AS résultat;
		ELSEIF s < 2000 AND s > 0 THEN
			SELECT CONCAT(pren, '  fait partie du Groupe 3 avec ', s, ' de salaire mensuel') AS résultat;
		ELSE
			SELECT CONCAT('employe inconnu', ' - ', s) AS résultat;
		END IF;
	END //
	CALL groupe_employes('Guillaume') //
	CALL groupe_employes('Damien') //
	CALL groupe_employes('Laura') //
	CALL groupe_employes('mauvais prenom') //
	
Dans cet exemple, nous utiliserons des conditions IF, ELSEIF, ELSE pour définir le groupe d'un employé.

La procédure peut être rappelée à tout moment et avec nimportequel employé existant.

Pour supprimer une procédure :
DROP PROCEDURE [nom de la procedure] //
Pour observer les procédures existantes :
SHOW PROCEDURE STATUS// 
SHOW PROCEDURE STATUS \G //