среда, 29 октября 2014 г.

Хитрость при Update таблицы

Казалось бы, что может быть проще update таблицы, если это TVARVС:
      update tvarvc
          set low l_dfrom
       where name l_var_name.
А если нам нужно сразу пару полей обновить? Тоже, должно быть просто...:
      update tvarvc
        setlow l_dfrom,
             high l_dto
       where name l_var_name.
"Ага", сказали мы, перетерев tvarvc-low для каждой переменной - "что-то тут не так...".

На самом деле, хитрость в двоеточии - указав двоеточие, мы заставляем компилятор выполняться update несколько раз с обновлением одного лишь поля, но условие where для первого поля нет.

      update tvarvc
        set: low = l_dfrom
       where name = l_var_name,
              high = l_dto
       where name = l_var_name.
______________

Как оказалось, если не укажем двоеточие - условие WHERE можно не дублировать:
           UPDATE (l_table)
            SET KUNWE = <ls_order>-KUNWE
                WW002 = <ls_order>-WW002
                WW003 = <ls_order>-WW003
                WW008 = <ls_order>-WW008
                WWENP = <ls_order>-WWENP
            WHERE AKTBO   = <ls_result>-AKTBO   AND
                  PAOBJNR = <ls_result>-PAOBJNR AND
                  PASUBNR = <ls_result>-PASUBNR.    

Комментариев нет:

Отправить комментарий