Обновление двух разных таблиц с помощью одной инструкции UPDATE

Я пытаюсь обновить две таблицы с помощью одного оператора, как это

db2 update catentry, catentdesc 
set catentry.buyable=0,
    catentdesc.published=0 
where catentry.catentry_id=catentdesc.catentry_id 
  and catentry.partnumber='some value'

но получение ошибки

Как я могу это сделать?

2 ответа

  1. Установите DB2 CLP на автоматическое отключение и используйте ;Терминатор команд:

    db2 +c -t 
    update catentry   set buyable=0   where partnumber='some value';
    update catentdesc set published=0 where catentry_id IN 
    (SELECT catentry_id FROM catentry where partnumber='some value');
    commit;
    
  2. Не уверен, почему вы хотите сделать это в одной инструкции, но последние версии DB2 для LUW (и, с некоторыми ограничениями, DB2 для z/OS) поддерживают то, что называется ссылками на таблицы изменений данных, которые позволяют такие трюки, как

    WITH t1 (catentry_id) AS (
       SELECT catentry_id FROM FINAL TABLE (
          UPDATE catentry SET buyable = 0 WHERE partnumber = 'some value'
       )
    ), t2 (catentry_id) AS (
       SELECT catentry_id FROM FINAL TABLE (
          UPDATE catentdesc SET published = 0 WHERE catentry_id = (
             SELECT catentry_id FROM t1
          )
       )
    ) SELECT 1 FROM sysibm.sysdummy1
    

    Обратите внимание, что фактический оператор должен быть A SELECTот чего-то, и UPDATEоператоры также завернуты в их собственный SELECTs, но это выполняется как один оператор.