bonjour, j'ai une procédure qui me permet de récupérer des données depuis une table "import" pour les intégrer dans ma base de données.
Aujourd'hui on m'a apporté des fichiers complémentaires pour cette base de données.
Une fois remontés dans la table import j'ai voulu lancé la procédure et ça n'a pas marché et ça m'affiche le message d'erreur suivant "#1062 - Duplicate entry '547671-13-0' for key 'PRIMARY'".

Il faudrait donc que je rajoute dans ma procédure que si l'entrée existe déjà on l'écrase.

ma procédure est la suivante
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
DELIMITER |
 
DROP PROCEDURE IF EXISTS import_donnees|
CREATE PROCEDURE import_donnees( nbCapteur INTEGER)
 
BEGIN
 
DECLARE iter INTEGER DEFAULT 0; 
 
iterwhile: WHILE iter <= nbCapteur DO 
 
  SET @myInsert:= CONCAT('
INSERT INTO relever_mesure(valeur, id_calendrier_calendrier, id_station_Stations, id_capteur_capteur)
SELECT i.`',iter,'`,
       c.id_calendrier,
       i.id_station,
       ',iter,' 
FROM import i
INNER JOIN calendrier c ON i.date_heure = c.date_heure_locale
WHERE i.`',iter,'` <>"(null)"');
 
 
  prepare stmnt FROM @myInsert; 
  EXECUTE stmnt; 
  DEALLOCATE PREPARE stmnt;
 
 
   SET iter = iter + 1; 
END WHILE iterwhile;
END |
je essayer avec ON DUPLICATE KEY UPDATE IF EXIST

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 |
 
DROP PROCEDURE IF EXISTS import_donnees|
CREATE PROCEDURE import_donnees( nbCapteur INTEGER)
 
BEGIN
 
DECLARE iter INTEGER DEFAULT 0; 
 
iterwhile: WHILE iter <= nbCapteur DO 
 
  SET @myInsert:= CONCAT('
INSERT INTO relever_mesure(valeur, id_calendrier_calendrier, id_station_Stations, id_capteur_capteur)
SELECT i.`',iter,'`,
       c.id_calendrier,
       i.id_station,
       ',iter,' 
FROM import i
INNER JOIN calendrier c ON i.date_heure = c.date_heure_locale
WHERE i.`',iter,'` <>"(null)"')
ON DUPLICATE KEY UPDATE i.date_heure=c.date_heure_locale
                                AND i.id_capteur=r.id_station_Stations;
 
 
  prepare stmnt FROM @myInsert; 
  EXECUTE stmnt; 
  DEALLOCATE PREPARE stmnt;
 
 
   SET iter = iter + 1; 
END WHILE iterwhile;
END |
mais ça ne marche pas, alors que sur une ligne ça marche nickel si vous pouvez me dire ou je fait l'erreur merci