#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. Мне нравится тот факт, что вы предоставляете исправленный пример кода. В этом отношении это было лучше, чем мой ответ.