Bonjour à tous,
Ça fait très longtemps que je n'ai pas fait de PL-SQL et c'est la 1ère fois sous MySQL, j'avoue être plus que rouillé ...
Bref,
J'ai voulu créer une procédure me permettant de voir la fiabilité des données que l'on doit importer notamment en obtenant le pourcentage de champ vide.
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| DELIMITER |
CREATE PROCEDURE `proc_champ_NULL` (IN `vi_nomtable` VARCHAR(30) charset utf8)
BEGIN
DECLARE `v_finished` INT DEFAULT 0;
DECLARE `c_nomcol` VARCHAR(40);
DECLARE `v_nbligne` INT DEFAULT 0;
DECLARE `v_result` INT DEFAULT 0;
DECLARE `v_dt_chargement` DATE;
DECLARE done INT DEFAULT 0;
DECLARE `cur_nom_table` CURSOR FOR
SELECT `column_name` FROM information_schema.columns WHERE table_name = `vi_nomtable`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
SELECT '1';
SELECT CURRENT_TIMESTAMP INTO `v_dt_chargement`;
SELECT '2';
CREATE TABLE IF NOT EXISTS `stat_champ_NULL`
(
`nom_table` VARCHAR(30) NULL,
`nom_col` VARCHAR(40) NULL,
`taux_NULL` VARCHAR(4) NULL,
`nb_ligne_total` VARCHAR(4) NULL,
`dt_chargement` DATE NULL
)
ENGINE = InnoDB;
SELECT '3';
OPEN `cur_nom_table`;
SELECT '4';
SELECT COUNT(*) INTO `v_nbligne` FROM `vi_nomtable`;
SELECT '5';
REPEAT
FETCH `cur_nom_table` INTO `c_nomcol`;
SELECT '6';
SELECT SUM(CASE WHEN `c_nomcol`='' THEN 1 ELSE 0 END)*100/`v_nbligne`
INTO `v_result`
FROM `vi_nomtable`;
SELECT '7';
INSERT INTO `stat_champ_NULL`
VALUES (
`vi_nomtable`,
`c_nomcol`,
`v_result`,
`v_nbligne`,
`v_dt_chargement`
)
;
SELECT '8';
UNTIL done END REPEAT;
CLOSE `cur_nom_table`;
SELECT '9';
END|
DELIMITER ; |
Et quand je l'execute,
CALL proc_champ_null('import_ldapuser');
voici ce que j'ai en retour :
Error Code: 1146 Table 'dbappstore.vi_nomtable' doesn't exist
J'ai mis des "select +num" un peu partout pour savoir ou ça plante.
(J'ai pas trouvé d'autre méthode pour m'aider au débugage)
C'est ligne 36 :
SELECT COUNT(*) INTO `v_nbligne` FROM `vi_nomtable`;
Visiblement il prend pour valeur le nom de la variable "vi_nomtable" et non sa valeur.
J'ai essayé quantité de solution sans succès ...
Donc c'est ici, l’âme en peine que j’espère trouver un peu de réconfort.
Merci pour toute l'aide que vous pourrez m'apporter.
(ou bien même un peu de réconfort )
Partager