Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在DB2中将UTC时间戳设置为列的默认值_Db2_Db2 Luw - Fatal编程技术网

在DB2中将UTC时间戳设置为列的默认值

在DB2中将UTC时间戳设置为列的默认值,db2,db2-luw,Db2,Db2 Luw,我想使用UTC时间戳作为时间戳列的默认值。我们在Linux上使用DB29.5 我知道使用当前时间戳,但它提供DB2服务器的本地时间(例如CEST)。在查询中,您可以使用 SELECT JOB_ID, (CURRENT TIMESTAMP - CURRENT TIMEZONE) as tsp FROM SYSTEM_JOBS; 但这在列定义中不起作用 ALTER TABLE SYSTEM_JOBS ALTER COLUMN CREATED SET DEFAULT CURRENT TIMESTAM

我想使用UTC时间戳作为时间戳列的默认值。我们在Linux上使用DB29.5

我知道使用当前时间戳,但它提供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
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
但它在列定义中也不被接受

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
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设置默认值。

您不能在
default
子句中使用表达式。请参见。
例如,您可以在插入前使用
触发器来实现相同的功能:

CREATE TABLE SYSTEM_JOBS (ID INT NOT NULL, CREATED TIMESTAMP NOT NULL) IN USERSPACE1;

CREATE TRIGGER SYSTEM_JOBS_BIR
BEFORE INSERT ON SYSTEM_JOBS
REFERENCING NEW AS N
FOR EACH ROW
WHEN (N.CREATED IS NULL)
SET CREATED=CURRENT TIMESTAMP - CURRENT TIMEZONE;

INSERT INTO SYSTEM_JOBS(ID) VALUES 1;

您尝试过后插入触发器吗?谢谢您的提示,但是我需要一些可以在表的CREATE语句中使用的东西。我必须管理大约200多个表谢谢你的提示,但是我需要一些可以在表的CREATE语句中使用的东西。我必须管理大约200多个表不可能。对于任意数量的表,自动生成这样的
CREATE TRIGGER
语句有什么问题?问题是我必须为每个表设置它。当然,这是可能的,毫无疑问。
当前时间戳
默认值工作得很好,而且很容易设置,直到我们不得不使用一个DB2服务器,该服务器的语言环境设置为europe/berlin(CEST)。以防万一。您可以通过
TZ
环境变量为实例所有者设置所需的时区,然后重新启动实例(如果是Linux或Unix)。但它是一个全局设置,因此
当前时间戳
值会相应更改。