Невозможно выполнить привязку в модуле Node.js node-oracledb - PullRequest
0 голосов
/ 02 июля 2019

У меня есть следующий код, но он просто не работает. Я не понимаю, что не так.

await connection.execute(
`UPDATE mytable SET WEIGHT = :WEIGHT
 WHERE ITEM_ID = :ITEM_ID AND NAME = :NAME`
 ), Bindings[0],{autoCommit: true, outFormat : oracledb.OBJECT};

Где Bindings [0]:

{
   ITEM_ID: 'dfghjkl',
   WEIGHT: '10',
   NAME: 'test'
}

Это приводит к следующей ошибке: Ошибка: ORA-01008: не все переменные связаны

Пожалуйста, помогите

1 Ответ

1 голос
/ 03 июля 2019

Это работает для меня:

'use strict';

process.env.ORA_SDTZ = 'UTC';

const oracledb = require('oracledb');
let config = require('./dbconfig.js');

async function run() {
  let connection;

  try {
    connection = await oracledb.getConnection(config);

    let result;

    try {
      result = await connection.execute(`drop table mytable`);
    } catch (e) {
      if (e.errorNum != 942) console.error(e);
    }

    await connection.execute(`create table mytable (weight number, item_id varchar2(20), name varchar2(30))`);

    await connection.execute(`insert into mytable (weight, item_id, name) values (0, 'dfghjkl', 'test')`);    

    let Bindings = [];
    Bindings[0] = {
      ITEM_ID: 'dfghjkl',
      WEIGHT: '10',
      NAME: 'test'
    };

    result = await connection.execute(
      `UPDATE mytable SET WEIGHT = :WEIGHT WHERE ITEM_ID = :ITEM_ID AND NAME = :NAME`,
      Bindings[0], {autoCommit: true, outFormat : oracledb.OBJECT});

    result = await connection.execute(`select * from mytable`);
    console.log(result.rows);
  } catch (err) {
    console.error(err);
  } finally {
    if (connection) {
      try {
    await connection.close();
      } catch (err) {
    console.error(err);
      }
    }
  }
}

run();
...