2013-02-03 4 views
0

Je suis en train d'effectuer une mise à jour sur un fichier contenant plus de 20 milliards d'enregistrements via sql pour as400. Comment puis-je exécuter cette mise à jour pour différentes valeurs de # arbatch dans une seule requête pour gagner du temps?Instruction de mise à jour SQL pour différentes valeurs

UPDATE "LIBRARY"/AR#RMTPRL9 
    SET SENTFLAG = ' ', DATESENT = '0001-01-01', TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'PACI175A', ARBATCH# = ' ‘ 
    WHERE LOCATION = 'PACI173A' AND ARBATCH# = 'PAR1981181' 

par exemple: Je voudrais utiliser la même déclaration de mise à jour des valeurs ARBATCH de # PAR19811284, PAR18736765 etc.

réédite:

je les données suivantes: (Déplacer ces valeurs à l'emplacement EFG)

LOCATION  ARBATCH# 
    ABC   1234 
    ABC   5468 
    ABC   8765 
    XYZ   6759 
    XYZ   5432 

ici, je voudrais obtenir une requête exerceraient mise à jour des dossiers comme suit:

UPDATE "LIBRARY"/AR#RMTPRL9 
    SET SENTFLAG = ' ', DATESENT = '0001-01-01', TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'EFG', ARBATCH# = ' ‘ 
    WHERE LOCATION = 'ABC' AND ARBATCH# = '1234' 

Maintenant, comment pourrais-je utiliser avec succès "dans" pour une telle mise à jour

+0

Désolé, il semble que ma solution ne fonctionne pas pour vous, s'il vous plaît modifier votre question en expliquant clairement. Regardez également la déclaration ['MERGE'] (http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/ doc/r0010873.htm), cela pourrait être utile. –

+1

@MahmoudGamal Appréciez l'aide.Merci. –

Répondre

0

Vous pouvez 'tricher' assez trivialement:

UPDATE "LIBRARY"/AR#RMTPRL9 
SET SENTFLAG = ' ', 
    DATESENT = '0001-01-01', TIMESENT = '00:00:00', 
    XMITT# = 0, 
    LOCATION = 'EFG', 
    ARBATCH# = ' ' 
WHERE (LOCATION, ARBATCH#) IN (VALUES ('ABC', '1234'), 
             ('ABC', '5468'), 
             ('ABC', '8765'), 
             ('XYZ', '6759'), 
             ('XYZ', '5432')) 

(Déclaration exécuté sur mon instance iSeries DB2 locale)

Incidemment, DATESENT et TIMESENT doivent être combinés en un seul imestamp, et probablement être nul, aussi. Personnellement, je préfère quelque chose comme sentAt pour le nom, pas quelque chose, y compris le type de la colonne.

0

Vous pouvez utiliser in:

UPDATE "LIBRARY"/AR#RMTPRL9 
    SET SENTFLAG = ' ', DATESENT = '0001-01-01', 
    TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'PACI175A', ARBATCH# = ' ' 
    WHERE LOCATION = 'PACI173A' AND ARBATCH# IN('PAR1981181', PAR18736765 etc ...) 
+0

Merci pour la réponse rapide. Que faire si la valeur du champ LOCATION change dans la clause SET et la clause WHERE pour différentes valeurs de ARBATCH #? –

+0

alors vous pouvez utiliser 'location in (.., .. etc)' est ce que vous demandez? :) – bonCodigo

+0

s'il vous plaît vérifier reedits –

Questions connexes