如何在node-oracledb NodeJS中使用TO_TIMESTAMP和TO_DATE

时间:2017-11-10 07:33:47

标签: node.js oracle express timestamp node-oracle

我需要使用我的Nodejs应用程序将数据插入到我的oracle DB中。我正在使用node-oracledb框架来执行此操作。我可以用这个做CURD操作。当我尝试插入时间戳和日期字段(使用to_date)时,它会抛出错误“// Use os package to run the maven build using location where maven(headless) resides func updateDistribution() error { command := exec.Command("apache-maven-3.5.2/bin/mvn", "clean", "install") command.Dir = "." output, err := command.Output() if err != nil { return err } fmt.Printf("%s", output) return nil }

下面是我将用于在Oracle数据库中插入的输入参数。

ORA-00932: inconsistent datatypes: expected TIMESTAMP got NUMBER\n

有没有办法将JavaScript日期转换为Oracle日期和JavaScript日期时间到Oracle数据库。类似于 req.body.CREATE_TS = new Date('02-09-2014 00:30:00').getTime(); req.body.EFF_DTE = new Date('07-12-2014 00:30:00').getTime(); req.body.SENT_TS = new Date('07-20-2014 00:30:00').getTime(); req.body.LAST_UPDT_TS = new Date('10-20-2014 00:30:00').getTime(); req.body.EFF_DTE = new Date().toISOString().slice(0, 19).replace('T', ' ') TO_DATE()

1 个答案:

答案 0 :(得分:1)

为什么你在约会时给getTime打电话?只需将日期保留为日期。

如果您展示了更多代码,那将会有所帮助。

鉴于此表:

create table t (
  c date
)
/

以下是插入日期的示例:

const oracledb = require('oracledb');
const config = require('./dbConfig.js');

// date === 2017-01-01T00:00:00.000Z (UTC)
let date = new Date(Date.UTC(2017, 00, 01, 00, 00, 00));

async function insertDate() {
  const conn = await oracledb.getConnection(config);

  await conn.execute(
    'insert into t (c) values (:d)',
    {
      d: date
    },
    {
      autoCommit: true
    }
  );
}

insertDate();

最重要的是你得到正确的时区。如果您使用的是DATE或TIMESTAMP列,那么您应该格外小心。

请务必查看此文档: https://github.com/oracle/node-oracledb/blob/master/doc/api.md#-9163-fetching-date-and-timestamps

最简单的解决方案是在运行Node.js之前设置ORA_SDTZ环境变量。

另外,查看这些幻灯片(9-17与日期相关): https://www.dropbox.com/s/69jt5uu1fqus84c/Tips%20and%20Tricks%20for%20Getting%20Started%20with%20the%20Oracle%20Database%20Driver%20for%20Node.pdf?dl=0