Запрос на обновление DB2 с оператором соединения - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь обновить D_WINTEL_HEALTH таблицу, и ниже приведен запрос, который я использую

UPDATE  D_WINTEL_HEALTH A
SET A.HEALTH = 7
FROM D_WINTEL_HEALTH A JOIN D_REPORTER_STATUS B ON A.HOST = B.HOST 
WHERE B.ALERTKEY = 'kph_netport_xlzc_ilo' AND 
B.SEVERITY = 0 AND 
A.HEALTH <> 0 

Я также попробовал еще один запрос:

UPDATE D_WINTEL_HEALTH A SET A.HEALTH = 7
FROM (Select D_WINTEL_HEALTH A JOIN D_REPORTER_STATUS B 
ON lower(A.HOST) = lower(B.HOST)) s
WHERE s.ALERTKEY = 'kph_netport_xlzc_ilo' AND s.SEVERITY = 0 AND s.HEALTH <> 0 

Но оба они возвращаются ниже ошибки:

[ОБНОВЛЕНИЕ - 0 строк, 0,000 с] [Код ошибки: -104, состояние SQL: 42601] Ошибка SQL DB2: SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = FROM; A SET A.HEALTH = 7; LEFT_BRACKET, DRIVER = 4.15.82

протестировал запрос на выборку, который работает нормально, не уверен, в чем проблема, отличается ли он в IBM DB2.

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Вместо этого используйте оператор MERGE .

MERGE INTO D_WINTEL_HEALTH A
USING D_REPORTER_STATUS B ON A.HOST = B.HOST 
AND B.ALERTKEY = 'kph_netport_xlzc_ilo' 
AND B.SEVERITY = 0 AND A.HEALTH <> 0 
WHEN MATCHED THEN UPDATE SET HEALTH = 7;
0 голосов
/ 04 июня 2019

Попробуйте с запросом ниже.

 merge into AD_WINTEL_HEALTH A
   using (select SEVERITY, ALERTKEY from D_REPORTER_STATUS) b
    ON A.HOST = B.HOST
when matched and B.ALERTKEY = 'kph_netport_xlzc_ilo'  and B.SEVERITY = 0 and A.HEALTH <> 0 
   then update SET A.HEALTH = 7 
...