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