Проблема с обновлением записи базы данных в ABAP: не работает предложение where - PullRequest
1 голос
/ 31 мая 2011

У меня есть экран в ABAP, который позволяет обновить строку базы данных. Это вроде работает: я могу обновить 'строку', но проблема в том, что она обновляет КАЖДУЮ строку в таблице, а не ту, которая указана в предложении 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, чтобы удалить строку, которая работает.

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

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

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

Извлеките двоеточие иудалите запятую между спецификаторами SET и повторите попытку.

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

1 голос
/ 31 мая 2011

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.
...