2012-06-12 3 views
0

У меня есть список 3k ID в текстовом файле. Я должен найти строки с такими идентификаторами и обновить их. я ожидал бы что-то работать, какОбновление DB2 z/OS по списку

WITH RECORD_ID 
(ID) AS (
'12345', 
... 
'32134') 
UPDATE MY_TABLE T 
SET T.NAME = REPLACE(T.NAME, X'03', '') 
WHERE EXISTS (SELECT 1 FROM RECORD_ID R WHERE R.ID = T.ID); 

Но это не работает. Есть идеи?

+0

«Не работает» как? Я не знаком с версией z-os, но CTE не работает в моей i-os DB2. Если вы строите CTE, почему бы просто не поместить список идентификаторов в предложение 'IN (...)'? –

+0

Я думал, что IN будет очень медленным, если у вас есть список с 3000 записей. И искали более быстрое обновление. – Ruslan

ответ

0

Вы не можете просто получить список значений в КТР в DB2, вы должны UNION ALL значения вместе:

WITH RECORD_ID (ID) AS (
    SELECT '12345' FROM SYSIBM.SYSDUMMY1 UNION ALL 
    -- ... 
    SELECT '32134' FROM SYSIBM.SYSDUMMY1 
) 
UPDATE MY_TABLE T 
SET T.NAME = REPLACE(T.NAME, X'03', '') 
WHERE EXISTS (SELECT 1 FROM RECORD_ID R WHERE R.ID = T.ID); 

Должно работать.

Я согласен с @ X-Zero, хотя ... кажется, что список значений в предложении IN был бы более уместным, если только не существует конкретной причины, по которой вы хотите использовать CTE.

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

  • Нет связанных вопросов^_^