DB2 d'IBM iSeries: SI EXISTE syntaxe de l'instruction
Je suis familier avec Sybase qui permet des requêtes avec format: S'il EXISTE () then ... ELSE ... END if (ou très proche). Ce une déclaration puissante qui permet: "si elle existe, puis mise à jour, insérer else".
Je suis en train d'écrire des requêtes pour DB2 sur IBM iSeries boîte. J'ai vu le CAS de mots clés, mais je ne peux pas le faire fonctionner. Je reçois toujours le message d'erreur: "mot Clé de CAS ne devrait pas."
Exemple:
If EXISTS ( SELECT * from MYTABLE where KEY = xxx ) PUIS UPDATE MATABLE SET VALEUR = zzz OÙ KEY = xxx D'AUTRE INSERT INTO MATABLE (CLÉ, VALEUR) VALUES (xxx, zzz) FIN DE SI
Est-il un moyen de le faire à l'encontre de DB2 sur IBM iSeries? Actuellement, je exécuter deux requêtes. Sélectionnez d'abord un, puis mon code Java décide de mettre à jour/insert. Je serais plutôt de l'écrire une seule requête que mon serveur est situé loin (dans le Pacifique).
OriginalL'auteur kevinarpe | 2011-08-03
Vous devez vous connecter pour publier un commentaire.
DB/2 sur l'as/400 n'ont pas de conditionnel
INSERT
/UPDATE
déclaration.Vous pouvez déposer le
SELECT
déclaration par l'exécution d'uneINSERT
directement et si elle ne parvient pas à exécuter laUPDATE
déclaration. Inversez l'ordre des déclarations, si vos données sont plus susceptibles deUPDATE
queINSERT
.Une option plus rapide serait de créer une table temporaire dans
QTEMP
,INSERT
tous les enregistrements dans la table temporaire, puis d'exécuter un blocUPDATE ... WHERE EXISTS
etINSERT ... WHERE NOT EXISTS
à la fin de fusionner tous les enregistrements dans la table finale. L'avantage de cette méthode est que vous pouvez envelopper toutes les instructions dans un lot de minimiser les aller-retour de la communication.OriginalL'auteur jamesallman
+Mise à JOUR+
DB2 for i, à partir de la version 7.1, a maintenant un
MERGE
déclaration qui fait ce que vous cherchez.Voir IBM i 7.1 InfoCenter DB2 instruction MERGE page de référence
OriginalL'auteur WarrenT
Vous pouvez effectuer le contrôle des flux de logique (SI...ALORS...SINON) dans une procédure stockée SQL. Voici un exemple de SQL code source:
Une fois que vous créer la procédure stockée, vous l'appelez comme vous le feriez de toute autre procédure stockée sur cette plate-forme:
OriginalL'auteur dmc
Ce un peu plus complexe morceau de procédure SQL permettra de résoudre votre problème:
IBM Technote
Si vous voulez faire une mise à jour en masse à partir d'une autre table, alors jetez un oeil à l'instruction MERGE qui est incroyablement puissante qui vous permet d'insérer, mettre à jour ou de les supprimer en fonction des valeurs d'une autre table.
IBM DB2 Syntaxe
MERGE
déclaration.Pour garder l'info mis à jour, DB2 for i (as/400) a eu FUSION depuis la mi-2010. Une version actuelle version du système d'exploitation est nécessaire.
OriginalL'auteur James Anderson