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()
函数并传递日期格式掩码,但坦率地说,日期文字更简单明了。
使用 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()
函数并传递日期格式掩码,但坦率地说,日期文字更简单明了。