Изменить таблицу типа db_table базы данных - PullRequest
0 голосов
/ 13 июля 2020

Я создал таблицу базы данных с идентификатором, именем, фамилией. Я создал следующую программу:

data: db_table type table of ztabletest. "Create my db data
select * from z6148tabletest into table db_table. "Fill my db data
data: modifiedLine type z6148tabletest. "Create my new line

modifiedLine-firstname = 'hey'.
modifiedLine-lastname = 'test'.

Теперь я хочу изменить строку в моем индексе 2 таблицы db.

Итак, я пытаюсь сделать что-то вроде:

modify ztabletest from table db_table values modifiedLine at index 2.

Я не понимаю logi c для изменения.

Чтобы вставить что-то, я просто делаю:

insert INTO ztabletest VALUES modifiedLine.

Итак, здесь logi c прост, потому что я добавляю в моей таблице значения. Не могли бы вы объяснить мне лог c для изменения строки?

1 Ответ

0 голосов
/ 13 июля 2020

Таблица базы данных не имеет "индекса". Порядок строк таблицы не указан. Когда вы выполняете SELECT без ORDER BY, база данных может предоставить вам строку в любом порядке. Большинство баз данных SQL имеют тенденцию всегда давать вам один и тот же порядок, но это для их удобства , а не для вашего. В частности, SAP HANA имеет тенденцию быть очень капризным в этом отношении.

Но в таблицах базы данных есть первичный ключ. Первичный ключ можно рассматривать как уникальный идентификатор каждой строки таблицы. Итак, когда вы сделаете первичный ключ числом, вы можете довольно хорошо смоделировать индекс. Я предполагаю, что это предназначение поля «ID» в столбце вашей базы данных, и поэтому вы пометили его как «ключ» при определении своей базы данных.

INSERT добавляет новую строку, если не существует строки с такими же ключевыми значениями. Когда он уже есть, он не работает с sy-subr c = 4.

modifiedLine-id = 2.
INSERT ztabletest FROM modifiedLine.

UPDATE изменяет существующую строку таблицы с теми же ключевыми значениями. Если в таблице нет строки с этими значениями первичного ключа, выполняется ошибка sy-subr c = 4.

modifiedLine-id = 2.
UPDATE ztabletest FROM modifiedLine.

или альтернативный более «традиционный SQL» синтаксис с SET и WHERE:

UPDATE ztabletest 
  SET firstname = 'hey'
      lastname = 'test'
  WHERE id = 2

MODIFY - это комбинация INSERT и UPDATE (также известная как «upsert»). Он проверяет, есть ли уже линия. Когда он там, он модифицирует строку. Если это не так, он вставляет его.

modifiedLine-id = 2.
MODIFY ztabletest FROM modifiedLine.

Что в основном является сокращением для:

modifiedLine-id = 2.
UPDATE ztabletest FROM modifiedLine.
IF sy-subrc = 4.
    INSERT ztabletest FROM modifiedLine.
ENDIF.
...