ExecuteMany вставляет неправильное значение - PullRequest
1 голос
/ 04 ноября 2019

Я использую oracledb (4.0.1) с узлом (v10.14.2). У меня есть список json внизу;

[ { DIFFID: 8,
    DIFFDATE: 2019-11-01T14:04:41.831Z,
    REGIONNAMEA: 'TURKEY',
    VENDORA: 'XXX',
    SOURCECOUNT: 797,
    DIFFCOUNT: 8,
    PERCENTAGE: 99 },
  { DIFFID: 8,
    DIFFDATE: 2019-11-01T14:04:41.831Z,
    REGIONNAMEA: 'GERMANY',
    VENDORA: 'XXX',
    SOURCECOUNT: 440,
    DIFFCOUNT: 8,
    PERCENTAGE: 98.18 },
  { DIFFID: 8,
    DIFFDATE: 2019-11-01T14:04:41.831Z,
    REGIONNAMEA: 'FRANCE',
    VENDORA: 'XXX',
    SOURCECOUNT: 206,
    DIFFCOUNT: 5,
    PERCENTAGE: 97.57 } ]

Методом oracledb executeMany я вставлю этот список json в БД. Вот как я вызываю эту функцию ниже:

const saveManySla = async (config, jList) => {
  let test = [];
  let connection;
  try {
    connection = await oracledb.getConnection(config);
    test = await connection.executeMany(
      `
    INSERT INTO DAILY_DIFF_SLA 
      VALUES (SEQ_DAILY_DIFF_SLA.NEXTVAL, :DIFFID, :DIFFDATE, :REGIONNAMEA, :VENDORA, :SOURCECOUNT, :DIFFCOUNT, :PERCENTAGE)
      `,
      jList,
      {
        autoCommit: true
      }
    );
  } catch (err) {
    log.error(err, 'ora.saveManySla');
  } finally {
    if (connection) {
      connection.close();
    }
  }
  return test;
};

Кстати, я использовал этот метод executeMany много раз, прежде чем в первый раз у меня возникла такая проблема. Он вставил список JSON неправильно. Вот как это выглядит на БД внизу;

ID |DIFF_REPORT_ID|DIFF_DATE          |REGION        |VENDOR |SOURCE_COUNT|DIFF_COUNT|PERCENTAGE         |
---|--------------|-------------------|--------------|-------|------------|----------|-------------------|
139|             8|2019-11-04 11:09:12|TURKEY        |XXX    |         797|         8|                 99|
140|             8|2019-11-04 11:09:12|GERMANY       |XXX    |         440|         8|4636609220240232940|
141|             9|2019-11-04 11:09:13|FRANCE        |XXX    |         206|         5|              97.57|

Если я отфильтрую по "ГЕРМАНИИ", в моем списке json будет только один элемент. Затем я использую метод executeMany, который записывает правильно.

ID |DIFF_REPORT_ID|DIFF_DATE          |REGION        |VENDOR |SOURCE_COUNT|DIFF_COUNT|PERCENTAGE         |
---|--------------|-------------------|--------------|-------|------------|----------|-------------------|
142|             8|2019-11-04 11:19:12|GERMANY       |XXX    |         440|         8|              98.18|

PERCENTAGE столбец Тип данных Число .

1 Ответ

0 голосов
/ 05 ноября 2019

JavaScript пока не имеет надлежащей десятичной поддержки. Преобразуйте числа в JavaScript в строки, чтобы избежать ошибок преобразования. Затем преобразуйте строки в числа Oracle в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...