2017-08-21 8 views
0

J'utilise le système de base de données IBM DB2. J'ai une table avec 3 colonnes (1 clé primaire et autres) que je remplis après avoir lu un fichier CSV. Il arrive que parfois je reçois des données répétées de mon fichier alors dans ce cas je dois l'ignorer.Db2: Comment insérer de nouvelles données et les mettre à jour?

Mon problème est que là, je ne peux pas trouver l'instruction SQL Db2 correcte qui fera insérer ou de mise à jour. Avec ma solution actuelle, je reçois une exception dans mon code:

DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;DB2INST1.TI_APGROUP_0, DRIVER=4.12.55

Y at-il un moyen simple de INSERT ou UPDATE?

Répondre

0

J'ai trouvé une solution qui fait ce que je veux mais je ne sais pas si c'est la meilleure façon ou pas! Quoi qu'il en soit, je poste pour aider qui est face au même problème, mais si quelqu'un est a une autre suggestion, il est le bienvenu:

MERGE INTO KDDBD01.KDTCTCT AS CT USING (SELECT COUNT(ADR_MAIL_UTIL) FROM KDDBD01.KDTCTCT) ON (CT.ADR_MAIL_UTIL = :contactEmail) WHEN NOT MATCHED THEN INSERT (CT.ADR_MAIL_UTIL) VALUES (:contactEmail) 
1

La commande IMPORT dans Db2 a une option INSERT_UPDATE. Vous pouvez lire ici à propos du IMPORT command.

Si vos données sont déjà dans la base de données, pensez à utiliser l'instruction MERGE.

Les deux, dans leur contexte, d'insérer de nouvelles et de mettre à jour les données existantes en fonction de certaines règles.

+0

Je suis en train avec cette requête: MERGE EN KDDBD01.KDTCTCT AS CT UTILISATION (SELECT ADR_MAIL_UTIL DE KDDBD01. KDTCTCT) AS CT1 (ADR_MAIL_UTIL) ON (CT.ADR_MAIL_UTIL = CT1.ADR_MAIL_UTIL) QUAND ALORS pas couvertes INSERT (CT.ADR_MAIL_UTIL) VALUES ('GENERIQUE courrier Boite') ' mais j'obtiens' Avertissement: DB2 Avertissement SQL : SQLCODE = 100, SQLSTATE = 02000, SQLERRMC = null, DRIVER = 4.12.56 SQLState: 02000 ErrorCode: 100' –

+0

warning (SQLCODE = 100) signifie simplement qu'aucune ligne n'a été trouvée. Ce n'est pas une erreur. – mao

+0

Oui, je suppose que c'est parce que 'SELECT ADR_MAIL_UTIL FROM KDDBD01.KDTCTCT' ne retourne aucune ligne quand je l'exécute pour la première fois et c'est tout à fait logique! Parce que dans mon cas je veux insérer des données seulement quand elles ne sont pas existantes. Je suis confus je ne peux pas trouver une solution pour cette requête –