Getting the Error: ORA-01843: not a valid month] error and don't know why

Getting the Error: ORA-01843: not a valid month] error and don't know why

使用 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);
            }
        }
    }
}

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

知道发生了什么事吗?

/伊万

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

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

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