Requête dynamique dans une procédure avec utilisation d'une variable
Bonjour,
Je souhaite faire une procédure qui me dira si un patch a été enregistré dans un bdd :
Code:
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. :weird: