将UTC时间戳记设置为DB2中列的缺省值

时间:2019-05-07 11:20:10

标签: db2 db2-luw

我想使用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中设置默认值的方法。

1 个答案:

答案 0 :(得分:1)

您不能在.then()子句中使用表达式。请参见CREATE TABLE statementDEFAULT的说明。
例如,您可以使用default-clause触发器来实现相同的功能:

BEFORE INSERT