收到错误:ORA-01843:“无效月份”错误,不知道为什么

时间:2019-11-15 13:48:40

标签: node.js oracle date node-oracledb

使用SQLdeveloper,我可以毫无问题地运行此查询:

update offer set startdate = '2019-10-01' where OFFER_ID =17160668

但是当我尝试使用js脚本执行操作时,会收到“ [错误:ORA-01843:无效的月份]”。

这是我运行的命令:

await run("update offer set startdate = '2019-10-01' where OFFER_ID = 17160668");

及其调用的运行功能

async function run(query) {
    let connection;
    const connectionString =*********;
    try {
        connection = await oracledb.getConnection({
            user: *********,
            password: *********,
            connectString: connectionString
        });
        console.log(query);
        let result = await connection.execute(query);
        return result;
    } catch (err) {
        console.error(err);
    } finally {
        if (connection) {
            try {
                await connection.close();
            } catch (err) {
                console.error(err);
            }
        }
    }
}

值得一提的是,我可以进行其他不涉及日期的更新。以及基本上任何其他查询。 但是以某种方式,日期的格式给了我这个错误。

有什么想法吗?

/伊万

1 个答案:

答案 0 :(得分:3)

JS客户端的日期格式掩码与您在SQL Developer中使用的日期格式掩码不同。因此,SQL Developer可以正确解释'2019-10-01'并将从字符串到日期的隐式数据转换应用为to_date('2019-10-01','yyyy-mm-dd')。但是Javascript认为日期的格式为'mm-dd-yyyy'(例如),因此很麻烦,因为2019年不是有效月份。

解决方案很简单:不要依赖隐式数据类型转换。这只是不好的做法。始终使用日期文字-date '2019-10-01'-传递日期,您将再也不会遇到这个问题。

或者您可以使用Oracle to_date()函数并传递日期格式掩码,但是坦率地说,日期文字更简单明了。