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
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 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 |
mais ça ne marche pas, alors que sur une ligne ça marche nickel si vous pouvez me dire ou je fait l'erreur merci
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 |
Partager