我有一个node.js程序,它使用oracledb包。
它连接到Oracle数据库,选择数据并将该数据存储到另一个Oracle数据库中。
两个数据库都配置为使用UTC来存储日期/时间值
下面是一个代码片段:
let sql = `SELECT a.* FROM some_view a`;
const result = await db1.execute(sql, {}, {
outFormat: oracledb.OUT_FORMAT_OBJECT
});
const workOrders= result.rows as WorkOrder[];
...
for (const workOrder of workOrders) {
await db2.execute(
`INSERT INTO table(workordernumber, startdate)
VALUES (:workordernumber, :startdate)`, {
workordernumber: workOrder.workordernumber,
startdate: startdate
},
);
问题是日期/时间值在存储到目标系统时被转换为我的本地时区。
我在EST中。因此,来自源的09/07/2022 17:04:08在目标中存储为09/07/2022 22:04:08。
我已经尝试使用moment来阻止目标上的转换,但没有成功,如下所示:
INSERT INTO table(workordernumber, startdate)
VALUES (:workordernumber, :startdate), {
workordernumber: workOrder.workordernumber,
startdate: moment.utc(startdate)
},
这些值仍然转换为我的本地时区。
我想从一个数据库中获取UTC值,并将它们作为UTC值存储在另一个数据库中,而不进行任何转换。
有什么建议吗?
1条答案
按热度按时间5sxhfpxr1#
我必须在两个数据库中创建以下LOGON触发器,它将会话时区设置为UTC。这将阻止node-oracledb驱动程序转换该值。请确保将其创建为Sys,以便它是每个登录用户的触发器。