2013-02-03 4 views
0

Я выполняю обновление файла, содержащего более 20 миллиардов записей через sql для as400.Оператор обновления SQL для различных значений

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' 

Как запустить это обновление для разных значений arbatch # в одном запросе, чтобы сэкономить время?

например: Я хотел бы использовать один и тот же оператор обновления для ARBATCH # значений PAR19811284, PAR18736765 и т.д.

REEDITS:

У меня есть следующие данные: (Переместить эти значения в месте EFG)

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

Здесь я хотел бы достичь запрос, который будет выполнять обновление записей следующим образом:

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' 

Теперь, как я мог успешно использовать «в» для такого обновления

+0

Извините, похоже, что мое решение не будет работать для вас, пожалуйста, отредактируйте свой вопрос, объяснив это четко. Также взгляните на инструкцию '' MERGE' '(http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/ doc/r0010873.htm), это может быть полезно. –

+1

@MahmoudGamal Цените помощь. Спасибо. –

ответ

0

Вы можете «обмануть» довольно тривиально:

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')) 

(Заявление работать на мой локальный экземпляр iSeries DB2)

Случайно, DATESENT и TIMESENT следует объединить в один т imestamp, и, вероятно, также может быть недействительным. Я лично предпочел бы что-то вроде sentAt за имя, а не что-то, включая тип столбца.

0

Вы можете использовать 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

Спасибо за быстрый ответ. Что делать, если значение поля LOCATION изменяется в предложении SET и предложение WHERE для разных значений ARBATCH #? –

+0

, то вы можете использовать 'location in (.., .. и т. Д.)' Это то, что вы просите? :) – bonCodigo

+0

, пожалуйста, проверьте reedits –

Смежные вопросы