Variable Et Requete Preparee

Temps d'étude : 20 min. Niveau : Moyen.
Tags : Base de données, cours sql, Requête préparée
Fichier(s) utile(s) pour ce cours : employes.sql

Les Variables

Une variable est un espace nommé permettant de conserver une valeur.

Il existe 3 types de variables :
  • Les variables systèmes (prévu par le langage)

  • Les variables de portée globale (défini par le développeur)

  • Les variables de portée locale (défini par le développeur dans le cadre de fonction ou procédure stockée)

Quelques exemples :

SQL / Variables
	SHOW VARIABLES ; -- permet d'observer les variables système
	
	SELECT @@version; -- les variables système comporte un double arrobase @@
	
	SET @ecole = "Mon Ecole"; -- Affectation d'une variable.
	SELECT @ecole; -- Affichage du contenu de la variable. Les variables globales comportent un seul arrobase @.
	
	-- SET pays = "France"; SELECT pays; -- les variables locales (dans le cadre de fonction ou procédure) ne comportent pas d'arrobase @.
	



Les Requêtes préparées

Le cycle d'une requête classique est le suivant : Analyse / Interpretation / Exécution.

SQL / Requête Préparée
	PREPARE req FROM 'SELECT * FROM employes WHERE service = "commercial"';	
Nous passons dans les étapes d'analyse et d'interprétation.

SQL / Requête Préparée
	EXECUTE req;
	EXECUTE req;
	EXECUTE req;
	EXECUTE req;
	EXECUTE req;
	
Nous passons uniquement dans l'étape d'exécution.

Pour 5 exécutions d'une requête préparée, cela nous fait rentrer dans 7 étapes (1 analyse, 1 interprétation, 5 exécution).

Contrairement à une requête normale qui nous ferait 15 étapes (5 analyse, 5 interprétation, 5 exécution).

Nous pouvons également utiliser des requêtes préparées avec des arguments (paramètres variables) :

SQL / Requête Préparée
PREPARE req2 FROM 'SELECT * FROM abonne WHERE prenom = ?'; 
	SET @prenom='laura';
	EXECUTE req2 USING @prenom ;
Dans cet exemple, nous affectons la variable @prenom avec la valeur Laura. Nous l'utilisons ensuite dans le cadre de notre requête.

Pour supprimer une requête préparée :

SQL / Requête Préparée
DROP PREPARE req2;