Bonjour,

Je souhaite faire une procédure qui me dira si un patch a été enregistré dans un bdd :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
DELIMITER //
CREATE OR REPLACE PROCEDURE pa_patch_existe
(
	IN bdd VARCHAR(16), -- Nom de la BDD où chercher
	IN patch VARCHAR(20), -- Nom du patch à chercher
	OUT resultat VARCHAR(100) -- Résultat du test en clair
)
/************************************************************************************************
Base :			referentiel
Objet :			Procédure
Auteur :		Philippe Leménager
Version :		V 0.1 - plemenager - 2020-03-23 - Création
Description : 	Cherche dans la bdd si un patch a été enregistré donc s'il a été appliqué à la bdd
Utilise :		ta_database_admin_dba de la bdd concernée
Historique :	
*************************************************************************************************/
BEGIN
	DECLARE nombre INT;
 
	SET @req = CONCAT('SELECT COUNT(*) INTO nombre FROM ', bdd, '.ta_database_admin_dba ', 'WHERE dba_commande = ', patch);
 
	PREPARE stmt FROM @req;
	EXECUTE stmt;
	DEALLOCATE PREPARE stmt;
 
	IF nombre = 1 THEN
		SET resultat = CONCAT('Le patch ', bdd, '.', patch, ' a bien été précédemment installé.');
	ELSE 
		SET resultat = CONCAT('Le patch ', bdd, '.', patch, ' EST MANQUANT !');
	END IF;
END; //
DELIMITER ;
Cette procédure fait partie de la BDD referentiel mais peut aussi permettre d'interroger d'autres BDD qui ont elles aussi la table ta_database_admin_dba pour l'enregistrement de leurs propres patches. D'où le paramètre bdd en entrée.

Lorsque j'essaie d'exécuter cette procédure par un CALL pa_patch_existe('referentiel', 'REF_DDL_2020-03-20', @result); j'obtiens en retour une erreur :
Citation Envoyé par MariaBD
#1327 - Undeclared variable: nombre
Pourtant, ma variable nombre est bien déclarée.