首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js +Oracledb4.2+ executeMany + Error: NJS-011:遇到绑定值和类型错配

Node.js +Oracledb4.2+ executeMany + Error: NJS-011:遇到绑定值和类型错配
EN

Stack Overflow用户
提问于 2020-04-03 10:07:17
回答 2查看 1.6K关注 0票数 0

我正在使用Node.js 12.16.1和NPMoraclev4.2、Oracle11g、Windows10机器,并试图使用executeMany命令插入大量数据,如下所示。

创建表

代码语言:javascript
复制
CREATE TABLE DOWNTIME_HOURLY
(
  SHIFTDAY NUMBER NOT NULL,
  MACHINENAME VARCHAR2(20) NOT NULL,
  PLANID VARCHAR2(20) NOT NULL,
  PARTNAME VARCHAR2(20) NOT NULL,
  CATEGORY VARCHAR2(20) NOT NULL,
  SHIFTDATE DATE NOT NULL
);

NODE.js代码

代码语言:javascript
复制
const oracledb = require('oracledb');
const credentials = { user: 'asdasdasd', password: 'asdasdasd!23', connectionString: 'hostname/ORCL' };

const options = {
    autoCommit: true,
    bindDefs: {
        "SHIFTDAY": { type: oracledb.NUMBER },
        "MACHINENAME": { type: oracledb.STRING, maxSize: 20 },
        "PLANID": { type: oracledb.STRING, maxSize: 20 },
        "PARTNAME": { type: oracledb.STRING, maxSize: 20 },
        "CATEGORY": { type: oracledb.STRING, maxSize: 20 },
        "SHIFTDATE": { type: oracledb.DATE }
    }
  };

const bindings = [
    {
        "SHIFTDAY": 12,
        "MACHINENAME": "test",
        "PLANID": "test",
        "PARTNAME": "test",
        "CATEGORY": "test",
        "SHIFTDATE": "03-APR-20"
    }];

const sql = `INSERT INTO DOWNTIME_HOURLY 
            (SHIFTDAY,MACHINENAME,PLANID,PARTNAME,CATEGORY,SHIFTDATE) 
             VALUES 
            (:SHIFTDAY, :MACHINENAME, :PLANID, :PARTNAME, :CATEGORY, :SHIFTDATE)`

const insert = async (credentials) => {
    const conn = await oracledb.getConnection(credentials).catch(err => console.log('ERRRRR....', err));
    console.log('Connection successful');
    oracledb.fetchAsString = [oracledb.DATE];
    let result = await conn.execute(`SELECT current_date, current_timestamp FROM DUAL`);
    console.log(result);
    result = await conn.executeMany(sql, bindings, options).catch(err => console.log('Execution ERRRRR....', err));
    console.log('Query executed: ' , result);
}

insert(credentials);

输出:

代码语言:javascript
复制
PS D:\project> node try
Connection successful

{
  metaData: [ { name: 'CURRENT_DATE' }, { name: 'CURRENT_TIMESTAMP' } ],
  rows: [ [ '03-APR-20', '03-APR-20 10.43.09.643015 AM UTC' ] ]
}

Execution ERR.... Error: NJS-011: encountered bind value and type mismatch
    at Connection.executeMany (D:\project\node_modules\oracledb\lib\connection.js:203:21)
    at D:\project\node_modules\oracledb\lib\util.js:202:16
    at new Promise (<anonymous>)
    at Connection.executeMany (D:\project\node_modules\oracledb\lib\util.js:190:14)
    at insert (D:\project\try.js:36:25)

Query executed:  undefined

问题:

有人能引导我解决上述错误吗?我怀疑这是给SHIFTDATE的。提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-03 13:03:22

根据文档,https://oracle.github.io/node-oracledb/doc/api.html#oracledbconstantsnodbtype

问题是日期格式。然后,我必须使用Javascript日期(即new Date()),这已经在node-oracledb 4.2中得到了支持。

我传递的值如下所示,它起了作用。

代码语言:javascript
复制
const bindings = [
    {
        "SHIFTDAY": 12,
        "MACHINENAME": "test",
        "PLANID": "test",
        "PARTNAME": "test",
        "CATEGORY": "test",
        "SHIFTDATE": new Date()
    }];
票数 -1
EN

Stack Overflow用户

发布于 2020-04-03 10:28:00

最可能的问题是日期格式,它需要匹配会话日期格式NLS_DATE_FORMAT。

文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61009450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档