首页 > 解决方案 > 为什么我在使用 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 开发人员中工作而不是节点代码?

标签: node.jsoracle

解决方案


糟糕,我从 MySQL 移植了这段代码,所以我需要更新我的查询,使其看起来像这样......

const SELECT_QUERY = "SELECT * FROM CALL_DATE WHERE MADE_DATE = TO_DATE(:1,'YYYY-MM-DD')";

注意:1而不是?


推荐阅读