我试图创建一个时间戳列的表,每个更新的记录自动生成'当前时间戳'。我在使用ODBC驱动程序的DB2/400(版本V5R3)上。DB2/400 - 自动生成的更改时间戳(错误)
这是查询:
CREATE TABLE random_table_name (
ID integer not null generated always as identity,
USERS_ID varchar (30),
DETAILS varchar (1000),
TMSTML_CREATE timestamp default current timestamp ,
TMSTMP_UPDATE timestamp not null generated always for each row on update as row change timestamp,
PRIMARY KEY (ID)
)
我得到这个错误(翻译):
ERROR [42000] [IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0104 - Token EACH not valid. Valid tokens: BIT SBCS MIXED.
没有 'TMSTMP_UPDATE' 行的查询工作。我该如何解决这个问题?
编辑:好吧,我明白,在我的DB2版本,唯一的办法就是使用触发器,但今天AS400似乎是邪恶和我在一起。 我想这一点:
CREATE TRIGGER random_trigger_name
AFTER UPDATE ON random_table_name
REFERENCING NEW AS NEW_ROW
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
SET NEW_ROW.TMSTM_UPDATE = CURRENT TIMESTAMP;
END
错误(翻译):
ERROR [42000] [IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0312 - Variable TMSTM_UPDATE not defined or not available.
列TMSTM_UPDATE存在,这是一个正常的时间戳。
编辑2:我已经通过用'之前'替换'后'来解决触发器问题。现在一切都按预期工作。谢谢你们!
什么版本的DB2?期望的令牌列表表明它认为它出于任何原因处理基于字符的列。 –
@ Clockwork-Muse DB2版本V5R3 – Davide
管理找到[旧手册](http://faithwarren.com/images/glazers/committees/SQL/SQL%20Manuals/V5R3_SQL_Reference.pdf)(不是目前的很多更容易找到...)。您的版本不支持语法(可能直到V5R4,肯定是V6),这使@ Dan的答案正确。为什么你在这样一个旧版本(2个主要版本,超过10年),反正? –