我想使用UTC时间戳作为TIMESTAMP列的默认值。我们正在Linux上使用DB2 9.5
我知道使用CURRENT TIMESTAMP,但是它提供了DB2服务器的本地时间(例如CEST)。在查询中,您可以使用
SELECT JOB_ID, (CURRENT TIMESTAMP - CURRENT TIMEZONE) as tsp FROM SYSTEM_JOBS;
但这在列定义中不起作用
ALTER TABLE SYSTEM_JOBS ALTER COLUMN CREATED SET DEFAULT CURRENT TIMESTAMP - CURRENT TIMEZONE
[42601][-104] An unexpected token "ALTER TABLE SYSTEM_JOBS ALTER COLUMN CREAT" was found following "BEGIN-OF-STATEMENT". Expected tokens may include: "<values>".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.23.42
我还试图定义一个函数来进行计算。
CREATE OR REPLACE FUNCTION UTCTIMESTAMP ()
RETURNS TIMESTAMP
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
BEGIN ATOMIC
DECLARE L TIMESTAMP;
DECLARE U TIMESTAMP;
SET L = CURRENT TIMESTAMP;
SET U = L - CURRENT TIMEZONE;
RETURN U;
END
;
但是列定义也不接受
ALTER TABLE SYSTEM_JOBS ALTER COLUMN CREATED SET DEFAULT UTCTIMESTAMP();
[42894][-574] DEFAULT value or IDENTITY attribute value is not valid for column "CREATED" in table "DB2INST1.SYSTEM_JOBS". Reason code: "7".. SQLCODE=-574, SQLSTATE=42894, DRIVER=4.23.42
我正在寻找一种在中性UTC中设置默认值的方法。
答案 0 :(得分:1)
您不能在.then()
子句中使用表达式。请参见CREATE TABLE statement中DEFAULT
的说明。
例如,您可以使用default-clause
触发器来实现相同的功能:
BEFORE INSERT