node.js - 收到错误 : ORA-01843: not a valid month] error and don't know why

标签 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");

以及它调用的run函数

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 Developer 可以正确解释 '2019-10-01' 并将从字符串到日期的隐式数据转换应用为 to_date('2019-10-01' ,'yyyy-mm-dd')。但 Javascript 认为日期的格式为(例如)'mm-dd-yyyy' 并抛出错误,因为 2019 年不是有效月份。

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

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

关于node.js - 收到错误 : ORA-01843: not a valid month] error and don't know why,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58878390/

相关文章:

javascript - 更改新的日期格式

node.js - Node createStack 的 CloudFormation aws-sdk 错误 UnexpectedParameter : Unexpected key 'ClientRequestToken'

javascript - 尝试使用 mongoose/mongodb-native 执行 mongodb 查询时出现 RangeError

javascript - node.js中的ES6变量导入名称?

sql - Oracle NVL 问题

sql - 自然加入场景

java - 每次数据库退回时应用程序服务器是否都需要退回?

javascript - Node.js 和 Zaproxy UnhandledPromiseRejectionWarning : RequestError: Error: socket hang up

android - SQLite 选择按月分组的总和

sql - 根据时间合并两个表