DELIMITER |
CREATE PROCEDURE test_portee2()
BEGIN
DECLARE v_test1 INT DEFAULT 1;
BEGIN
DECLARE v_test2 INT DEFAULT 2;
SELECT 'Imbriqué 1' AS Bloc;
SELECT v_test1, v_test2;
END;
BEGIN
SELECT 'imbriqué 2' AS Bloc;
SELECT v_test1, v_test2;
END;
END|
DELIMITER ;
CALL test_portee2();
Bloc
Imbriqué 1
v_test1 v_test2
1
2
Bloc
imbriqué 2
Code : Console
ERROR 1054 (42S22): Unknown column 'v_test2' in 'field list'
À nouveau, v_test1, déclarée dans le bloc principal, existe dans les deux blocs imbriqués. Par contre, v_test2 n'existe que dans le
bloc imbriqué dans lequel elle est déclarée.
Attention cependant à la subtilité suivante : si un bloc imbriqué déclare une variable locale ayant le même nom qu'une
variable locale déclarée dans un bloc d'un niveau supérieur, il s'agira toujours de deux variables locales différentes, et
seule la variable locale déclarée dans le bloc imbriqué sera visible dans ce même bloc.
Exemple 3 :
Code : SQL
DELIMITER |
CREATE PROCEDURE test_portee3()
BEGIN
DECLARE v_test INT DEFAULT 1;
SELECT v_test AS 'Bloc principal';
Partie 5 : Sécuriser et automatiser ses actions
278/414
www.openclassrooms.com
CREATE PROCEDURE test_portee2()
BEGIN
DECLARE v_test1 INT DEFAULT 1;
BEGIN
DECLARE v_test2 INT DEFAULT 2;
SELECT 'Imbriqué 1' AS Bloc;
SELECT v_test1, v_test2;
END;
BEGIN
SELECT 'imbriqué 2' AS Bloc;
SELECT v_test1, v_test2;
END;
END|
DELIMITER ;
CALL test_portee2();
Bloc
Imbriqué 1
v_test1 v_test2
1
2
Bloc
imbriqué 2
Code : Console
ERROR 1054 (42S22): Unknown column 'v_test2' in 'field list'
À nouveau, v_test1, déclarée dans le bloc principal, existe dans les deux blocs imbriqués. Par contre, v_test2 n'existe que dans le
bloc imbriqué dans lequel elle est déclarée.
Attention cependant à la subtilité suivante : si un bloc imbriqué déclare une variable locale ayant le même nom qu'une
variable locale déclarée dans un bloc d'un niveau supérieur, il s'agira toujours de deux variables locales différentes, et
seule la variable locale déclarée dans le bloc imbriqué sera visible dans ce même bloc.
Exemple 3 :
Code : SQL
DELIMITER |
CREATE PROCEDURE test_portee3()
BEGIN
DECLARE v_test INT DEFAULT 1;
SELECT v_test AS 'Bloc principal';
Partie 5 : Sécuriser et automatiser ses actions
278/414
www.openclassrooms.com
