Проблема с предложением where при обновлении записи базы данных

#abap #opensql

#abap #opensql

Вопрос:

У меня есть экран в ABAP, который позволяет обновлять строку базы данных. Это вроде как работает: я могу обновить ‘row’, но проблема в том, что при этом обновляется КАЖДАЯ строка в таблице, а не та, которая указана в предложении where.

Это код, который я использую:

 UPDATE zmotoren_jat SET:
prijs = zmotoren_jat-prijs,
naam = zmotoren_jat-naam
WHERE motorid = zmotoren_jat-motorid. "this line doesn't seem to work!
  

Есть идеи, почему это не сработает? Я уверен, что ‘motorid’ существует: Я не получаю сообщение об ошибке, и я использую ту же строку, motorid = zmotoren_jat-motorid чтобы удалить строку, которая действительно работает.

Ответ №1:

Похоже, ваша проблема связана с двоеточием (:) в первой строке и запятой (,) во второй строке.

Двоеточие вводит связанные операторы, и это может означать, что первый оператор с prijs рассматривается как отдельный оператор, тем самым обновляя все записи в первом операторе (поскольку предложение WHERE тогда применяется только ко второму оператору).

Уберите двоеточие и запятую между заданными спецификаторами и повторите попытку.

Смотрите ответ Esti для объяснения с некоторым примером кода.

Ответ №2:

У Mydog есть правильный ответ.

В основном ваш синтаксис переводится следующим образом:

 UPDATE zmotoren_jat SET prijs = zmotoren_jat-prijs.
UPDATE zmotoren_jat SETnaam = zmotoren_jat-naam
 WHERE motorid = zmotoren_jat-motorid.
  

т.е. он обновляет цену для каждой записи в таблице, а затем обновляет имя для указанного идентификатора.
то, что вы хотите, это

 UPDATE zmotoren_jat 
  SET prijs = zmotoren_jat-prijs
      naam  = zmotoren_jat-naam
WHERE motorid = zmotoren_jat-motorid.
  

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

1. Мне нравится тот факт, что вы предоставляете исправленный пример кода. В этом отношении это было лучше, чем мой ответ.