使用 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/