node.js - 为什么我在使用 TO_DATE 但在 Oracle SQL 开发人员上工作时收到“ORA-01036:非法变量名/编号”?(使用节点)
问题描述
我有以下架构...
CREATE TABLE CALL_DATE(
ID VARCHAR(30) NOT NULL,
SERVER VARCHAR(30) NOT NULL,
MADE_DATE DATE NOT NULL,
CONSTRAINT CALL_SERVER_CONSTRAINT UNIQUE (ID, SERVER)
);
我使用节点 oracle 驱动程序有以下代码......
const SELECT_QUERY = "SELECT * FROM CALL_DATE WHERE MADE_DATE = TO_DATE(?,'YYYY-MM-DD')";
const SQL_FMT = "YYYY-MM-DD";
query(cmd, params){
params = params || [];
CallDate.validatePool(this.pool);
return this.connection.then((connection)=>{
console.log("Connection Created "+JSON.stringify(params));
return connection.execute(
cmd,
params
);
});
}
getCallsOnDate(date){
date = moment(new Date(date));
console.log(`The date is ${date.format(SQL_FMT)}`);
return this.query(
SELECT_QUERY,
[date.format(SQL_FMT)]
).catch((err)=>{
Logger.log("error", `Error getting call dates on ${date} ${err}`);
throw new Error(err);
});
}
...
// works
obj.query(`SELECT * FROM CALL_DATE`).then((result)=>{
console.log(`Query completed ${JSON.stringify(result)}`);
});
// Fails
obj.getCallsOnDate("12/21/2012").then((result)=>{
console.log(`getCallsOnDate completed ${JSON.stringify(result)}`);
})
一切都适用于查询功能,但是当我尝试日期功能时,我得到......
ORA-01036: 非法变量名称/编号
如果我在 Oracle SQL Developer 中运行以下一切正常...
SELECT * FROM CALL_DATE WHERE MADE_DATE = TO_DATE('2020-01-01','YYYY-MM-DD');
我错过了什么,为什么它在 SQL 开发人员中工作而不是节点代码?
解决方案
糟糕,我从 MySQL 移植了这段代码,所以我需要更新我的查询,使其看起来像这样......
const SELECT_QUERY = "SELECT * FROM CALL_DATE WHERE MADE_DATE = TO_DATE(:1,'YYYY-MM-DD')";
注意:1
而不是?
推荐阅读
- javascript - 在哪里找到返回 ASHX 返回 RedirectFromLoginPage 的 URL
- symfony - 在功能测试中返回 Symfony Mailer 电子邮件的正文?
- javascript - 在 VS Code 中,如何显式声明 Javascript 的变量类型?
- python - 图标 (.ico) 未在 Python 中显示
- sql - R SQL查询:找不到存储过程
- python - 如何将时间转换为字符串并在 Python df 中保持 NaT 不变?
- macos - 系统扩展验证失败
- javascript - javascript 返回 false 或 preventDefault 不起作用
- swiftui - SwiftUI 和自定义框架
- javascript - 如何使用数据表和服务器端数据源修复分页错误?