Db2 изменить столбец для отметки времени обновления строки

В моей таблице есть столбец MODIFIED с типом TIMESTAMP. Я хочу обновить этот столбец автоматически при обновлении строки

Я могу использовать это для нового столбца

alter table my_table add column last_updated timestamp not null
 generated by default for each row on update as row change timestamp 

Но я не могу использовать это, чтобы редактировать существующий столбец для автоматического обновления

alter table my_table alter column modified set data type timestamp 
 not null generated by default for each row on update as row change timestamp

Я правильно использую alter?

сообщение об ошибке

Error: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=alter table my_table alter column modified;BEGIN-OF-STATEMENT;<values>, DRIVER=3.50.152
SQLState:  42601
ErrorCode: -104

3 ответа

Решение

Нашел статью здесь http://ibmsystemsmag.blogs.com/db2utor/2008/01/automate-row-ch.html

по сути это говорит

  • Вы не можете использовать инструкцию ALTER TABLE, чтобы преобразовать столбец в существующей таблице для использования предложения as-row-change-timestamp. Вы должны либо удалить таблицу и воссоздать ее с помощью столбца, определенного с помощью as-row-change-timestamp-clause, либо ALTER таблицы и добавить новый столбец с помощью as-row-change-timestamp-clause.

Вы сможете добавить новый столбец с отметкой времени, используя запрос ниже.

ALTER TABLE TABLE_NAME
  add column UPDATED_DATE_TIME TIMESTAMP GENERATED ALWAYS FOR EACH ROW
  ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL;

Когда столбец существует, вы используете немного другой синтаксис для изменения типа данных и атрибутов:

alter table my_table alter column my_column set generated by default ...
Другие вопросы по тегам